cskit 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +7 -4
- data/History.txt +5 -0
- data/cskit.gemspec +5 -8
- data/lib/cskit.rb +15 -66
- data/lib/cskit/annotated_string.rb +1 -1
- data/lib/cskit/annotator.rb +1 -3
- data/lib/cskit/formatters.rb +3 -4
- data/lib/cskit/formatters/bible.rb +4 -5
- data/lib/cskit/formatters/bible/bible_html_formatter.rb +2 -2
- data/lib/cskit/formatters/bible/bible_json_formatter.rb +17 -0
- data/lib/cskit/formatters/bible/bible_plain_text_formatter.rb +3 -3
- data/lib/cskit/formatters/science_health.rb +3 -5
- data/lib/cskit/formatters/science_health/science_health_html_formatter.rb +3 -4
- data/lib/cskit/formatters/science_health/science_health_plain_text_formatter.rb +5 -4
- data/lib/cskit/lesson.rb +3 -5
- data/lib/cskit/lesson/lesson.rb +3 -3
- data/lib/cskit/lesson/section.rb +1 -1
- data/lib/cskit/parsers.rb +6 -3
- data/lib/cskit/parsers/bible.rb +10 -0
- data/lib/cskit/parsers/bible/bible_parser.rb +192 -0
- data/lib/cskit/parsers/bible/bible_tokenizer.rb +32 -0
- data/lib/cskit/parsers/parser.rb +68 -0
- data/lib/cskit/parsers/science_health.rb +10 -0
- data/lib/cskit/parsers/science_health/science_health_parser.rb +201 -0
- data/lib/cskit/parsers/science_health/science_health_tokenizer.rb +33 -0
- data/lib/cskit/parsers/token.rb +17 -0
- data/lib/cskit/parsers/tokenizer.rb +43 -0
- data/lib/cskit/readers.rb +4 -4
- data/lib/cskit/readers/bible_reader.rb +2 -2
- data/lib/cskit/readers/reading.rb +8 -1
- data/lib/cskit/readers/science_health_reader.rb +8 -8
- data/lib/cskit/registry.rb +65 -0
- data/lib/cskit/resources/volumes.rb +3 -3
- data/lib/cskit/resources/volumes/bible.rb +11 -9
- data/lib/cskit/resources/volumes/science_health.rb +10 -9
- data/lib/cskit/version.rb +1 -1
- data/lib/cskit/volume.rb +1 -1
- data/spec/parsers/bible/bible_parser_spec.rb +205 -0
- data/spec/parsers/science_health/science_health_parser_spec.rb +153 -0
- data/spec/spec_helper.rb +8 -0
- metadata +16 -38
- data/lib/cskit/parsers/bible/bible.rb +0 -1005
- data/lib/cskit/parsers/bible/bible.treetop +0 -64
- data/lib/cskit/parsers/bible/nodes.rb +0 -153
- data/lib/cskit/parsers/bible/objects.rb +0 -81
- data/lib/cskit/parsers/science_health/nodes.rb +0 -82
- data/lib/cskit/parsers/science_health/objects.rb +0 -47
- data/lib/cskit/parsers/science_health/science_health.rb +0 -607
- data/lib/cskit/parsers/science_health/science_health.treetop +0 -44
@@ -3,6 +3,7 @@
|
|
3
3
|
module CSKit
|
4
4
|
module Readers
|
5
5
|
class ScienceHealthReader
|
6
|
+
NUMERALS = %w(vi vii ix x xi xii)
|
6
7
|
|
7
8
|
attr_reader :volume
|
8
9
|
|
@@ -95,7 +96,7 @@ module CSKit
|
|
95
96
|
end
|
96
97
|
end
|
97
98
|
|
98
|
-
|
99
|
+
private
|
99
100
|
|
100
101
|
def increment(line_number, page_number)
|
101
102
|
page = get_page(page_number)
|
@@ -107,16 +108,15 @@ module CSKit
|
|
107
108
|
end
|
108
109
|
|
109
110
|
def next_page_number(page_number)
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
"1"
|
111
|
+
if index = NUMERALS.index(page_number)
|
112
|
+
if index == NUMERALS.size - 1
|
113
|
+
'1'
|
114
114
|
else
|
115
|
-
|
115
|
+
NUMERALS[index + 1]
|
116
116
|
end
|
117
117
|
else
|
118
|
-
if page_number ==
|
119
|
-
|
118
|
+
if page_number == '497'
|
119
|
+
'501'
|
120
120
|
else
|
121
121
|
(page_number.to_i + 1).to_s
|
122
122
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module CSKit
|
4
|
+
module Registry
|
5
|
+
def family(family, plural_family)
|
6
|
+
extend RegistryFactory.create(family, plural_family)
|
7
|
+
end
|
8
|
+
|
9
|
+
def registry
|
10
|
+
@registry ||= {}
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class RegistryFactory
|
15
|
+
class << self
|
16
|
+
|
17
|
+
def create(family, plural_family)
|
18
|
+
Module.new do
|
19
|
+
define_method :"register_#{family}" do |config|
|
20
|
+
register(family, config[:id], config[family].new(config))
|
21
|
+
end
|
22
|
+
|
23
|
+
define_method :"get_#{family}" do |id|
|
24
|
+
get(family, id)
|
25
|
+
end
|
26
|
+
|
27
|
+
define_method :"#{plural_family}" do
|
28
|
+
all(family)
|
29
|
+
end
|
30
|
+
|
31
|
+
define_method :"#{family}_available?" do |id|
|
32
|
+
available?(family, id)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def register(family, key, obj)
|
38
|
+
(registry[family.to_sym] ||= {})[key.to_sym] = obj
|
39
|
+
end
|
40
|
+
|
41
|
+
def get(family, key)
|
42
|
+
registry[family.to_sym][key.to_sym] || get_for_family(family, key)
|
43
|
+
end
|
44
|
+
|
45
|
+
def all(family)
|
46
|
+
registry.fetch(family, [])
|
47
|
+
end
|
48
|
+
|
49
|
+
def get_for_family(family, type)
|
50
|
+
found = registry[family.to_sym].find do |key, obj|
|
51
|
+
obj.config[:type] == type
|
52
|
+
end
|
53
|
+
|
54
|
+
found.last if found
|
55
|
+
end
|
56
|
+
|
57
|
+
def available?(family, key)
|
58
|
+
!!registry[family.to_sym][key.to_sym] rescue false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module CSKit
|
4
4
|
module Volumes
|
5
|
-
autoload :ScienceHealth,
|
6
|
-
autoload :Bible,
|
5
|
+
autoload :ScienceHealth, 'cskit/resources/volumes/science_health'
|
6
|
+
autoload :Bible, 'cskit/resources/volumes/bible'
|
7
7
|
end
|
8
|
-
end
|
8
|
+
end
|
@@ -6,40 +6,42 @@ module CSKit
|
|
6
6
|
|
7
7
|
Book = Struct.new(:name, :chapters) do
|
8
8
|
def to_hash
|
9
|
-
{
|
9
|
+
{ 'name' => name, 'chapters' => chapters.map(&:to_hash) }
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.from_hash(hash)
|
13
13
|
Book.new(
|
14
|
-
hash[
|
15
|
-
hash[
|
14
|
+
hash['name'],
|
15
|
+
hash['chapters'].map do |chapter_hash|
|
16
|
+
Chapter.from_hash(chapter_hash)
|
17
|
+
end
|
16
18
|
)
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
20
22
|
Chapter = Struct.new(:number, :verses) do
|
21
23
|
def to_hash
|
22
|
-
{
|
24
|
+
{ 'number' => number, 'verses' => verses.map(&:to_hash) }
|
23
25
|
end
|
24
26
|
|
25
27
|
def self.from_hash(hash)
|
26
28
|
Chapter.new(
|
27
|
-
hash[
|
28
|
-
hash[
|
29
|
+
hash['number'],
|
30
|
+
hash['verses'].map { |verse_hash| Verse.from_hash(verse_hash) }
|
29
31
|
)
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
33
35
|
Verse = Struct.new(:text) do
|
34
36
|
def to_hash
|
35
|
-
{
|
37
|
+
{ 'text' => text }
|
36
38
|
end
|
37
39
|
|
38
40
|
def self.from_hash(hash)
|
39
|
-
Verse.new(hash[
|
41
|
+
Verse.new(hash['text'])
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
43
45
|
end
|
44
46
|
end
|
45
|
-
end
|
47
|
+
end
|
@@ -10,13 +10,13 @@ module CSKit
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_hash
|
13
|
-
{
|
13
|
+
{ 'number' => number, 'lines' => lines.map(&:to_hash) }
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.from_hash(hash)
|
17
17
|
Page.new(
|
18
|
-
hash[
|
19
|
-
hash[
|
18
|
+
hash['number'],
|
19
|
+
hash['lines'].map { |line_hash| Line.from_hash(line_hash) }
|
20
20
|
)
|
21
21
|
end
|
22
22
|
end
|
@@ -29,17 +29,18 @@ module CSKit
|
|
29
29
|
alias :paragraph_start? :paragraph_start
|
30
30
|
|
31
31
|
def to_hash
|
32
|
-
{
|
33
|
-
|
34
|
-
|
32
|
+
{
|
33
|
+
'text' => text,
|
34
|
+
'flyout_text' => flyout_text,
|
35
|
+
'paragraph_start' => paragraph_start
|
35
36
|
}
|
36
37
|
end
|
37
38
|
|
38
39
|
def self.from_hash(hash)
|
39
40
|
Line.new(
|
40
|
-
hash[
|
41
|
-
hash[
|
42
|
-
!!hash[
|
41
|
+
hash['text'],
|
42
|
+
hash['flyout_text'],
|
43
|
+
!!hash['paragraph_start']
|
43
44
|
)
|
44
45
|
end
|
45
46
|
end
|
data/lib/cskit/version.rb
CHANGED
data/lib/cskit/volume.rb
CHANGED
@@ -0,0 +1,205 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
include CSKit::Parsers::Bible
|
6
|
+
|
7
|
+
describe BibleParser do
|
8
|
+
let(:parser) { described_class.new(citation_text) }
|
9
|
+
|
10
|
+
context 'single chapter, single verse' do
|
11
|
+
let(:citation_text) { 'Genesis 1:1' }
|
12
|
+
|
13
|
+
it 'parses correctly' do
|
14
|
+
expect(parser.parse.to_hash).to eq({
|
15
|
+
book: 'Genesis', chapters: [{
|
16
|
+
chapter_number: 1, verses: [{
|
17
|
+
start: 1, finish: 1, starter: nil, terminator: nil
|
18
|
+
}]
|
19
|
+
}]
|
20
|
+
})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'single chapter, verse range' do
|
25
|
+
let(:citation_text) { 'Genesis 1:1-5' }
|
26
|
+
|
27
|
+
it 'parses correctly' do
|
28
|
+
expect(parser.parse.to_hash).to eq({
|
29
|
+
book: 'Genesis', chapters: [{
|
30
|
+
chapter_number: 1, verses: [{
|
31
|
+
start: 1, finish: 5, starter: nil, terminator: nil
|
32
|
+
}]
|
33
|
+
}]
|
34
|
+
})
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'single chapter, verse range, starter fragment' do
|
39
|
+
let(:citation_text) { 'Genesis 1:1-5 God' }
|
40
|
+
|
41
|
+
it 'parses correctly' do
|
42
|
+
expect(parser.parse.to_hash).to eq({
|
43
|
+
book: 'Genesis', chapters: [{
|
44
|
+
chapter_number: 1, verses: [{
|
45
|
+
start: 1, finish: 5, terminator: nil, starter: {
|
46
|
+
fragment: 'God', cardinality: 1
|
47
|
+
}
|
48
|
+
}]
|
49
|
+
}]
|
50
|
+
})
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'single chapter, verse range, starter fragment with cardinality' do
|
55
|
+
let(:citation_text) { 'Genesis 1:1-5 2nd God' }
|
56
|
+
|
57
|
+
it 'parses correctly' do
|
58
|
+
expect(parser.parse.to_hash).to eq({
|
59
|
+
book: 'Genesis', chapters: [{
|
60
|
+
chapter_number: 1, verses: [{
|
61
|
+
start: 1, finish: 5, terminator: nil, starter: {
|
62
|
+
fragment: 'God', cardinality: 2
|
63
|
+
}
|
64
|
+
}]
|
65
|
+
}]
|
66
|
+
})
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'single chapter, single verse, starter fragment with cardinality' do
|
71
|
+
let(:citation_text) { 'Genesis 1:1 2nd God' }
|
72
|
+
|
73
|
+
it 'parses correctly' do
|
74
|
+
expect(parser.parse.to_hash).to eq({
|
75
|
+
book: 'Genesis', chapters: [{
|
76
|
+
chapter_number: 1, verses: [{
|
77
|
+
start: 1, finish: 1, terminator: nil, starter: {
|
78
|
+
fragment: 'God', cardinality: 2
|
79
|
+
}
|
80
|
+
}]
|
81
|
+
}]
|
82
|
+
})
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'single chapter, single verse, starter fragment, terminator fragment' do
|
87
|
+
let(:citation_text) { 'Genesis 1:1 God (to said)' }
|
88
|
+
|
89
|
+
it 'parses correctly' do
|
90
|
+
expect(parser.parse.to_hash).to eq({
|
91
|
+
book: 'Genesis', chapters: [{
|
92
|
+
chapter_number: 1, verses: [{
|
93
|
+
start: 1, finish: 1, terminator: {
|
94
|
+
fragment: 'said', cardinality: 1
|
95
|
+
}, starter: {
|
96
|
+
fragment: 'God', cardinality: 1
|
97
|
+
}
|
98
|
+
}]
|
99
|
+
}]
|
100
|
+
})
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'single chapter, single verse, starter fragment, terminator fragment with cardinality' do
|
105
|
+
let(:citation_text) { 'Genesis 1:1 God (to 2nd said)' }
|
106
|
+
|
107
|
+
it 'parses correctly' do
|
108
|
+
expect(parser.parse.to_hash).to eq({
|
109
|
+
book: 'Genesis', chapters: [{
|
110
|
+
chapter_number: 1, verses: [{
|
111
|
+
start: 1, finish: 1, terminator: {
|
112
|
+
fragment: 'said', cardinality: 2
|
113
|
+
}, starter: {
|
114
|
+
fragment: 'God', cardinality: 1
|
115
|
+
}
|
116
|
+
}]
|
117
|
+
}]
|
118
|
+
})
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context 'single chapter, single verse, starter fragment with cardinality, terminator fragment with cardinality' do
|
123
|
+
let(:citation_text) { 'Genesis 1:1 3rd God (to 2nd said)' }
|
124
|
+
|
125
|
+
it 'parses correctly' do
|
126
|
+
expect(parser.parse.to_hash).to eq({
|
127
|
+
book: 'Genesis', chapters: [{
|
128
|
+
chapter_number: 1, verses: [{
|
129
|
+
start: 1, finish: 1, terminator: {
|
130
|
+
fragment: 'said', cardinality: 2
|
131
|
+
}, starter: {
|
132
|
+
fragment: 'God', cardinality: 3
|
133
|
+
}
|
134
|
+
}]
|
135
|
+
}]
|
136
|
+
})
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context 'multiple chapters, single verse' do
|
141
|
+
let(:citation_text) { 'Genesis 1:1; 4:8' }
|
142
|
+
|
143
|
+
it 'parses correctly' do
|
144
|
+
expect(parser.parse.to_hash).to eq({
|
145
|
+
book: 'Genesis', chapters: [{
|
146
|
+
chapter_number: 1, verses: [{
|
147
|
+
start: 1, finish: 1, terminator: nil, starter: nil
|
148
|
+
}]
|
149
|
+
}, {
|
150
|
+
chapter_number: 4, verses: [{
|
151
|
+
start: 8, finish: 8, terminator: nil, starter: nil
|
152
|
+
}]
|
153
|
+
}]
|
154
|
+
})
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context 'multiple chapters, single and multiple verses' do
|
159
|
+
let(:citation_text) { 'Genesis 1:1; 4:8, 9-12' }
|
160
|
+
|
161
|
+
it 'parses correctly' do
|
162
|
+
expect(parser.parse.to_hash).to eq({
|
163
|
+
book: 'Genesis', chapters: [{
|
164
|
+
chapter_number: 1, verses: [{
|
165
|
+
start: 1, finish: 1, terminator: nil, starter: nil
|
166
|
+
}]
|
167
|
+
}, {
|
168
|
+
chapter_number: 4, verses: [{
|
169
|
+
start: 8, finish: 8, terminator: nil, starter: nil
|
170
|
+
}, {
|
171
|
+
start: 9, finish: 12, terminator: nil, starter: nil
|
172
|
+
}]
|
173
|
+
}]
|
174
|
+
})
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context 'multiple chapters, verses with terminators' do
|
179
|
+
let(:citation_text) { 'Genesis 1:1; 4:8 great (to 2nd ;), 9-12 2nd not (to 3rd ,)' }
|
180
|
+
|
181
|
+
it 'parses correctly' do
|
182
|
+
expect(parser.parse.to_hash).to eq({
|
183
|
+
book: 'Genesis', chapters: [{
|
184
|
+
chapter_number: 1, verses: [{
|
185
|
+
start: 1, finish: 1, terminator: nil, starter: nil
|
186
|
+
}]
|
187
|
+
}, {
|
188
|
+
chapter_number: 4, verses: [{
|
189
|
+
start: 8, finish: 8, terminator: {
|
190
|
+
fragment: ';', cardinality: 2
|
191
|
+
}, starter: {
|
192
|
+
fragment: 'great', cardinality: 1
|
193
|
+
}
|
194
|
+
}, {
|
195
|
+
start: 9, finish: 12, terminator: {
|
196
|
+
fragment: ',', cardinality: 3
|
197
|
+
}, starter: {
|
198
|
+
fragment: 'not', cardinality: 2
|
199
|
+
}
|
200
|
+
}]
|
201
|
+
}]
|
202
|
+
})
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|