kjdotxml 0.1.1 → 0.2.1

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: 9835d96c6c3c4fcbf12196f57c0c7f8ad8e369c0542b1ffb8bbd1f02eb7fd5dd
4
- data.tar.gz: c28661e5fae357962cd14b59ca8ae507fc780baddc639babb9f6c023c11f0466
3
+ metadata.gz: 690ac5f8aa188410ddca62ae15087b3b5fc1dd3f04591e2f3d4b632e89160197
4
+ data.tar.gz: 3ce40599596b313c5c39860e1b2857a3856ff58412d9b57447447b357a18d793
5
5
  SHA512:
6
- metadata.gz: 7bfa7481e9bd9a2c459f92346c58a1de750b10974e5d5543394865a4fcf33a1c5c0d8240445e6004d1b0e8b33106bed801645b92546f9b23713ac9acc1f60ea2
7
- data.tar.gz: 55206e69e0a81f30d3b4a5947558ec4bc4ee4f6182c61939d6291ef1e25eb660e4310f17b60515a6957eb5d186b9648264cf23ff9ddf777085211b51e7969c92
6
+ metadata.gz: 4e91a9d1f12fd6eeb4c8bdd149e78b97b529c7d01fbcf90760aa4bc1e6864385972c0e1e3f3f2f8ab4152c68d5b6ec2ef7829c0be1ad7495dbe14d17d2f8f427
7
+ data.tar.gz: 998e8852ea26773c3ee40d72ef1acca782e64a8c162d9ab47479c001b0c8351f9bb98a9bba64f1d342e944b2a6900d2ec1867069489c46411802829decf07312
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/kjdotxml.rb CHANGED
@@ -3,6 +3,8 @@
3
3
  # file: kjdotxml.rb
4
4
 
5
5
  require 'rexle'
6
+ require 'abbrev'
7
+ require 'novowels'
6
8
 
7
9
 
8
10
  BOOKS = [
@@ -78,16 +80,23 @@ class KjDotXmlError < Exception
78
80
  end
79
81
 
80
82
  class KjDotXml
83
+
84
+ attr_reader :booklist
81
85
 
82
- def initialize(title=nil)
86
+ def initialize(title=nil, debug: false)
87
+
88
+ @debug = debug
89
+
83
90
  book(title) if title
91
+ @booklist = BOOKS
92
+
84
93
  end
85
94
 
86
95
  def book(s)
87
96
 
88
97
  filename = s.downcase.gsub(/\s/,'-') + '.xml'
89
- #filepath = File.join('/tmp', filename)
90
- filepath = File.join(File.dirname(__FILE__), '..', 'xml', filename)
98
+ filepath = File.join('/home/james/jamesrobertson.eu/rorb/r/ruby/kjdotxml', filename)
99
+ #filepath = File.join(File.dirname(__FILE__), '..', 'xml', filename)
91
100
 
92
101
  if File.exists? filepath then
93
102
 
@@ -100,11 +109,88 @@ class KjDotXml
100
109
 
101
110
  end
102
111
 
103
- def books()
104
- BOOKS
112
+ def books(ref=nil)
113
+
114
+ return @booklist.map {|x| books(x) } unless ref
115
+
116
+ index = ref.to_s[/^\d+$/] ? (ref.to_i - 1) : find_book(ref.downcase)
117
+ puts 'index: ' + index.inspect if @debug
118
+
119
+ title = @booklist[index]
120
+
121
+
105
122
  end
123
+
124
+ def text(s)
125
+
126
+ s.strip.lines.map do |line|
127
+
128
+ [line, verses(line.chomp)]
129
+
130
+ end
131
+
132
+ end
133
+
134
+ def verses(s)
135
+
136
+ r = s.match(/(?<book>\w+)\s+(?<chapter>\d+)[,\:]?\s*(?<verses>.*)/)
137
+ verses2 = r[:verses] =~ /(?:\.\.|,|-)/ ? Range.new(*r[:verses]\
138
+ .split(/(?:\.\.|,|-)/).map(&:to_i)).to_a : r[:verses]
139
+ puts 'r[:book]: ' + r[:book].inspect if @debug
140
+
141
+ doc = book(books(r[:book]))
142
+
143
+ puts 'verses2: ' + verses2.inspect if @debug
144
+
145
+ if verses2.is_a? String then
146
+
147
+ [
148
+ doc.root.element("chapter[@no='#{r[:chapter]}']/verse" +
149
+ "[@no='#{verses2}']")
150
+ ]
151
+
152
+ elsif verses2.is_a? Array
153
+
154
+ verses2.map do |verse|
155
+ doc.root.element("chapter[@no='#{r[:chapter]}']/verse[@no='#{verse}']")
156
+ end
157
+
158
+ end
159
+ end
160
+
106
161
 
107
162
  def to_doc()
108
163
  @doc
109
164
  end
165
+
166
+ private
167
+
168
+ def find_book(ref)
169
+
170
+ puts 'find_book/ref: ' + ref.inspect if @debug
171
+
172
+ h = @booklist.inject({}) do |r,rawx|
173
+
174
+ x = rawx.downcase
175
+ a3 = [
176
+ x,
177
+ x.sub(/(\d)\s/,'\1'),
178
+ x.sub(/(\d)\s/,'\1-'),
179
+ NoVowels.compact(x),
180
+ NoVowels.compact(x.sub(/(\d)\s/,'\1')),
181
+ NoVowels.compact(x.sub(/(\d)\s/,'\1-')),
182
+ ]
183
+ #puts 'a3: ' + a3.inspect if @debug
184
+ a3b = a3.uniq.abbrev.keys.reject {|x| x[/^\s*\d+$/] or x.length < 2}
185
+ r.merge(rawx => a3b)
186
+
187
+ end
188
+ #puts 'h: ' + h.inspect if @debug
189
+ r = h.find {|key, val| val.grep(/#{ref}/).any? }
190
+ r = h.find {|key, vl| vl.grep(/#{ref.sub(/\d+\s*/,'')}/).any? } unless r
191
+ puts '_r: ' + r.inspect if @debug
192
+ @booklist.index r.first if r
193
+
194
+ end
195
+
110
196
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kjdotxml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -36,7 +36,7 @@ cert_chain:
36
36
  OXTrn4UmSRUyQHWNI24lThlPaWZJ6ULj4BtuALPaaM/cWYRhRaE3NiLF/SFiyzGg
37
37
  JYoHu6HVj1QoC6XZVMnuByx8sBhH1e/kRkk=
38
38
  -----END CERTIFICATE-----
39
- date: 2022-11-01 00:00:00.000000000 Z
39
+ date: 2022-11-03 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rexle
@@ -58,6 +58,26 @@ dependencies:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: 1.5.14
61
+ - !ruby/object:Gem::Dependency
62
+ name: novowels
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.1'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 0.1.3
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '0.1'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 0.1.3
61
81
  description:
62
82
  email: digital.robertson@gmail.com
63
83
  executables: []
metadata.gz.sig CHANGED
Binary file