relaton-bib 1.13.8 → 1.13.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 566350d7e96478f76484698d7b249e2fc7e22a454a3b2e9572d23b4ddac14723
4
- data.tar.gz: 53be5f2b3ee6967f22e654aae40133cbdba560ad176bbfc4c8c0f5cee541385c
3
+ metadata.gz: b689b96d8bc90ca647a1e11528aea5b02ae148d5a2b319a44f5739567312dc61
4
+ data.tar.gz: aafa8e3c0c37a5d1719b69bd9fdef15060176408790c9f742d8c48a209781391
5
5
  SHA512:
6
- metadata.gz: 0fbbf49b3d1cb2cd5a4e1b423f547cf03d4a9d2c8d9178b15e4089d384e8c42f15de338f9a8991c1cd9fd83e9a2ac1c1783b11b7d1f7fbd30d8b53e7652db077
7
- data.tar.gz: 011acbf178b30a5b62f9180f229e49ee4c804e75cba490df2802bad897261a6fed9e1d3a40c6cbd78554375de7884c1447afbdc02e48570976f439244edbaedd
6
+ metadata.gz: 4a39467d46ffcb67009b4c1e048ef6b11fcfec9c45db3c570b4759600bb920da2bb9060dc0e6c32f313c96fb2e66720cc7c7cdb93ad587542547af4da4b9631b
7
+ data.tar.gz: c1cfb779ede8f36cb8502fea7a074cbb8e530c41df10b6d827175dec6392810be15ebbd37bfda667250541a5f2571dbb4ab8aea2419af0b99914bf182b887a39
data/README.adoc CHANGED
@@ -103,7 +103,7 @@ item.to_xml
103
103
  </bibitem>"
104
104
  ----
105
105
 
106
- Default root element is `bibitem`. With argument `bibdata: true` the XML wrapped with `bibdata` element.
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) additiona formats.
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.conten:: Geographic information
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">
@@ -1039,18 +1039,18 @@ module RelatonBib
1039
1039
  # @param [Nokogiri::XML::Builder] builder xml builder
1040
1040
  # @param [RelatonBib::Organization] org organization
1041
1041
  #
1042
- def render_organization(builder, org, role = []) # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/AbcSize
1043
- ab = org&.abbreviation&.content
1044
- on = org&.name&.first&.content
1045
- orgname = if BibXMLParser::ORGNAMES.key?(ab) then ab
1046
- else BibXMLParser::ORGNAMES.key(on) || on || ab
1042
+ def render_organization(builder, org, _role = []) # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/AbcSize
1043
+ abbrev = org&.abbreviation&.content
1044
+ orgname = org&.name&.first&.content
1045
+ orgname = if BibXMLParser::ORGNAMES.key?(abbrev) then abbrev
1046
+ else BibXMLParser::ORGNAMES.key(orgname) || orgname || abbrev
1047
1047
  end
1048
- if role.detect { |r| r.description.detect { |d| d.content == "BibXML author" } }
1049
- builder.parent[:fullname] = orgname
1050
- else
1051
- o = builder.organization orgname
1052
- o[:abbrev] = ab if ab
1053
- end
1048
+ # if role.detect { |r| r.description.detect { |d| d.content == "BibXML author" } }
1049
+ # builder.parent[:fullname] = orgname
1050
+ # else
1051
+ org = builder.organization orgname
1052
+ org[:abbrev] = abbrev if abbrev
1053
+ # end
1054
1054
  end
1055
1055
  end
1056
1056
  end
@@ -224,11 +224,18 @@ 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
- return unless FULLNAMEORG.include? contrib[:fullname]
235
+ return unless self::FULLNAMEORG.include? contrib[:fullname]
229
236
 
230
237
  role = contributor_role(contrib)
231
- role[:description] = ["BibXML author"]
238
+ # role[:description] = ["BibXML author"]
232
239
  { entity: new_org(contrib[:fullname]), role: [role] }
233
240
  end
234
241
 
@@ -244,7 +251,6 @@ module RelatonBib
244
251
  contact: contacts(author.at("./address")),
245
252
  )
246
253
  { entity: entity, role: [contributor_role(author)] }
247
- # end
248
254
  end
249
255
 
250
256
  # @param contrib [Nokogiri::XML::Element]
@@ -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 [Symbol] :src/:obp/:rss
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 type [String, NilClass] src/obp/rss
12
- # @param content [String]
13
- def initialize(content:, type: nil)
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
@@ -1,3 +1,3 @@
1
1
  module RelatonBib
2
- VERSION = "1.13.8".freeze
2
+ VERSION = "1.13.10".freeze
3
3
  end
@@ -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]&.empty? ? nil : bibitem[:id],
27
- type: bibitem[:type]&.empty? ? nil : 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 type: l[:type], content: l.text
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]&.empty? ? nil : 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.class, RelatonBib::LocalityStack.class]
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.8
4
+ version: 1.13.10
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-21 00:00:00.000000000 Z
11
+ date: 2022-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug