relaton-bib 1.13.8 → 1.13.9
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/README.adoc +3 -3
- data/grammars/biblio.rng +7 -0
- data/lib/relaton_bib/bibxml_parser.rb +7 -0
- data/lib/relaton_bib/formatted_string.rb +18 -1
- data/lib/relaton_bib/localized_string.rb +12 -1
- data/lib/relaton_bib/typed_uri.rb +15 -5
- data/lib/relaton_bib/version.rb +1 -1
- data/lib/relaton_bib/xml_parser.rb +8 -10
- 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: 50d370dad5e6a20ef5eaaed6633e0d62d80c0087f8a24d205dcb02723c025b35
|
4
|
+
data.tar.gz: 7ef8d3f6530096ed1e15bc66f148a3972490e39ba3c51bfc894a31cab8195d4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 305a89bc3529accd1087f9e7928172bacf6acb4672fa0215ee1b27406cca08cda484470227625c94928f5be4ac0766cd0b13b43059c0328b3f9d0ba03f6ad0af
|
7
|
+
data.tar.gz: 44e3711a83e329cba17baabbaacecc03736eef8c20857aac71c760bcfd7289071b1d2a60b70d0d9710d132c02c0607c0ad234522ee280b6867f1bf7fba69bed1
|
data/README.adoc
CHANGED
@@ -103,7 +103,7 @@ item.to_xml
|
|
103
103
|
</bibitem>"
|
104
104
|
----
|
105
105
|
|
106
|
-
|
106
|
+
The default root element is `bibitem`. With argument `bibdata: true` the XML wrapped with `bibdata` element.
|
107
107
|
|
108
108
|
[source,ruby]
|
109
109
|
----
|
@@ -117,7 +117,7 @@ item.to_xml bibdata: true
|
|
117
117
|
|
118
118
|
==== Date format
|
119
119
|
|
120
|
-
By default date elements are formatted as year (yyyy). Option `:date_format` allows to output date elements in `:short` (yyyy-mm) and `:full` (yyyy-mm-dd)
|
120
|
+
By default date elements are formatted as a year (yyyy). Option `:date_format` allows to output date elements in `:short` (yyyy-mm) and `:full` (yyyy-mm-dd) additional formats.
|
121
121
|
|
122
122
|
[source,ruby]
|
123
123
|
----
|
@@ -249,7 +249,7 @@ id:: ISOTC211
|
|
249
249
|
fetched:: 2020-08-19
|
250
250
|
title::
|
251
251
|
title.type:: title-main
|
252
|
-
title.
|
252
|
+
title.content:: Geographic information
|
253
253
|
title.format:: text/plain
|
254
254
|
...
|
255
255
|
----
|
data/grammars/biblio.rng
CHANGED
@@ -854,6 +854,12 @@
|
|
854
854
|
<optional>
|
855
855
|
<attribute name="type"/>
|
856
856
|
</optional>
|
857
|
+
<optional>
|
858
|
+
<attribute name="language"/>
|
859
|
+
</optional>
|
860
|
+
<optional>
|
861
|
+
<attribute name="script"/>
|
862
|
+
</optional>
|
857
863
|
<data type="anyURI"/>
|
858
864
|
</define>
|
859
865
|
<define name="DateType">
|
@@ -882,6 +888,7 @@
|
|
882
888
|
<value>vote-started</value>
|
883
889
|
<value>vote-ended</value>
|
884
890
|
<value>announced</value>
|
891
|
+
<value>stable-until</value>
|
885
892
|
</choice>
|
886
893
|
</define>
|
887
894
|
<define name="bdate">
|
@@ -224,6 +224,13 @@ module RelatonBib
|
|
224
224
|
end.compact
|
225
225
|
end
|
226
226
|
|
227
|
+
#
|
228
|
+
# Parse organization from author element
|
229
|
+
#
|
230
|
+
# @param [Nokogiri::XML::Element] contrib author element
|
231
|
+
#
|
232
|
+
# @return [Hash] contribution info
|
233
|
+
#
|
227
234
|
def full_name_org(contrib)
|
228
235
|
return unless FULLNAMEORG.include? contrib[:fullname]
|
229
236
|
|
@@ -21,8 +21,8 @@ module RelatonBib
|
|
21
21
|
# raise ArgumentError, %{Format "#{format}" is invalid.}
|
22
22
|
# end
|
23
23
|
|
24
|
-
super(content, language, script)
|
25
24
|
@format = format
|
25
|
+
super(content, language, script)
|
26
26
|
end
|
27
27
|
|
28
28
|
# @param builder [Nokogiri::XML::Builder]
|
@@ -107,5 +107,22 @@ module RelatonBib
|
|
107
107
|
out += "#{pref}format:: #{format}\n" if format
|
108
108
|
out
|
109
109
|
end
|
110
|
+
|
111
|
+
#
|
112
|
+
# Remove HTML tags except <em>, <strong>, <stem>, <sup>, <sub>, <tt>, <br>, <p>.
|
113
|
+
# Replace <i> with <em>, <b> with <strong>.
|
114
|
+
#
|
115
|
+
# @param [String] str content
|
116
|
+
#
|
117
|
+
# @return [String] cleaned content
|
118
|
+
#
|
119
|
+
def cleanup(str)
|
120
|
+
return str unless format == "text/html"
|
121
|
+
|
122
|
+
str.gsub(/<i>/, "<em>").gsub(/<\/i>/, "</em>")
|
123
|
+
.gsub(/<b>/, "<strong>").gsub(/<\/b>/, "</strong>")
|
124
|
+
.gsub(/<(?!\/?(em|strong|stem|sup|sub|tt|br\s?\/|p))[^\s!]\/?.*?>/, "")
|
125
|
+
# .gsub(/<\w+\s.+?>/, "")
|
126
|
+
end
|
110
127
|
end
|
111
128
|
end
|
@@ -33,7 +33,7 @@ module RelatonBib
|
|
33
33
|
else c
|
34
34
|
end
|
35
35
|
end
|
36
|
-
else content
|
36
|
+
else cleanup content
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -127,5 +127,16 @@ module RelatonBib
|
|
127
127
|
else count > 1 ? "#{prefix}::\n" : ""
|
128
128
|
end
|
129
129
|
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# Should be implemented in subclass.
|
133
|
+
#
|
134
|
+
# @param [String] str content
|
135
|
+
#
|
136
|
+
# @return [String] cleaned content
|
137
|
+
#
|
138
|
+
def cleanup(str)
|
139
|
+
str
|
140
|
+
end
|
130
141
|
end
|
131
142
|
end
|
@@ -3,15 +3,19 @@ require "addressable"
|
|
3
3
|
module RelatonBib
|
4
4
|
# Typed URI
|
5
5
|
class TypedUri
|
6
|
-
# @return [
|
7
|
-
attr_reader :type
|
6
|
+
# @return [String, nil]
|
7
|
+
attr_reader :type, :language, :script
|
8
8
|
# @retutn [Addressable::URI]
|
9
9
|
attr_reader :content
|
10
10
|
|
11
|
-
# @param
|
12
|
-
# @param
|
13
|
-
|
11
|
+
# @param content [String] URL
|
12
|
+
# @param type [String, nil] src/obp/rss
|
13
|
+
# @param language [String, nil] language code Iso639 (optional) (default: nil)
|
14
|
+
# @param script [String, nil] script code Iso15924 (optional) (default: nil)
|
15
|
+
def initialize(content:, type: nil, language: nil, script: nil)
|
14
16
|
@type = type
|
17
|
+
@language = language
|
18
|
+
@script = script
|
15
19
|
@content = Addressable::URI.parse content if content
|
16
20
|
end
|
17
21
|
|
@@ -24,12 +28,16 @@ module RelatonBib
|
|
24
28
|
def to_xml(builder)
|
25
29
|
doc = builder.uri content.to_s
|
26
30
|
doc[:type] = type if type
|
31
|
+
doc[:language] = language if language
|
32
|
+
doc[:script] = script if script
|
27
33
|
end
|
28
34
|
|
29
35
|
# @return [Hash]
|
30
36
|
def to_hash
|
31
37
|
hash = { "content" => content.to_s }
|
32
38
|
hash["type"] = type.to_s if type
|
39
|
+
hash["language"] = language if language
|
40
|
+
hash["script"] = script if script
|
33
41
|
hash
|
34
42
|
end
|
35
43
|
|
@@ -41,6 +49,8 @@ module RelatonBib
|
|
41
49
|
out = count > 1 ? "#{pref}::\n" : ""
|
42
50
|
out += "#{pref}.type:: #{type}\n" if type
|
43
51
|
out += "#{pref}.content:: #{content}\n"
|
52
|
+
out += "#{pref}.language:: #{language}\n" if language
|
53
|
+
out += "#{pref}.script:: #{script}\n" if script
|
44
54
|
out
|
45
55
|
end
|
46
56
|
end
|
data/lib/relaton_bib/version.rb
CHANGED
@@ -10,7 +10,7 @@ module RelatonBib
|
|
10
10
|
if bibitem
|
11
11
|
bib_item item_data(bibitem)
|
12
12
|
else
|
13
|
-
warn "[relaton-bib] WARNING: can't find bibitem or bibdata element "\
|
13
|
+
warn "[relaton-bib] WARNING: can't find bibitem or bibdata element " \
|
14
14
|
"in the XML"
|
15
15
|
end
|
16
16
|
end
|
@@ -23,8 +23,8 @@ module RelatonBib
|
|
23
23
|
def item_data(bibitem) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
24
24
|
ext = bibitem.at "//ext"
|
25
25
|
{
|
26
|
-
id: bibitem[:id]
|
27
|
-
type: bibitem[:type]
|
26
|
+
id: bibitem[:id].nil? || bibitem[:id].empty? ? nil : bibitem[:id],
|
27
|
+
type: bibitem[:type].nil? || bibitem[:type].empty? ? nil : bibitem[:type],
|
28
28
|
fetched: bibitem.at("./fetched")&.text,
|
29
29
|
title: fetch_titles(bibitem),
|
30
30
|
formattedref: fref(bibitem),
|
@@ -141,7 +141,7 @@ module RelatonBib
|
|
141
141
|
organization: sr.at("organization")&.text,
|
142
142
|
abbreviation: abbreviation, from: sr.at("from")&.text,
|
143
143
|
to: sr.at("to")&.text, number: sr.at("number")&.text,
|
144
|
-
partnumber: sr.at("partnumber")&.text, run: sr.at("run")&.text
|
144
|
+
partnumber: sr.at("partnumber")&.text, run: sr.at("run")&.text
|
145
145
|
)
|
146
146
|
end
|
147
147
|
end
|
@@ -160,9 +160,6 @@ module RelatonBib
|
|
160
160
|
def fetch_extent(item)
|
161
161
|
item.xpath("./extent").reduce([]) do |a, ex|
|
162
162
|
a + localities(ex)
|
163
|
-
# Locality.new(
|
164
|
-
# ex[:type], ex.at("referenceFrom")&.text, ex.at("referenceTo")&.text
|
165
|
-
# )
|
166
163
|
end
|
167
164
|
end
|
168
165
|
|
@@ -401,7 +398,8 @@ module RelatonBib
|
|
401
398
|
# @return [Arra<RelatonBib::TypedUri>]
|
402
399
|
def fetch_link(item)
|
403
400
|
item.xpath("./uri").map do |l|
|
404
|
-
TypedUri.new
|
401
|
+
TypedUri.new(type: l[:type], content: l.text, language: l[:language],
|
402
|
+
script: l[:script])
|
405
403
|
end
|
406
404
|
end
|
407
405
|
|
@@ -412,7 +410,7 @@ module RelatonBib
|
|
412
410
|
def fetch_relations(item, klass = DocumentRelation)
|
413
411
|
item.xpath("./relation").map do |rel|
|
414
412
|
klass.new(
|
415
|
-
type: rel[:type]
|
413
|
+
type: rel[:type].nil? || rel[:type].empty? ? nil : rel[:type],
|
416
414
|
description: relation_description(rel),
|
417
415
|
bibitem: bib_item(item_data(rel.at("./bibitem"))),
|
418
416
|
locality: localities(rel),
|
@@ -453,7 +451,7 @@ module RelatonBib
|
|
453
451
|
# Create Locality object from Nokogiri::XML::Element
|
454
452
|
#
|
455
453
|
# @param loc [Nokogiri::XML::Element]
|
456
|
-
# @param klass [RelatonBib::Locality
|
454
|
+
# @param klass [RelatonBib::Locality, RelatonBib::LocalityStack]
|
457
455
|
#
|
458
456
|
# @return [RelatonBib::Locality]
|
459
457
|
def locality(loc, klass = Locality)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaton-bib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.13.
|
4
|
+
version: 1.13.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-09-
|
11
|
+
date: 2022-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|