cskit 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +7 -4
  3. data/History.txt +5 -0
  4. data/cskit.gemspec +5 -8
  5. data/lib/cskit.rb +15 -66
  6. data/lib/cskit/annotated_string.rb +1 -1
  7. data/lib/cskit/annotator.rb +1 -3
  8. data/lib/cskit/formatters.rb +3 -4
  9. data/lib/cskit/formatters/bible.rb +4 -5
  10. data/lib/cskit/formatters/bible/bible_html_formatter.rb +2 -2
  11. data/lib/cskit/formatters/bible/bible_json_formatter.rb +17 -0
  12. data/lib/cskit/formatters/bible/bible_plain_text_formatter.rb +3 -3
  13. data/lib/cskit/formatters/science_health.rb +3 -5
  14. data/lib/cskit/formatters/science_health/science_health_html_formatter.rb +3 -4
  15. data/lib/cskit/formatters/science_health/science_health_plain_text_formatter.rb +5 -4
  16. data/lib/cskit/lesson.rb +3 -5
  17. data/lib/cskit/lesson/lesson.rb +3 -3
  18. data/lib/cskit/lesson/section.rb +1 -1
  19. data/lib/cskit/parsers.rb +6 -3
  20. data/lib/cskit/parsers/bible.rb +10 -0
  21. data/lib/cskit/parsers/bible/bible_parser.rb +192 -0
  22. data/lib/cskit/parsers/bible/bible_tokenizer.rb +32 -0
  23. data/lib/cskit/parsers/parser.rb +68 -0
  24. data/lib/cskit/parsers/science_health.rb +10 -0
  25. data/lib/cskit/parsers/science_health/science_health_parser.rb +201 -0
  26. data/lib/cskit/parsers/science_health/science_health_tokenizer.rb +33 -0
  27. data/lib/cskit/parsers/token.rb +17 -0
  28. data/lib/cskit/parsers/tokenizer.rb +43 -0
  29. data/lib/cskit/readers.rb +4 -4
  30. data/lib/cskit/readers/bible_reader.rb +2 -2
  31. data/lib/cskit/readers/reading.rb +8 -1
  32. data/lib/cskit/readers/science_health_reader.rb +8 -8
  33. data/lib/cskit/registry.rb +65 -0
  34. data/lib/cskit/resources/volumes.rb +3 -3
  35. data/lib/cskit/resources/volumes/bible.rb +11 -9
  36. data/lib/cskit/resources/volumes/science_health.rb +10 -9
  37. data/lib/cskit/version.rb +1 -1
  38. data/lib/cskit/volume.rb +1 -1
  39. data/spec/parsers/bible/bible_parser_spec.rb +205 -0
  40. data/spec/parsers/science_health/science_health_parser_spec.rb +153 -0
  41. data/spec/spec_helper.rb +8 -0
  42. metadata +16 -38
  43. data/lib/cskit/parsers/bible/bible.rb +0 -1005
  44. data/lib/cskit/parsers/bible/bible.treetop +0 -64
  45. data/lib/cskit/parsers/bible/nodes.rb +0 -153
  46. data/lib/cskit/parsers/bible/objects.rb +0 -81
  47. data/lib/cskit/parsers/science_health/nodes.rb +0 -82
  48. data/lib/cskit/parsers/science_health/objects.rb +0 -47
  49. data/lib/cskit/parsers/science_health/science_health.rb +0 -607
  50. data/lib/cskit/parsers/science_health/science_health.treetop +0 -44
