cskit 1.0.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 +15 -0
- data/Gemfile +8 -0
- data/History.txt +3 -0
- data/LICENSE +177 -0
- data/README.md +246 -0
- data/Rakefile +29 -0
- data/cskit.gemspec +25 -0
- data/lib/cskit/annotated_string.rb +73 -0
- data/lib/cskit/annotator.rb +16 -0
- data/lib/cskit/formatters/bible/bible_html_formatter.rb +41 -0
- data/lib/cskit/formatters/bible/bible_plain_text_formatter.rb +117 -0
- data/lib/cskit/formatters/bible.rb +12 -0
- data/lib/cskit/formatters/science_health/science_health_html_formatter.rb +32 -0
- data/lib/cskit/formatters/science_health/science_health_plain_text_formatter.rb +73 -0
- data/lib/cskit/formatters/science_health.rb +12 -0
- data/lib/cskit/formatters.rb +19 -0
- data/lib/cskit/lesson/lesson.rb +72 -0
- data/lib/cskit/lesson/section.rb +26 -0
- data/lib/cskit/lesson.rb +10 -0
- data/lib/cskit/parsers/bible/bible.rb +1005 -0
- data/lib/cskit/parsers/bible/bible.treetop +64 -0
- data/lib/cskit/parsers/bible/nodes.rb +153 -0
- data/lib/cskit/parsers/bible/objects.rb +81 -0
- data/lib/cskit/parsers/science_health/nodes.rb +82 -0
- data/lib/cskit/parsers/science_health/objects.rb +47 -0
- data/lib/cskit/parsers/science_health/science_health.rb +607 -0
- data/lib/cskit/parsers/science_health/science_health.treetop +44 -0
- data/lib/cskit/parsers.rb +8 -0
- data/lib/cskit/readers/bible_reader.rb +58 -0
- data/lib/cskit/readers/reading.rb +54 -0
- data/lib/cskit/readers/science_health_reader.rb +97 -0
- data/lib/cskit/readers.rb +9 -0
- data/lib/cskit/resources/volumes/bible.rb +45 -0
- data/lib/cskit/resources/volumes/science_health.rb +49 -0
- data/lib/cskit/resources/volumes.rb +8 -0
- data/lib/cskit/version.rb +5 -0
- data/lib/cskit/volume.rb +33 -0
- data/lib/cskit.rb +73 -0
- metadata +122 -0
@@ -0,0 +1,64 @@
|
|
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
|
@@ -0,0 +1,153 @@
|
|
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
|
@@ -0,0 +1,81 @@
|
|
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
|
@@ -0,0 +1,82 @@
|
|
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
|
@@ -0,0 +1,47 @@
|
|
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
|