enolib 0.7.2 → 0.8.0
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 +4 -4
- data/lib/enolib/constants.rb +2 -1
- data/lib/enolib/context.rb +1 -1
- data/lib/enolib/elements/section.rb +3 -0
- data/lib/enolib/elements/section_element.rb +27 -24
- data/lib/enolib/errors/validation.rb +1 -1
- data/lib/enolib/grammar_regexp.rb +5 -5
- data/lib/enolib/locales/de.rb +7 -7
- data/lib/enolib/locales/en.rb +7 -7
- data/lib/enolib/locales/es.rb +1 -1
- data/lib/enolib/parser.rb +41 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49f109d1e380fde591e9fd8356d83a1024f5bcfb617d4408cbd803b8723379a0
|
4
|
+
data.tar.gz: 8015043eb20b92a86b6afd8a7ae510eb47f24b5fd10226bcadd0b8fe5021c76c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7525f016c0835c764b5b5888c98bf57214a8e1918458bd8253ac44cc424e9563713376fc369ee6198d389c63a52db79e6476c7ab476708780c4884883ba52693
|
7
|
+
data.tar.gz: 3667c043b3089e5ef598567adc6f5fe57e0246f98f82ff3f6052050945adbcb1af03a7f16aac343acb26c710229d7548deedd7108ddb310bdf2da66821a4e83f
|
data/lib/enolib/constants.rb
CHANGED
@@ -4,10 +4,11 @@ module Enolib
|
|
4
4
|
HUMAN_INDEXING = 1
|
5
5
|
PRETTY_TYPES = {
|
6
6
|
document: 'document',
|
7
|
-
|
7
|
+
empty: 'empty',
|
8
8
|
field: 'field',
|
9
9
|
fieldset: 'fieldset',
|
10
10
|
fieldset_entry: 'fieldset_entry',
|
11
|
+
field_or_fieldset_or_list: 'field_or_fieldset_or_list',
|
11
12
|
list: 'list',
|
12
13
|
list_item: 'list_item',
|
13
14
|
multiline_field_begin: 'field',
|
data/lib/enolib/context.rb
CHANGED
@@ -150,7 +150,7 @@ module Enolib
|
|
150
150
|
result[:comment] = comment(element) if element.has_key?(:comments)
|
151
151
|
|
152
152
|
case element[:type]
|
153
|
-
when :
|
153
|
+
when :field_or_fieldset_or_list, :empty
|
154
154
|
result[:key] = element[:key]
|
155
155
|
when :field
|
156
156
|
result[:key] = element[:key]
|
@@ -348,6 +348,9 @@ module Enolib
|
|
348
348
|
|
349
349
|
element = elements[0]
|
350
350
|
|
351
|
+
# TODO: Other implementations use a direct check here (['type'] == :foo)
|
352
|
+
# Should this be unified across implementations? Follow up.
|
353
|
+
# (guess is that the main reason is stricter visibility in ruby currently)
|
351
354
|
unless element.yields_empty?
|
352
355
|
raise Errors::Validation.unexpected_element_type(
|
353
356
|
@context,
|
@@ -5,7 +5,9 @@ module Enolib
|
|
5
5
|
attr_reader :instruction # TODO: Revisit this hacky exposition
|
6
6
|
|
7
7
|
def _untouched
|
8
|
-
|
8
|
+
unless instance_variable_defined?(:@yielded)
|
9
|
+
return instance_variable_defined?(:@touched) ? false : @instruction
|
10
|
+
end
|
9
11
|
|
10
12
|
return @instruction if instance_variable_defined?(:@empty) && !@empty.instance_variable_defined?(:@touched)
|
11
13
|
return @instruction if instance_variable_defined?(:@field) && !@field.instance_variable_defined?(:@touched)
|
@@ -16,17 +18,13 @@ module Enolib
|
|
16
18
|
|
17
19
|
def to_empty
|
18
20
|
unless instance_variable_defined?(:@empty)
|
19
|
-
|
20
|
-
raise TypeError, "This element was already yielded as #{PRETTY_TYPES[@yielded]} and can't be yielded again as an empty."
|
21
|
-
end
|
22
|
-
|
23
|
-
unless @instruction[:type] == :empty_element
|
21
|
+
unless @instruction[:type] == :empty
|
24
22
|
# TODO: Below and in all implementations - why nil for key as second parameter?
|
25
23
|
raise Errors::Validation.unexpected_element_type(@context, nil, @instruction, 'expected_empty')
|
26
24
|
end
|
27
25
|
|
28
26
|
@empty = Empty.new(@context, @instruction, @parent)
|
29
|
-
@yielded = :
|
27
|
+
@yielded = :empty
|
30
28
|
end
|
31
29
|
|
32
30
|
@empty
|
@@ -40,7 +38,7 @@ module Enolib
|
|
40
38
|
|
41
39
|
unless @instruction[:type] == :field ||
|
42
40
|
@instruction[:type] == :multiline_field_begin ||
|
43
|
-
@instruction[:type] == :
|
41
|
+
@instruction[:type] == :field_or_fieldset_or_list
|
44
42
|
raise Errors::Validation.unexpected_element_type(@context, nil, @instruction, 'expected_field')
|
45
43
|
end
|
46
44
|
|
@@ -57,7 +55,7 @@ module Enolib
|
|
57
55
|
raise TypeError, "This element was already yielded as #{PRETTY_TYPES[@yielded]} and can't be yielded again as a fieldset."
|
58
56
|
end
|
59
57
|
|
60
|
-
unless @instruction[:type] == :fieldset || @instruction[:type] == :
|
58
|
+
unless @instruction[:type] == :fieldset || @instruction[:type] == :field_or_fieldset_or_list
|
61
59
|
raise Errors::Validation.unexpected_element_type(@context, nil, @instruction, 'expected_fieldset')
|
62
60
|
end
|
63
61
|
|
@@ -74,7 +72,7 @@ module Enolib
|
|
74
72
|
raise TypeError, "This element was already yielded as #{PRETTY_TYPES[@yielded]} and can't be yielded again as a list."
|
75
73
|
end
|
76
74
|
|
77
|
-
unless @instruction[:type] == :list || @instruction[:type] == :
|
75
|
+
unless @instruction[:type] == :list || @instruction[:type] == :field_or_fieldset_or_list
|
78
76
|
raise Errors::Validation.unexpected_element_type(@context, nil, @instruction, 'expected_list')
|
79
77
|
end
|
80
78
|
|
@@ -103,35 +101,40 @@ module Enolib
|
|
103
101
|
end
|
104
102
|
|
105
103
|
def touch
|
106
|
-
# TODO: Here and other implementations: This needs to touch anyway; possibly not so small implications
|
107
|
-
return unless instance_variable_defined?(:@yielded)
|
108
|
-
|
109
104
|
# TODO: Revisit setting touched on foreign instances
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
105
|
+
if !instance_variable_defined?(:@yielded)
|
106
|
+
@touched = true
|
107
|
+
elsif instance_variable_defined?(:@empty)
|
108
|
+
@empty.touched = true
|
109
|
+
elsif instance_variable_defined?(:@field)
|
110
|
+
@field.touched = true
|
111
|
+
elsif instance_variable_defined?(:@fieldset)
|
112
|
+
@fieldset.touch
|
113
|
+
elsif instance_variable_defined?(:@list)
|
114
|
+
@list.touch
|
115
|
+
elsif instance_variable_defined?(:@section)
|
116
|
+
@section.touch
|
117
|
+
end
|
115
118
|
end
|
116
119
|
|
117
120
|
def yields_empty?
|
118
|
-
@instruction[:type] == :
|
121
|
+
@instruction[:type] == :empty
|
119
122
|
end
|
120
123
|
|
121
124
|
def yields_field?
|
122
125
|
@instruction[:type] == :field ||
|
123
126
|
@instruction[:type] == :multiline_field_begin ||
|
124
|
-
@instruction[:type] == :
|
127
|
+
@instruction[:type] == :field_or_fieldset_or_list
|
125
128
|
end
|
126
129
|
|
127
130
|
def yields_fieldset?
|
128
131
|
@instruction[:type] == :fieldset ||
|
129
|
-
@instruction[:type] == :
|
132
|
+
@instruction[:type] == :field_or_fieldset_or_list
|
130
133
|
end
|
131
134
|
|
132
135
|
def yields_list?
|
133
136
|
@instruction[:type] == :list ||
|
134
|
-
@instruction[:type] == :
|
137
|
+
@instruction[:type] == :field_or_fieldset_or_list
|
135
138
|
end
|
136
139
|
|
137
140
|
def yields_section?
|
@@ -141,8 +144,8 @@ module Enolib
|
|
141
144
|
private
|
142
145
|
|
143
146
|
def _yields
|
144
|
-
if @instruction[:type] == :
|
145
|
-
return "#{PRETTY_TYPES[:
|
147
|
+
if @instruction[:type] == :field_or_fieldset_or_list
|
148
|
+
return "#{PRETTY_TYPES[:field]},#{PRETTY_TYPES[:fieldset]},#{PRETTY_TYPES[:list]}"
|
146
149
|
end
|
147
150
|
|
148
151
|
PRETTY_TYPES[@instruction[:type]]
|
@@ -47,7 +47,7 @@ module Enolib
|
|
47
47
|
selection = {}
|
48
48
|
|
49
49
|
if element[:type] == :field ||
|
50
|
-
element[:type] == :
|
50
|
+
element[:type] == :field_or_fieldset_or_list ||
|
51
51
|
element[:type] == :multiline_field_begin
|
52
52
|
message = context.messages.missing_field_value(element[:key])
|
53
53
|
|
@@ -10,7 +10,7 @@ module Enolib
|
|
10
10
|
REQUIRED = /(\S[^\n]*?)/.source
|
11
11
|
|
12
12
|
#
|
13
|
-
|
13
|
+
EMPTY_LINE = /()/.source
|
14
14
|
EMPTY_LINE_INDEX = 1
|
15
15
|
|
16
16
|
# | value
|
@@ -78,7 +78,7 @@ module Enolib
|
|
78
78
|
|
79
79
|
# :
|
80
80
|
# : value
|
81
|
-
|
81
|
+
FIELD_OR_FIELDSET_OR_LIST = /(:)[^\S\n]*#{OPTIONAL}/.source
|
82
82
|
ELEMENT_OPERATOR_INDEX = 23
|
83
83
|
FIELD_VALUE_INDEX = 24
|
84
84
|
|
@@ -94,10 +94,10 @@ module Enolib
|
|
94
94
|
COPY_OPERATOR_INDEX = 27
|
95
95
|
TEMPLATE_INDEX = 28
|
96
96
|
|
97
|
-
LATE_DETERMINED = /#{KEY}\s*(?:#{
|
97
|
+
LATE_DETERMINED = /#{KEY}\s*(?:#{FIELD_OR_FIELDSET_OR_LIST}|#{FIELDSET_ENTRY}|#{COPY})?/.source
|
98
98
|
|
99
|
-
|
99
|
+
NON_EMPTY_LINE = /(?:#{EARLY_DETERMINED}|#{LATE_DETERMINED})/.source
|
100
100
|
|
101
|
-
REGEX = /[^\S\n]*(?:#{
|
101
|
+
REGEX = /[^\S\n]*(?:#{EMPTY_LINE}|#{NON_EMPTY_LINE})[^\S\n]*(?=\n|$)/.freeze
|
102
102
|
end
|
103
103
|
end
|
data/lib/enolib/locales/de.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# GENERATED ON 2019-
|
3
|
+
# GENERATED ON 2019-06-18T08:50:41 - DO NOT EDIT MANUALLY
|
4
4
|
|
5
5
|
module Enolib
|
6
6
|
module Locales
|
7
7
|
module De
|
8
8
|
CONTENT_HEADER = 'Inhalt'
|
9
9
|
EXPECTED_DOCUMENT = 'Das Dokument wurde erwartet.'
|
10
|
-
EXPECTED_EMPTY = 'Ein
|
10
|
+
EXPECTED_EMPTY = 'Ein Leerfeld wurde erwartet.'
|
11
11
|
EXPECTED_FIELD = 'Ein Feld wurde erwartet.'
|
12
12
|
EXPECTED_FIELDS = 'Nur Felder wurden erwartet.'
|
13
13
|
EXPECTED_FIELDSET = 'Ein Fieldset wurde erwartet.'
|
@@ -19,7 +19,7 @@ module Enolib
|
|
19
19
|
EXPECTED_SECTION = 'Eine Sektion wurde erwartet.'
|
20
20
|
EXPECTED_SECTIONS = 'Nur Sektionen wurden erwartet.'
|
21
21
|
EXPECTED_SINGLE_ELEMENT = 'Nur ein einzelnes Element wurde erwartet.'
|
22
|
-
EXPECTED_SINGLE_EMPTY = 'Nur ein einzelnes
|
22
|
+
EXPECTED_SINGLE_EMPTY = 'Nur ein einzelnes Leerfeld wurde erwartet.'
|
23
23
|
EXPECTED_SINGLE_FIELD = 'Nur ein einzelnes Feld wurde erwartet.'
|
24
24
|
EXPECTED_SINGLE_FIELDSET = 'Nur ein einzelnes Fieldset wurde erwartet.'
|
25
25
|
EXPECTED_SINGLE_FIELDSET_ENTRY = 'Nur ein einzelner Fieldset Eintrag wurde erwartet.'
|
@@ -28,7 +28,7 @@ module Enolib
|
|
28
28
|
GUTTER_HEADER = 'Zeile'
|
29
29
|
MISSING_COMMENT = 'Ein erforderlicher Kommentar zu diesem Feld fehlt.'
|
30
30
|
MISSING_ELEMENT = 'Ein einzelnes Element ist erforderlich - es kann einen beliebigen Schlüssel haben.'
|
31
|
-
MISSING_EMPTY = 'Ein einzelnes
|
31
|
+
MISSING_EMPTY = 'Ein einzelnes Leerfeld ist erforderlich - es kann einen beliebigen Schlüssel haben.'
|
32
32
|
MISSING_FIELD = 'Ein einzelnes Feld ist erforderlich - es kann einen beliebigen Schlüssel haben.'
|
33
33
|
MISSING_FIELDSET = 'Ein einzelnes Fieldset ist erforderlich - es kann einen beliebigen Schlüssel haben.'
|
34
34
|
MISSING_FIELDSET_ENTRY = 'Ein einzelner Fieldset Eintrag ist erforderlich - er kann einen beliebigen Schlüssel haben.'
|
@@ -37,7 +37,7 @@ module Enolib
|
|
37
37
|
UNEXPECTED_ELEMENT = 'Dieses Element wurde nicht erwartet, prüfe ob es am richtigen Platz ist und dass der Schlüssel keine Tippfehler enthält.'
|
38
38
|
def self.comment_error(message) "Es gibt ein Problem mit dem Kommentar dieses Elements: #{message}" end
|
39
39
|
def self.cyclic_dependency(line, key) "In Zeile #{line} wird '#{key}' in sich selbst kopiert." end
|
40
|
-
def self.expected_empty_with_key(key) "Ein
|
40
|
+
def self.expected_empty_with_key(key) "Ein Leerfeld mit dem Schlüssel '#{key}' wurde erwartet." end
|
41
41
|
def self.expected_field_with_key(key) "Ein Feld mit dem Schlüssel '#{key}' wurde erwartet." end
|
42
42
|
def self.expected_fields_with_key(key) "Nur Felder mit dem Schlüssel '#{key}' wurden erwartet." end
|
43
43
|
def self.expected_fieldset_with_key(key) "Ein Fieldset mit dem Schlüssel '#{key}' wurde erwartet." end
|
@@ -47,7 +47,7 @@ module Enolib
|
|
47
47
|
def self.expected_section_with_key(key) "Eine Sektion mit dem Schlüssel '#{key}' wurde erwartet." end
|
48
48
|
def self.expected_sections_with_key(key) "Nur Sektionen mit dem Schlüssel '#{key}' wurden erwartet." end
|
49
49
|
def self.expected_single_element_with_key(key) "Nur ein einzelnes Element mit dem Schlüssel '#{key}' wurde erwartet." end
|
50
|
-
def self.expected_single_empty_with_key(key) "Nur ein einzelnes
|
50
|
+
def self.expected_single_empty_with_key(key) "Nur ein einzelnes Leerfeld mit dem Schlüssel '#{key}' wurde erwartet." end
|
51
51
|
def self.expected_single_field_with_key(key) "Nur ein einzelnes Feld mit dem Schlüssel '#{key}' wurde erwartet." end
|
52
52
|
def self.expected_single_fieldset_entry_with_key(key) "Nur ein einzelner Fieldset Eintrag mit dem Schlüssel '#{key}' wurde erwartet." end
|
53
53
|
def self.expected_single_fieldset_with_key(key) "Nur ein einzelnes Fieldset mit dem Schlüssel '#{key}' wurde erwartet." end
|
@@ -57,7 +57,7 @@ module Enolib
|
|
57
57
|
def self.key_error(message) "Es gibt ein Problem mit dem Schlüssel dieses Elements: #{message}" end
|
58
58
|
def self.missing_element_for_continuation(line) "Zeile #{line} enthält eine Zeilenfortsetzung ohne dass davor ein fortsetzbares Element begonnen wurde." end
|
59
59
|
def self.missing_element_with_key(key) "Das Element '#{key}' fehlt - falls es angegeben wurde eventuell nach Tippfehlern Ausschau halten und auch die Gross/Kleinschreibung beachten." end
|
60
|
-
def self.missing_empty_with_key(key) "Das
|
60
|
+
def self.missing_empty_with_key(key) "Das Leerfeld '#{key}' fehlt - falls es angegeben wurde eventuell nach Tippfehlern Ausschau halten und auch die Gross/Kleinschreibung beachten." end
|
61
61
|
def self.missing_field_value(key) "Das Feld '#{key}' muss einen Wert enthalten." end
|
62
62
|
def self.missing_field_with_key(key) "Das Feld '#{key}' fehlt - falls es angegeben wurde eventuell nach Tippfehlern Ausschau halten und auch die Gross/Kleinschreibung beachten." end
|
63
63
|
def self.missing_fieldset_entry_value(key) "Der Fieldset Eintrag '#{key}' muss einen Wert enthalten." end
|
data/lib/enolib/locales/en.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# GENERATED ON 2019-
|
3
|
+
# GENERATED ON 2019-06-18T08:50:41 - DO NOT EDIT MANUALLY
|
4
4
|
|
5
5
|
module Enolib
|
6
6
|
module Locales
|
7
7
|
module En
|
8
8
|
CONTENT_HEADER = 'Content'
|
9
9
|
EXPECTED_DOCUMENT = 'The document was expected.'
|
10
|
-
EXPECTED_EMPTY = 'An empty
|
10
|
+
EXPECTED_EMPTY = 'An empty was expected.'
|
11
11
|
EXPECTED_FIELD = 'A field was expected.'
|
12
12
|
EXPECTED_FIELDS = 'Only fields were expected.'
|
13
13
|
EXPECTED_FIELDSET = 'A fieldset was expected.'
|
@@ -19,7 +19,7 @@ module Enolib
|
|
19
19
|
EXPECTED_SECTION = 'A section was expected.'
|
20
20
|
EXPECTED_SECTIONS = 'Only sections were expected.'
|
21
21
|
EXPECTED_SINGLE_ELEMENT = 'Only a single element was expected.'
|
22
|
-
EXPECTED_SINGLE_EMPTY = 'Only a single empty
|
22
|
+
EXPECTED_SINGLE_EMPTY = 'Only a single empty was expected.'
|
23
23
|
EXPECTED_SINGLE_FIELD = 'Only a single field was expected.'
|
24
24
|
EXPECTED_SINGLE_FIELDSET = 'Only a single fieldset was expected.'
|
25
25
|
EXPECTED_SINGLE_FIELDSET_ENTRY = 'Only a single fieldset entry was expected.'
|
@@ -28,7 +28,7 @@ module Enolib
|
|
28
28
|
GUTTER_HEADER = 'Line'
|
29
29
|
MISSING_COMMENT = 'A required comment for this element is missing.'
|
30
30
|
MISSING_ELEMENT = 'A single element is required - it can have any key.'
|
31
|
-
MISSING_EMPTY = 'A single empty
|
31
|
+
MISSING_EMPTY = 'A single empty is required - it can have any key.'
|
32
32
|
MISSING_FIELD = 'A single field is required - it can have any key.'
|
33
33
|
MISSING_FIELDSET = 'A single fieldset is required - it can have any key.'
|
34
34
|
MISSING_FIELDSET_ENTRY = 'A single fieldset entry is required - it can have any key.'
|
@@ -37,7 +37,7 @@ module Enolib
|
|
37
37
|
UNEXPECTED_ELEMENT = 'This element was not expected, make sure it is at the right place in the document and that its key is not mis-typed.'
|
38
38
|
def self.comment_error(message) "There is a problem with the comment of this element: #{message}" end
|
39
39
|
def self.cyclic_dependency(line, key) "In line #{line} '#{key}' is copied into itself." end
|
40
|
-
def self.expected_empty_with_key(key) "An empty
|
40
|
+
def self.expected_empty_with_key(key) "An empty with the key '#{key}' was expected." end
|
41
41
|
def self.expected_field_with_key(key) "A field with the key '#{key}' was expected." end
|
42
42
|
def self.expected_fields_with_key(key) "Only fields with the key '#{key}' were expected." end
|
43
43
|
def self.expected_fieldset_with_key(key) "A fieldset with the key '#{key}' was expected." end
|
@@ -47,7 +47,7 @@ module Enolib
|
|
47
47
|
def self.expected_section_with_key(key) "A section with the key '#{key}' was expected." end
|
48
48
|
def self.expected_sections_with_key(key) "Only sections with the key '#{key}' were expected." end
|
49
49
|
def self.expected_single_element_with_key(key) "Only a single element with the key '#{key}' was expected." end
|
50
|
-
def self.expected_single_empty_with_key(key) "Only a single empty
|
50
|
+
def self.expected_single_empty_with_key(key) "Only a single empty with the key '#{key}' was expected." end
|
51
51
|
def self.expected_single_field_with_key(key) "Only a single field with the key '#{key}' was expected." end
|
52
52
|
def self.expected_single_fieldset_entry_with_key(key) "Only a single fieldset entry with the key '#{key}' was expected." end
|
53
53
|
def self.expected_single_fieldset_with_key(key) "Only a single fieldset with the key '#{key}' was expected." end
|
@@ -57,7 +57,7 @@ module Enolib
|
|
57
57
|
def self.key_error(message) "There is a problem with the key of this element: #{message}" end
|
58
58
|
def self.missing_element_for_continuation(line) "Line #{line} contains a line continuation without a continuable element being specified before." end
|
59
59
|
def self.missing_element_with_key(key) "The element '#{key}' is missing - in case it has been specified look for typos and also check for correct capitalization." end
|
60
|
-
def self.missing_empty_with_key(key) "The empty
|
60
|
+
def self.missing_empty_with_key(key) "The empty '#{key}' is missing - in case it has been specified look for typos and also check for correct capitalization." end
|
61
61
|
def self.missing_field_value(key) "The field '#{key}' must contain a value." end
|
62
62
|
def self.missing_field_with_key(key) "The field '#{key}' is missing - in case it has been specified look for typos and also check for correct capitalization." end
|
63
63
|
def self.missing_fieldset_entry_value(key) "The fieldset entry '#{key}' must contain a value." end
|
data/lib/enolib/locales/es.rb
CHANGED
data/lib/enolib/parser.rb
CHANGED
@@ -77,7 +77,7 @@ module Enolib
|
|
77
77
|
instruction[:type] = :field
|
78
78
|
instruction[:value] = value
|
79
79
|
else
|
80
|
-
instruction[:type] = :
|
80
|
+
instruction[:type] = :field_or_fieldset_or_list
|
81
81
|
end
|
82
82
|
|
83
83
|
instruction[:parent] = last_section
|
@@ -107,7 +107,7 @@ module Enolib
|
|
107
107
|
raise Errors::Parsing.missing_list_for_list_item(@context, instruction)
|
108
108
|
elsif last_non_section_element[:type] == :list
|
109
109
|
last_non_section_element[:items].push(instruction)
|
110
|
-
elsif last_non_section_element[:type] == :
|
110
|
+
elsif last_non_section_element[:type] == :field_or_fieldset_or_list
|
111
111
|
last_non_section_element[:items] = [instruction]
|
112
112
|
last_non_section_element[:type] = :list
|
113
113
|
else
|
@@ -152,7 +152,7 @@ module Enolib
|
|
152
152
|
raise Errors::Parsing.missing_fieldset_for_fieldset_entry(@context, instruction)
|
153
153
|
elsif last_non_section_element[:type] == :fieldset
|
154
154
|
last_non_section_element[:entries].push(instruction)
|
155
|
-
elsif last_non_section_element[:type] == :
|
155
|
+
elsif last_non_section_element[:type] == :field_or_fieldset_or_list
|
156
156
|
last_non_section_element[:entries] = [instruction]
|
157
157
|
last_non_section_element[:type] = :fieldset
|
158
158
|
else
|
@@ -184,7 +184,7 @@ module Enolib
|
|
184
184
|
if last_continuable_element.has_key?(:continuations)
|
185
185
|
last_continuable_element[:continuations].push(instruction)
|
186
186
|
else
|
187
|
-
if last_continuable_element[:type] == :
|
187
|
+
if last_continuable_element[:type] == :field_or_fieldset_or_list
|
188
188
|
last_continuable_element[:type] = :field
|
189
189
|
end
|
190
190
|
|
@@ -216,7 +216,7 @@ module Enolib
|
|
216
216
|
if last_continuable_element.has_key?(:continuations)
|
217
217
|
last_continuable_element[:continuations].push(instruction)
|
218
218
|
else
|
219
|
-
if last_continuable_element[:type] == :
|
219
|
+
if last_continuable_element[:type] == :field_or_fieldset_or_list
|
220
220
|
last_continuable_element[:type] = :field
|
221
221
|
end
|
222
222
|
|
@@ -427,7 +427,7 @@ module Enolib
|
|
427
427
|
instruction[:ranges][:copy_operator] = match.offset(Grammar::COPY_OPERATOR_INDEX)
|
428
428
|
instruction[:ranges][:template] = match.offset(Grammar::TEMPLATE_INDEX)
|
429
429
|
instruction[:template] = template
|
430
|
-
instruction[:type] = :
|
430
|
+
instruction[:type] = :field_or_fieldset_or_list
|
431
431
|
|
432
432
|
instruction[:key] = match[Grammar::KEY_UNESCAPED_INDEX]
|
433
433
|
|
@@ -452,6 +452,40 @@ module Enolib
|
|
452
452
|
end
|
453
453
|
|
454
454
|
instruction[:copy] = @unresolved_non_section_elements[template]
|
455
|
+
elsif match[Grammar::KEY_UNESCAPED_INDEX]
|
456
|
+
|
457
|
+
if comments
|
458
|
+
instruction[:comments] = comments
|
459
|
+
comments = nil
|
460
|
+
end
|
461
|
+
|
462
|
+
instruction[:key] = match[Grammar::KEY_UNESCAPED_INDEX]
|
463
|
+
instruction[:ranges][:key] = match.offset(Grammar::KEY_UNESCAPED_INDEX)
|
464
|
+
instruction[:type] = :empty
|
465
|
+
|
466
|
+
instruction[:parent] = last_section
|
467
|
+
last_section[:elements].push(instruction)
|
468
|
+
last_continuable_element = nil
|
469
|
+
last_non_section_element = instruction
|
470
|
+
|
471
|
+
elsif match[Grammar::KEY_ESCAPED_INDEX]
|
472
|
+
|
473
|
+
if comments
|
474
|
+
instruction[:comments] = comments
|
475
|
+
comments = nil
|
476
|
+
end
|
477
|
+
|
478
|
+
instruction[:key] = match[Grammar::KEY_ESCAPED_INDEX]
|
479
|
+
instruction[:ranges][:escape_begin_operator] = match.offset(Grammar::KEY_ESCAPE_BEGIN_OPERATOR_INDEX)
|
480
|
+
instruction[:ranges][:escape_end_operator] = match.offset(Grammar::KEY_ESCAPE_END_OPERATOR_INDEX)
|
481
|
+
instruction[:ranges][:key] = match.offset(Grammar::KEY_ESCAPED_INDEX)
|
482
|
+
instruction[:type] = :empty
|
483
|
+
|
484
|
+
instruction[:parent] = last_section
|
485
|
+
last_section[:elements].push(instruction)
|
486
|
+
last_continuable_element = nil
|
487
|
+
last_non_section_element = instruction
|
488
|
+
|
455
489
|
end
|
456
490
|
|
457
491
|
unless multiline_field
|
@@ -474,7 +508,7 @@ module Enolib
|
|
474
508
|
end
|
475
509
|
|
476
510
|
case element[:type]
|
477
|
-
when :
|
511
|
+
when :field_or_fieldset_or_list
|
478
512
|
case template[:type]
|
479
513
|
when :multiline_field_begin
|
480
514
|
element[:type] = :field
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enolib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Repp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deep-cover
|