@@ -1,64 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'cskit/parsers/bible/nodes'
4
- require 'cskit/parsers/bible/objects'
5
-
6
- module CSKit
7
- module Parsers
8
-
9
- grammar Bible
10
- rule citation
11
- book [\s]* chapter_list <CitationNode>
12
- end
13
-
14
- rule chapter_list
15
- chapter ([\s]* ";" [\s]* chapter_list)? <ChapterListNode>
16
- end
17
-
18
- rule book
19
- [a-zA-Z\.\s]+ <BookNode>
20
- end
21
-
22
- rule chapter
23
- [\d]+ [\s]* ":" [\s]* verse_list <ChapterNode>
24
- end
25
-
26
- rule verse_list
27
- verse ([\s]* "," [\s]* verse_list)? <VerseListNode>
28
- end
29
-
30
- rule verse
31
- (compound_verse_number / verse_number) [\s]* starter [\s]* terminator <VerseNode>
32
- end
33
-
34
- rule compound_verse_number
35
- verse_number [\s]* "-" [\s]* verse_number <CompoundVerseNumberNode>
36
- end
37
-
38
- rule verse_number
39
- [\d]+ <VerseNumberNode>
40
- end
41
-
42
- rule starter
43
- (cardinality [\s]* starter_fragment <StarterNode>)?
44
- end
45
-
46
- rule starter_fragment
47
- ([^\(\)\,\;]+ <FragmentNode>)?
48
- end
49
-
50
- rule terminator
51
- ("(" [\s]* "to" [\s]* cardinality [\s]* terminator_fragment [\s]* ")" <TerminatorNode>)?
52
- end
53
-
54
- rule terminator_fragment
55
- ([^\(\)]+ <FragmentNode>)?
56
- end
57
-
58
- rule cardinality
59
- ("1st" / "2nd" / "3rd")?
60
- end
61
- end
62
-
63
- end
64
- end
@@ -1,153 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module CSKit
4
- module Parsers
5
- module Bible
6
-
7
- class CitationNode < Treetop::Runtime::SyntaxNode
8
- def to_sexp
9
- [[:book, book.to_sexp], [:chapters, chapter_list.to_sexp]]
10
- end
11
-
12
- def to_object
13
- CSKit::Parsers::Bible::Citation.new(
14
- book.text_value,
15
- chapter_list.to_object
16
- )
17
- end
18
- end
19
-
20
- class BookNode < Treetop::Runtime::SyntaxNode
21
- def to_sexp
22
- text_value
23
- end
24
- end
25
-
26
- class ChapterListNode < Treetop::Runtime::SyntaxNode
27
- def to_sexp
28
- result = [chapter.to_sexp]
29
-
30
- if elements[1] && elements[1].respond_to?(:chapter_list)
31
- result += elements[1].chapter_list.to_sexp
32
- end
33
-
34
- result
35
- end
36
-
37
- def to_object
38
- result = [chapter.to_object]
39
-
40
- if elements[1] && elements[1].respond_to?(:chapter_list)
41
- result += elements[1].chapter_list.to_object
42
- end
43
-
44
- result
45
- end
46
- end
47
-
48
- class ChapterNode < Treetop::Runtime::SyntaxNode
49
- def text_value
50
- super.to_i
51
- end
52
-
53
- def to_sexp
54
- [text_value, verse_list.to_sexp]
55
- end
56
-
57
- def to_object
58
- CSKit::Parsers::Bible::Chapter.new(
59
- text_value,
60
- verse_list.to_object
61
- )
62
- end
63
- end
64
-
65
- class VerseListNode < Treetop::Runtime::SyntaxNode
66
- def to_sexp
67
- result = [verse.to_sexp]
68
-
69
- if elements[1] && elements[1].respond_to?(:verse_list)
70
- result += elements[1].verse_list.to_sexp
71
- end
72
-
73
- result
74
- end
75
-
76
- def to_object
77
- result = [verse.to_object]
78
-
79
- if elements[1] && elements[1].respond_to?(:verse_list)
80
- result += elements[1].verse_list.to_object
81
- end
82
-
83
- result
84
- end
85
- end
86
-
87
- class VerseNode < Treetop::Runtime::SyntaxNode
88
- def to_sexp
89
- elements.flat_map { |e| e.to_sexp if e.respond_to?(:to_sexp) }
90
- end
91
-
92
- def to_object
93
- line_numbers = elements[0].to_sexp.first
94
-
95
- CSKit::Parsers::Bible::Verse.new(
96
- line_numbers.first,
97
- line_numbers.last,
98
- (starter.to_object rescue nil),
99
- (terminator.to_object rescue nil)
100
- )
101
- end
102
- end
103
-
104
- class CompoundVerseNumberNode < Treetop::Runtime::SyntaxNode
105
- def to_sexp
106
- [[verse_number1.text_value.to_i, verse_number2.text_value.to_i]]
107
- end
108
- end
109
-
110
- class VerseNumberNode < Treetop::Runtime::SyntaxNode
111
- def to_sexp
112
- [[text_value.to_i, text_value.to_i]]
113
- end
114
- end
115
-
116
- class PositionalNode < Treetop::Runtime::SyntaxNode
117
- def to_sexp
118
- [get_cardinality, fragment.value]
119
- end
120
-
121
- def get_cardinality
122
- card_val = cardinality.text_value.to_i
123
- card_val == 0 ? 1 : card_val
124
- end
125
-
126
- def to_object
127
- Positional.new(get_cardinality, fragment.value)
128
- end
129
- end
130
-
131
- class StarterNode < PositionalNode
132
- def fragment
133
- starter_fragment
134
- end
135
- end
136
-
137
- class TerminatorNode < PositionalNode
138
- def fragment
139
- terminator_fragment
140
- end
141
- end
142
-
143
- class FragmentNode < Treetop::Runtime::SyntaxNode
144
- def value
145
- text_value.strip
146
- end
147
-
148
- alias :to_sexp :value
149
- end
150
-
151
- end
152
- end
153
- end
@@ -1,81 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module CSKit
4
- module Parsers
5
- module Bible
6
-
7
- Citation = Struct.new(:book, :chapter_list) do
8
- def to_s
9
- "#{book.strip} #{chapter_list.map(&:to_s).join("; ")}"
10
- end
11
-
12
- def to_hash
13
- {
14
- :book => book,
15
- :chapters => chapter_list.map(&:to_hash)
16
- }
17
- end
18
- end
19
-
20
- Chapter = Struct.new(:chapter_number, :verse_list) do
21
- def to_s
22
- "#{chapter_number}:#{verse_list.map(&:to_s).join(", ")}"
23
- end
24
-
25
- def to_hash
26
- {
27
- :chapter_number => chapter_number,
28
- :verses => verse_list.map(&:to_hash)
29
- }
30
- end
31
- end
32
-
33
- Verse = Struct.new(:start, :finish, :starter, :terminator) do
34
- def to_s
35
- str = if start == finish
36
- start.to_s
37
- else
38
- "#{start}-#{finish}"
39
- end
40
-
41
- str << " #{starter}" if starter
42
- str << " (to #{terminator})" if terminator
43
- str
44
- end
45
-
46
- def to_hash
47
- {
48
- :start => start,
49
- :finish => finish,
50
- :starter => starter ? starter.to_hash : nil,
51
- :terminator => terminator ? terminator.to_hash : nil
52
- }
53
- end
54
- end
55
-
56
- Positional = Struct.new(:cardinality, :fragment) do
57
- def to_s
58
- card_s = case cardinality
59
- when 1 then "1st"
60
- when 2 then "2nd"
61
- when 3 then "3rd"
62
- end
63
-
64
- if cardinality
65
- "#{card_s} #{fragment}"
66
- else
67
- fragment
68
- end
69
- end
70
-
71
- def to_hash
72
- {
73
- :cardinality => cardinality,
74
- :fragment => fragment
75
- }
76
- end
77
- end
78
-
79
- end
80
- end
81
- end
@@ -1,82 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module CSKit
4
- module Parsers
5
- module ScienceHealth
6
-
7
- class CitationNode < Treetop::Runtime::SyntaxNode
8
- def to_sexp
9
- [[:page, page.to_sexp], [:lines, line_list.to_sexp]]
10
- end
11
-
12
- def to_object
13
- CSKit::Parsers::ScienceHealth::Citation.new(
14
- page.text_value,
15
- line_list.to_object
16
- )
17
- end
18
- end
19
-
20
- class PageNode < Treetop::Runtime::SyntaxNode
21
- def to_sexp
22
- text_value
23
- end
24
- end
25
-
26
- class LineListNode < Treetop::Runtime::SyntaxNode
27
- def to_sexp
28
- result = [line.to_sexp]
29
-
30
- if elements[1] && elements[1].respond_to?(:line_list)
31
- result += elements[1].line_list.to_sexp
32
- end
33
-
34
- result
35
- end
36
-
37
- def to_object
38
- to_sexp.map do |line|
39
- only = line[1] == :only
40
- CSKit::Parsers::ScienceHealth::Line.new(
41
- line[0].first,
42
- line[0].last,
43
- only,
44
- only ? nil : line[1]
45
- )
46
- end
47
- end
48
- end
49
-
50
- class LineNode < Treetop::Runtime::SyntaxNode
51
- def to_sexp
52
- elements.flat_map { |e| e.to_sexp if e.respond_to?(:to_sexp) }
53
- end
54
- end
55
-
56
- class CompoundLineNumberNode < Treetop::Runtime::SyntaxNode
57
- def to_sexp
58
- [[line_number1.text_value.to_i, line_number2.text_value.to_i]]
59
- end
60
- end
61
-
62
- class LineNumberNode < Treetop::Runtime::SyntaxNode
63
- def to_sexp
64
- [[text_value.to_i, nil]]
65
- end
66
- end
67
-
68
- class OnlyNode < Treetop::Runtime::SyntaxNode
69
- def to_sexp
70
- :only
71
- end
72
- end
73
-
74
- class StartFragmentNode < Treetop::Runtime::SyntaxNode
75
- def to_sexp
76
- text_value.strip
77
- end
78
- end
79
-
80
- end
81
- end
82
- end
@@ -1,47 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module CSKit
4
- module Parsers
5
- module ScienceHealth
6
-
7
- Citation = Struct.new(:page, :lines) do
8
- def to_s
9
- "#{page}:#{lines.map(&:to_s).join(", ")}"
10
- end
11
-
12
- def to_hash
13
- {
14
- :page => page,
15
- :lines => lines.map(&:to_hash)
16
- }
17
- end
18
- end
19
-
20
- Line = Struct.new(:start, :finish, :only, :start_fragment) do
21
- alias :only? :only
22
-
23
- def to_s
24
- str = if finish
25
- "#{start}-#{finish}"
26
- else
27
- start.to_s
28
- end
29
-
30
- str << " (only)" if only?
31
- str << " #{start_fragment}" if start_fragment
32
- str
33
- end
34
-
35
- def to_hash
36
- {
37
- :start => start,
38
- :finish => finish,
39
- :only => only,
40
- :start_fragment => start_fragment
41
- }
42
- end
43
- end
44
-
45
- end
46
- end
47
- end
@@ -1,607 +0,0 @@
1
- # Autogenerated from a Treetop grammar. Edits may be lost.
2
-
3
-
4
- # encoding: UTF-8
5
-
6
- require 'cskit/parsers/science_health/nodes'
7
- require 'cskit/parsers/science_health/objects'
8
-
9
- module CSKit
10
- module Parsers
11
-
12
- module ScienceHealth
13
- include Treetop::Runtime
14
-
15
- def root
16
- @root ||= :citation
17
- end
18
-
19
- module Citation0
20
- def page
21
- elements[0]
22
- end
23
-
24
- def line_list
25
- elements[4]
26
- end
27
- end
28
-
29
- def _nt_citation
30
- start_index = index
31
- if node_cache[:citation].has_key?(index)
32
- cached = node_cache[:citation][index]
33
- if cached
34
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
35
- @index = cached.interval.end
36
- end
37
- return cached
38
- end
39
-
40
- i0, s0 = index, []
41
- r1 = _nt_page
42
- s0 << r1
43
- if r1
44
- s2, i2 = [], index
45
- loop do
46
- if has_terminal?('\G[\\s]', true, index)
47
- r3 = true
48
- @index += 1
49
- else
50
- r3 = nil
51
- end
52
- if r3
53
- s2 << r3
54
- else
55
- break
56
- end
57
- end
58
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
59
- s0 << r2
60
- if r2
61
- if has_terminal?(":", false, index)
62
- r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
63
- @index += 1
64
- else
65
- terminal_parse_failure(":")
66
- r4 = nil
67
- end
68
- s0 << r4
69
- if r4
70
- s5, i5 = [], index
71
- loop do
72
- if has_terminal?('\G[\\s]', true, index)
73
- r6 = true
74
- @index += 1
75
- else
76
- r6 = nil
77
- end
78
- if r6
79
- s5 << r6
80
- else
81
- break
82
- end
83
- end
84
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
85
- s0 << r5
86
- if r5
87
- r7 = _nt_line_list
88
- s0 << r7
89
- end
90
- end
91
- end
92
- end
93
- if s0.last
94
- r0 = instantiate_node(CitationNode,input, i0...index, s0)
95
- r0.extend(Citation0)
96
- else
97
- @index = i0
98
- r0 = nil
99
- end
100
-
101
- node_cache[:citation][start_index] = r0
102
-
103
- r0
104
- end
105
-
106
- def _nt_page
107
- start_index = index
108
- if node_cache[:page].has_key?(index)
109
- cached = node_cache[:page][index]
110
- if cached
111
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
112
- @index = cached.interval.end
113
- end
114
- return cached
115
- end
116
-
117
- s0, i0 = [], index
118
- loop do
119
- if has_terminal?('\G[\\d{1,3}|vi{2}|xi{1,2}|i{0,1}x]', true, index)
120
- r1 = true
121
- @index += 1
122
- else
123
- r1 = nil
124
- end
125
- if r1
126
- s0 << r1
127
- else
128
- break
129
- end
130
- end
131
- if s0.empty?
132
- @index = i0
133
- r0 = nil
134
- else
135
- r0 = instantiate_node(PageNode,input, i0...index, s0)
136
- end
137
-
138
- node_cache[:page][start_index] = r0
139
-
140
- r0
141
- end
142
-
143
- module LineList0
144
- def line_list
145
- elements[3]
146
- end
147
- end
148
-
149
- module LineList1
150
- def line
151
- elements[0]
152
- end
153
-
154
- end
155
-
156
- def _nt_line_list
157
- start_index = index
158
- if node_cache[:line_list].has_key?(index)
159
- cached = node_cache[:line_list][index]
160
- if cached
161
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
162
- @index = cached.interval.end
163
- end
164
- return cached
165
- end
166
-
167
- i0, s0 = index, []
168
- r1 = _nt_line
169
- s0 << r1
170
- if r1
171
- i3, s3 = index, []
172
- s4, i4 = [], index
173
- loop do
174
- if has_terminal?('\G[\\s]', true, index)
175
- r5 = true
176
- @index += 1
177
- else
178
- r5 = nil
179
- end
180
- if r5
181
- s4 << r5
182
- else
183
- break
184
- end
185
- end
186
- r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
187
- s3 << r4
188
- if r4
189
- if has_terminal?(",", false, index)
190
- r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
191
- @index += 1
192
- else
193
- terminal_parse_failure(",")
194
- r6 = nil
195
- end
196
- s3 << r6
197
- if r6
198
- s7, i7 = [], index
199
- loop do
200
- if has_terminal?('\G[\\s]', true, index)
201
- r8 = true
202
- @index += 1
203
- else
204
- r8 = nil
205
- end
206
- if r8
207
- s7 << r8
208
- else
209
- break
210
- end
211
- end
212
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
213
- s3 << r7
214
- if r7
215
- r9 = _nt_line_list
216
- s3 << r9
217
- end
218
- end
219
- end
220
- if s3.last
221
- r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
222
- r3.extend(LineList0)
223
- else
224
- @index = i3
225
- r3 = nil
226
- end
227
- if r3
228
- r2 = r3
229
- else
230
- r2 = instantiate_node(SyntaxNode,input, index...index)
231
- end
232
- s0 << r2
233
- end
234
- if s0.last
235
- r0 = instantiate_node(LineListNode,input, i0...index, s0)
236
- r0.extend(LineList1)
237
- else
238
- @index = i0
239
- r0 = nil
240
- end
241
-
242
- node_cache[:line_list][start_index] = r0
243
-
244
- r0
245
- end
246
-
247
- module Line0
248
- end
249
-
250
- def _nt_line
251
- start_index = index
252
- if node_cache[:line].has_key?(index)
253
- cached = node_cache[:line][index]
254
- if cached
255
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
256
- @index = cached.interval.end
257
- end
258
- return cached
259
- end
260
-
261
- i0, s0 = index, []
262
- i1 = index
263
- r2 = _nt_compound_line_number
264
- if r2
265
- r1 = r2
266
- else
267
- r3 = _nt_line_number
268
- if r3
269
- r1 = r3
270
- else
271
- @index = i1
272
- r1 = nil
273
- end
274
- end
275
- s0 << r1
276
- if r1
277
- i5 = index
278
- r6 = _nt_only
279
- if r6
280
- r5 = r6
281
- else
282
- r7 = _nt_start_fragment
283
- if r7
284
- r5 = r7
285
- else
286
- @index = i5
287
- r5 = nil
288
- end
289
- end
290
- if r5
291
- r4 = r5
292
- else
293
- r4 = instantiate_node(SyntaxNode,input, index...index)
294
- end
295
- s0 << r4
296
- end
297
- if s0.last
298
- r0 = instantiate_node(LineNode,input, i0...index, s0)
299
- r0.extend(Line0)
300
- else
301
- @index = i0
302
- r0 = nil
303
- end
304
-
305
- node_cache[:line][start_index] = r0
306
-
307
- r0
308
- end
309
-
310
- module CompoundLineNumber0
311
- def line_number1
312
- elements[0]
313
- end
314
-
315
- def line_number2
316
- elements[4]
317
- end
318
- end
319
-
320
- def _nt_compound_line_number
321
- start_index = index
322
- if node_cache[:compound_line_number].has_key?(index)
323
- cached = node_cache[:compound_line_number][index]
324
- if cached
325
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
326
- @index = cached.interval.end
327
- end
328
- return cached
329
- end
330
-
331
- i0, s0 = index, []
332
- r1 = _nt_line_number
333
- s0 << r1
334
- if r1
335
- s2, i2 = [], index
336
- loop do
337
- if has_terminal?('\G[\\s]', true, index)
338
- r3 = true
339
- @index += 1
340
- else
341
- r3 = nil
342
- end
343
- if r3
344
- s2 << r3
345
- else
346
- break
347
- end
348
- end
349
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
350
- s0 << r2
351
- if r2
352
- if has_terminal?("-", false, index)
353
- r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
354
- @index += 1
355
- else
356
- terminal_parse_failure("-")
357
- r4 = nil
358
- end
359
- s0 << r4
360
- if r4
361
- s5, i5 = [], index
362
- loop do
363
- if has_terminal?('\G[\\s]', true, index)
364
- r6 = true
365
- @index += 1
366
- else
367
- r6 = nil
368
- end
369
- if r6
370
- s5 << r6
371
- else
372
- break
373
- end
374
- end
375
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
376
- s0 << r5
377
- if r5
378
- r7 = _nt_line_number
379
- s0 << r7
380
- end
381
- end
382
- end
383
- end
384
- if s0.last
385
- r0 = instantiate_node(CompoundLineNumberNode,input, i0...index, s0)
386
- r0.extend(CompoundLineNumber0)
387
- else
388
- @index = i0
389
- r0 = nil
390
- end
391
-
392
- node_cache[:compound_line_number][start_index] = r0
393
-
394
- r0
395
- end
396
-
397
- def _nt_line_number
398
- start_index = index
399
- if node_cache[:line_number].has_key?(index)
400
- cached = node_cache[:line_number][index]
401
- if cached
402
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
403
- @index = cached.interval.end
404
- end
405
- return cached
406
- end
407
-
408
- s0, i0 = [], index
409
- loop do
410
- if has_terminal?('\G[\\d]', true, index)
411
- r1 = true
412
- @index += 1
413
- else
414
- r1 = nil
415
- end
416
- if r1
417
- s0 << r1
418
- else
419
- break
420
- end
421
- end
422
- if s0.empty?
423
- @index = i0
424
- r0 = nil
425
- else
426
- r0 = instantiate_node(LineNumberNode,input, i0...index, s0)
427
- end
428
-
429
- node_cache[:line_number][start_index] = r0
430
-
431
- r0
432
- end
433
-
434
- module Only0
435
- end
436
-
437
- def _nt_only
438
- start_index = index
439
- if node_cache[:only].has_key?(index)
440
- cached = node_cache[:only][index]
441
- if cached
442
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
443
- @index = cached.interval.end
444
- end
445
- return cached
446
- end
447
-
448
- i0, s0 = index, []
449
- s1, i1 = [], index
450
- loop do
451
- if has_terminal?('\G[\\s]', true, index)
452
- r2 = true
453
- @index += 1
454
- else
455
- r2 = nil
456
- end
457
- if r2
458
- s1 << r2
459
- else
460
- break
461
- end
462
- end
463
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
464
- s0 << r1
465
- if r1
466
- if has_terminal?("(", false, index)
467
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
468
- @index += 1
469
- else
470
- terminal_parse_failure("(")
471
- r3 = nil
472
- end
473
- s0 << r3
474
- if r3
475
- s4, i4 = [], index
476
- loop do
477
- if has_terminal?('\G[\\s]', true, index)
478
- r5 = true
479
- @index += 1
480
- else
481
- r5 = nil
482
- end
483
- if r5
484
- s4 << r5
485
- else
486
- break
487
- end
488
- end
489
- r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
490
- s0 << r4
491
- if r4
492
- if has_terminal?("only", false, index)
493
- r6 = instantiate_node(SyntaxNode,input, index...(index + 4))
494
- @index += 4
495
- else
496
- terminal_parse_failure("only")
497
- r6 = nil
498
- end
499
- s0 << r6
500
- if r6
501
- s7, i7 = [], index
502
- loop do
503
- if has_terminal?('\G[\\s]', true, index)
504
- r8 = true
505
- @index += 1
506
- else
507
- r8 = nil
508
- end
509
- if r8
510
- s7 << r8
511
- else
512
- break
513
- end
514
- end
515
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
516
- s0 << r7
517
- if r7
518
- if has_terminal?(")", false, index)
519
- r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
520
- @index += 1
521
- else
522
- terminal_parse_failure(")")
523
- r9 = nil
524
- end
525
- s0 << r9
526
- if r9
527
- s10, i10 = [], index
528
- loop do
529
- if has_terminal?('\G[\\s]', true, index)
530
- r11 = true
531
- @index += 1
532
- else
533
- r11 = nil
534
- end
535
- if r11
536
- s10 << r11
537
- else
538
- break
539
- end
540
- end
541
- r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
542
- s0 << r10
543
- end
544
- end
545
- end
546
- end
547
- end
548
- end
549
- if s0.last
550
- r0 = instantiate_node(OnlyNode,input, i0...index, s0)
551
- r0.extend(Only0)
552
- else
553
- @index = i0
554
- r0 = nil
555
- end
556
-
557
- node_cache[:only][start_index] = r0
558
-
559
- r0
560
- end
561
-
562
- def _nt_start_fragment
563
- start_index = index
564
- if node_cache[:start_fragment].has_key?(index)
565
- cached = node_cache[:start_fragment][index]
566
- if cached
567
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
568
- @index = cached.interval.end
569
- end
570
- return cached
571
- end
572
-
573
- s0, i0 = [], index
574
- loop do
575
- if has_terminal?('\G[^,]', true, index)
576
- r1 = true
577
- @index += 1
578
- else
579
- r1 = nil
580
- end
581
- if r1
582
- s0 << r1
583
- else
584
- break
585
- end
586
- end
587
- if s0.empty?
588
- @index = i0
589
- r0 = nil
590
- else
591
- r0 = instantiate_node(StartFragmentNode,input, i0...index, s0)
592
- end
593
-
594
- node_cache[:start_fragment][start_index] = r0
595
-
596
- r0
597
- end
598
-
599
- end
600
-
601
- class ScienceHealthParser < Treetop::Runtime::CompiledParser
602
- include ScienceHealth
603
- end
604
-
605
-
606
- end
607
- end