relaton-bib 1.13.1 → 1.13.3

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: 86a0bd8757736f00d9823a2c7e054061070ca6a092a502f20f5598875db95aa0
4
- data.tar.gz: c96b9564f71355be85fd8752bf93df410d71d3913e87e8463b070bcbcca7b1b1
3
+ metadata.gz: ca70214e52f3a00a9388de24a1e07fa6464e0cb23831fd14775ce0e29c929fdf
4
+ data.tar.gz: 33cafac4c23e9dc57f102982bffbea20c25420f89471f164a0f875e4e6a74e26
5
5
  SHA512:
6
- metadata.gz: 2c37155924af6e0a88b5c2883f439f16edeb27dbfa4114e7d3bf5fd9c1eb2e54c1c0d67a535ff0e06a9cda0a9810974de0bdecb96408d0adaeaf766fb18ac29d
7
- data.tar.gz: 38ec500a5144b27b2dce3b6dfab3a7c76c6e936d54f4a2ec2933cb292f6aaf133471fd7b32a1521098c5bee25de789472c5ca6238c85c70310656c5ae00f3d8b
6
+ metadata.gz: d5eb2c4f5b7c13337a0e1f560d69ad140f91ea49405c3a4d876110bcdab32e532043a65187ca5fa6973c6cb0cf0240c285430a58d32338d186da882632194b2d
7
+ data.tar.gz: 3fd3d4b199c1c190c4920c7daba0e73979a6e82ee24648a84ab3057e2cee08345db9cc929ba324773a55d0e1fe4160ca5af2320a2e297c52dfcbace78bbcd282
@@ -10,4 +10,4 @@ on:
10
10
 
11
11
  jobs:
12
12
  rake:
13
- uses: relaton/support/.github/workflows/rake.yml@master
13
+ uses: relaton/support/.github/workflows/rake.yml@master
@@ -0,0 +1,22 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ name: release
4
+
5
+ on:
6
+ workflow_dispatch:
7
+ inputs:
8
+ next_version:
9
+ description: |
10
+ Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
11
+ required: true
12
+ default: 'skip'
13
+ push:
14
+ tags: [ v* ]
15
+
16
+ jobs:
17
+ release:
18
+ uses: relaton/support/.github/workflows/release.yml@master
19
+ with:
20
+ next_version: ${{ github.event.inputs.next_version }}
21
+ secrets:
22
+ rubygems-api-key: ${{ secrets.RELATON_CI_RUBYGEMS_API_KEY }}
data/docs/hash.adoc CHANGED
@@ -49,7 +49,7 @@ The structure below is given in YAML format:
49
49
  # bibliographic item anchor, used to crossreference within document
50
50
  id: ISO/TC211
51
51
  # date record was created
52
- fetched: 2019-06-30
52
+ fetched: '2019-06-30'
53
53
  # titles are an array, with a mandatory type and content, and optional format, language and script
54
54
  title:
55
55
  - type: main
@@ -66,9 +66,9 @@ docid:
66
66
  type: ISO
67
67
  id: TC211
68
68
  # document number
69
- docnumber: 211
69
+ docnumber: '211'
70
70
  # edition
71
- edition: 1
71
+ edition: '1'
72
72
  # language is an array
73
73
  language:
74
74
  - en
@@ -78,7 +78,7 @@ script:
78
78
  Latn
79
79
  # version contains revision date and draft (as array)
80
80
  version:
81
- revision_date: 2019-04-01
81
+ revision_date: '2019-04-01'
82
82
  draft: draft
83
83
  # note is an array of type and content
84
84
  biblionote:
@@ -94,12 +94,12 @@ docstatus:
94
94
  # date is an array, with mandatory type, and either an "on" value or a "from" and optional "to" value
95
95
  date:
96
96
  - type: issued
97
- value: 2014
97
+ value: '2014'
98
98
  - type: published
99
- from: 2014-04
100
- to: 2014-05
99
+ from: '2014-04'
100
+ to: '2014-05'
101
101
  - type: accessed
102
- value: 2015-05-20
102
+ value: '2015-05-20'
103
103
  # abstract is an array, with content, and optional language, script, format
104
104
  abstract:
105
105
  - content: >
@@ -114,7 +114,8 @@ abstract:
114
114
  # as the type.
115
115
  # Organisations have attributes name, url, abbreviation, subdivision, contacts, identifiers
116
116
  # Persons have attributes name, affiliation, contacts
117
- # Person names have attributes surname, completename, initials, forename, additions, prefixes.
117
+ # Person names have attributes, given, surname, additions, prefixes or completename.
118
+ # Given has formatted_initials or forename.
118
119
  # Initials, forename, additions, prefixes are arrays.
119
120
  # Name field values are either strings, or hashes, with content and language and script attributes.
120
121
  # The language and script attribute can also be given on the name.
@@ -126,9 +127,11 @@ abstract:
126
127
  # The affiliation description can be a single string, or a hash of content, language, script, and format.
127
128
  contributor:
128
129
  - organization:
129
- name: International Organization for Standardization
130
+ name:
131
+ content: International Organization for Standardization
130
132
  url: www.iso.org
131
- abbreviation: ISO
133
+ abbreviation:
134
+ content: ISO
132
135
  subdivision: division
133
136
  role:
134
137
  type: publisher
@@ -140,25 +143,29 @@ contributor:
140
143
  language: en
141
144
  affiliation:
142
145
  - organization:
143
- name: IETF
144
- abbreviation: IETF
145
- identifier:
146
- - type: uri
147
- id: www.ietf.org
146
+ name:
147
+ content: IETF
148
+ abbreviation:
149
+ content: IETF
150
+ identifier:
151
+ - type: uri
152
+ id: www.ietf.org
148
153
  description: Affiliation description
149
154
  contact:
150
- - street:
151
- - 8 Street St
152
- city: City
153
- postcode: 123456
154
- country: Country
155
- state: State
156
- - type: phone
157
- value: 223322
155
+ - address:
156
+ street:
157
+ - 8 Street St
158
+ city: City
159
+ postcode: '123456'
160
+ country: Country
161
+ state: State
162
+ - phone: '223322'
158
163
  role: author
159
- - person:
160
- name: IETF
161
- abbreviation: IETF
164
+ - organization:
165
+ name:
166
+ content: Internet Engineering Task Force
167
+ abbreviation:
168
+ content: IETF
162
169
  identifier:
163
170
  - type: uri
164
171
  id: www.ietf.org
@@ -166,18 +173,24 @@ contributor:
166
173
  publisher
167
174
  - person:
168
175
  name:
169
- language: en
170
- initial:
171
- - A.
172
- surname: Bierman
176
+ given:
177
+ forename:
178
+ initial: A
179
+ language: en
180
+ formatted_initials:
181
+ content: A.
182
+ surname:
183
+ content: Bierman
173
184
  affiliation:
174
- - organization:
175
- name: IETF
176
- abbreviation: IETF
177
- description:
178
- content: Affiliation description
179
- language: en
180
- script: Latn
185
+ - organization:
186
+ name:
187
+ content: IETF
188
+ abbreviation:
189
+ content: IETF
190
+ description:
191
+ content: Affiliation description
192
+ language: en
193
+ script: Latn
181
194
  identifier:
182
195
  - type: uri
183
196
  id: www.person.com
@@ -187,11 +200,13 @@ contributor:
187
200
  # a "from" date, and an optional "to" date
188
201
  copyright:
189
202
  owner:
190
- name: International Organization for Standardization
191
- abbreviation: ISO
203
+ name:
204
+ content: International Organization for Standardization
205
+ abbreviation:
206
+ content: ISO
192
207
  url: www.iso.org
193
- from: 2014
194
- to: 2020
208
+ from: '2014'
209
+ to: '2020'
195
210
  # link is an array of URIs, with a type and content
196
211
  link:
197
212
  - type: src
@@ -206,15 +221,17 @@ link:
206
221
  relation:
207
222
  - type: updates
208
223
  bibitem:
209
- formattedref: ISO 19115:2003
224
+ formattedref:
225
+ content: ISO 19115:2003
210
226
  bib_locality:
211
227
  type: page
212
- reference_from: 7
213
- reference_to: 10
228
+ reference_from: '7'
229
+ reference_to: '10'
214
230
  - type: updates
215
231
  bibitem:
216
232
  type: standard
217
- formattedref: ISO 19115:2003/Cor 1:2006
233
+ formattedref:
234
+ content: ISO 19115:2003/Cor 1:2006
218
235
  # series are an array, containing a type, and either a formattedref, or:
219
236
  # a title, a place, an organization (string),
220
237
  # an abbreviation, a from, a to, a number, and a partnumber.
@@ -236,8 +253,8 @@ series:
236
253
  content: ABVR
237
254
  language: en
238
255
  script: Latn
239
- from: 2009-02-01
240
- to: 2010-12-20
256
+ from: '2009-02-01'
257
+ to: '2010-12-20'
241
258
  number: serie1234
242
259
  partnumber: part5678
243
260
  - type: alt
@@ -255,7 +272,7 @@ place: bib place
255
272
  # extent is an array, containing type, a reference_from, and an optional reference_to
256
273
  extent:
257
274
  type: section
258
- reference_from: 7
275
+ reference_from: '7'
259
276
  # accesslocation is an array of strings
260
277
  accesslocation:
261
278
  - accesslocation1
@@ -266,9 +283,9 @@ classification:
266
283
  value: value
267
284
  # validity contains a begins date, an ends date, and a revision date
268
285
  validity:
269
- begins: 2010-10-10 12:21
270
- ends: 2011-02-03 18:30
271
- revision: 2011-03-04 09:00
286
+ begins: '2010-10-10 12:21'
287
+ ends: '2011-02-03 18:30'
288
+ revision: '2011-03-04 09:00'
272
289
  ----
273
290
 
274
291
  == Metanorma structure (AsciiBib): nested definition list
@@ -115,7 +115,7 @@ module RelatonBib
115
115
  attr_reader :validity
116
116
 
117
117
  # @return [Date]
118
- attr_reader :fetched
118
+ attr_accessor :fetched
119
119
 
120
120
  # @return [Array<RelatonBib::LocalizedString>]
121
121
  attr_reader :keyword
@@ -207,7 +207,11 @@ module RelatonBib
207
207
  warn %{[relaton-bib] document type "#{args[:type]}" is invalid.}
208
208
  end
209
209
 
210
- @title = TypedTitleStringCollection.new(args[:title])
210
+ @title = if args[:title].is_a?(TypedTitleStringCollection)
211
+ args[:title]
212
+ else
213
+ TypedTitleStringCollection.new(args[:title])
214
+ end
211
215
 
212
216
  @date = (args[:date] || []).map do |d|
213
217
  d.is_a?(Hash) ? BibliographicDate.new(**d) : d
@@ -368,7 +372,7 @@ module RelatonBib
368
372
  def to_hash # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
369
373
  hash = {}
370
374
  hash["id"] = id if id
371
- hash["title"] = single_element_array(title) if title&.any?
375
+ hash["title"] = title.to_hash if title&.any?
372
376
  hash["link"] = single_element_array(link) if link&.any?
373
377
  hash["type"] = type if type
374
378
  hash["docid"] = single_element_array(docidentifier) if docidentifier&.any?
@@ -604,10 +608,8 @@ module RelatonBib
604
608
  end
605
609
  end
606
610
 
607
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
608
-
609
611
  # @param [BibTeX::Entry]
610
- def bibtex_author(item) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
612
+ def bibtex_author(item) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity, Metrics/MethodLength, Metrics/AbcSize
611
613
  authors = contributor.select do |c|
612
614
  c.entity.is_a?(Person) && c.role.map(&:type).include?("author")
613
615
  end.map &:entity
@@ -624,7 +626,7 @@ module RelatonBib
624
626
  end
625
627
 
626
628
  # @param [BibTeX::Entry]
627
- def bibtex_contributor(item) # rubocop:disable Metrics/CyclomaticComplexity
629
+ def bibtex_contributor(item) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/MethodLength
628
630
  contributor.each do |c|
629
631
  rls = c.role.map(&:type)
630
632
  if rls.include?("publisher") then item.publisher = c.entity.name
@@ -638,7 +640,6 @@ module RelatonBib
638
640
  end
639
641
  end
640
642
  end
641
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
642
643
 
643
644
  # @param [BibTeX::Entry]
644
645
  def bibtex_note(item) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/AbcSize
@@ -724,16 +725,12 @@ module RelatonBib
724
725
  end
725
726
  end
726
727
 
727
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
728
- # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
729
- # rubocop:disable Style/NestedParenthesizedCalls, Metrics/BlockLength
730
-
731
728
  # @param opts [Hash]
732
729
  # @option opts [Nokogiri::XML::Builder] :builder XML builder
733
730
  # @option opts [Boolean] bibdata
734
731
  # @option opts [Symbol, nil] :date_format (:short), :full
735
732
  # @option opts [String] :lang language
736
- def render_xml(**opts)
733
+ def render_xml(**opts) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
737
734
  root = opts[:bibdata] ? :bibdata : :bibitem
738
735
  xml = opts[:builder].send(root) do |builder|
739
736
  builder.fetched fetched if fetched
@@ -791,7 +788,6 @@ module RelatonBib
791
788
  xml[:type] = type if type
792
789
  xml
793
790
  end
794
- # rubocop:enable Style/NestedParenthesizedCalls, Metrics/BlockLength
795
791
 
796
792
  #
797
793
  # Render BibXML (RFC, BCP)
@@ -799,7 +795,7 @@ module RelatonBib
799
795
  # @param [Nokogiri::XML::Builder] builder
800
796
  # @param [Boolean] include_bibdata
801
797
  #
802
- def render_bibxml(builder, include_keywords)
798
+ def render_bibxml(builder, include_keywords) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
803
799
  target = link.detect { |l| l.type.casecmp("src").zero? } ||
804
800
  link.detect { |l| l.type.casecmp("doi").zero? }
805
801
  bxml = if docnumber&.match(/^BCP/) || (docidentifier.detect(&:primary)&.id ||
@@ -831,7 +827,7 @@ module RelatonBib
831
827
  # @param [Nokogiri::XML::Builder] builder
832
828
  # @param [Boolean] include_keywords
833
829
  #
834
- def render_bibxml_ref(builder, include_keywords)
830
+ def render_bibxml_ref(builder, include_keywords) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
835
831
  builder.reference(**ref_attrs) do |xml|
836
832
  if title.any? || contributor.any? || date.any? || abstract.any? ||
837
833
  editorialgroup&.technical_committee&.any? ||
@@ -861,7 +857,7 @@ module RelatonBib
861
857
  #
862
858
  # @return [Hash<Symbol=>String>] attributes
863
859
  #
864
- def ref_attrs
860
+ def ref_attrs # rubocop:disable Metrics/AbcSize
865
861
  discopes = %w[anchor docName number]
866
862
  attrs = docidentifier.each_with_object({}) do |di, h|
867
863
  next unless discopes.include?(di.scope)
@@ -912,7 +908,7 @@ module RelatonBib
912
908
  #
913
909
  # @param [Nokogiri::XML::Builder] builder xml builder
914
910
  #
915
- def render_date(builder)
911
+ def render_date(builder) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
916
912
  dt = date.detect { |d| d.type == "published" }
917
913
  return unless dt
918
914
 
@@ -933,7 +929,7 @@ module RelatonBib
933
929
  #
934
930
  # @param [Nokogiri::XML::Builder] builder xml builder
935
931
  #
936
- def render_seriesinfo(builder)
932
+ def render_seriesinfo(builder) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
937
933
  docidentifier.each do |di|
938
934
  if BibXMLParser::SERIESINFONAMES.include? di.type
939
935
  builder.seriesInfo(name: di.type, value: di.id)
@@ -954,7 +950,7 @@ module RelatonBib
954
950
  #
955
951
  # @param [Nokogiri::XML::Builder] builder xml builder
956
952
  #
957
- def render_authors(builder)
953
+ def render_authors(builder) # rubocop:disable Metrics/AbcSize
958
954
  contributor.each do |c|
959
955
  builder.author do |xml|
960
956
  xml.parent[:role] = "editor" if c.role.detect { |r| r.type == "editor" }
@@ -972,7 +968,7 @@ module RelatonBib
972
968
  # @param [Nokogiri::XML::Builder] builder xml builder
973
969
  # @param [RelatonBib::ContributionInfo] contrib contributor
974
970
  #
975
- def render_address(builder, contrib)
971
+ def render_address(builder, contrib) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
976
972
  # addr = contrib.entity.contact.reject do |cn|
977
973
  # cn.is_a?(Address) && cn.postcode.nil?
978
974
  # end
@@ -1012,7 +1008,7 @@ module RelatonBib
1012
1008
  # @param [Nokogiri::XML::Builder] builder xml builder
1013
1009
  # @param [RelatonBib::Person] person person
1014
1010
  #
1015
- def render_person(builder, person)
1011
+ def render_person(builder, person) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
1016
1012
  render_organization builder, person.affiliation.first&.organization
1017
1013
  if person.name.completename
1018
1014
  builder.parent[:fullname] = person.name.completename.content
@@ -1042,9 +1038,7 @@ module RelatonBib
1042
1038
  # @param [Nokogiri::XML::Builder] builder xml builder
1043
1039
  # @param [RelatonBib::Organization] org organization
1044
1040
  #
1045
- def render_organization(builder, org)
1046
- # return unless org
1047
-
1041
+ def render_organization(builder, org) # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
1048
1042
  ab = org&.abbreviation&.content
1049
1043
  on = org&.name&.first&.content
1050
1044
  orgname = if BibXMLParser::ORGNAMES.key?(ab) then ab
@@ -1053,7 +1047,5 @@ module RelatonBib
1053
1047
  o = builder.organization orgname
1054
1048
  o[:abbrev] = ab if ab
1055
1049
  end
1056
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
1057
- # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
1058
1050
  end
1059
1051
  end
@@ -83,7 +83,7 @@ module RelatonBib
83
83
 
84
84
  ret[:title] = RelatonBib.array(ret[:title])
85
85
  .reduce(TypedTitleStringCollection.new) do |m, t|
86
- if t.is_a?(Hash) then m << t
86
+ if t.is_a?(Hash) then m << TypedTitleString.new(**t)
87
87
  else
88
88
  m + TypedTitleString.from_string(t)
89
89
  end
@@ -146,13 +146,16 @@ module RelatonBib
146
146
  def docid_hash_to_bib(ret) # rubocop:disable Metrics/AbcSize
147
147
  return unless ret[:docid]
148
148
 
149
- ret[:docid] = RelatonBib.array(ret[:docid])
150
- ret[:docid]&.each_with_index do |id, i|
149
+ ret[:docid] = RelatonBib.array(ret[:docid]).map do |id|
151
150
  id[:type] ||= id[:id].match(/^\w+(?=\s)/)&.to_s
152
- ret[:docid][i] = DocumentIdentifier.new(**id)
151
+ create_docid(**id)
153
152
  end
154
153
  end
155
154
 
155
+ def create_docid(**args)
156
+ DocumentIdentifier.new(**args)
157
+ end
158
+
156
159
  def version_hash_to_bib(ret)
157
160
  return unless ret[:version]
158
161
 
@@ -7,7 +7,7 @@ module RelatonBib
7
7
  attr_reader :hit
8
8
 
9
9
  # @param hit [Hash]
10
- # @param hit_collection [RelatonIso::HitCollection, RelatonNist:HitCollection]
10
+ # @param hit_collection [RelatonBib::HitCollection]
11
11
  def initialize(hit, hit_collection = nil)
12
12
  @hit = hit
13
13
  @hit_collection = hit_collection
@@ -20,11 +20,11 @@ module RelatonBib
20
20
 
21
21
  # @return [String]
22
22
  def inspect
23
- "<#{self.class}:#{format('%<id>#.14x', id: object_id << 1)} "\
24
- "@text=\"#{@hit_collection&.text}\" "\
25
- "@fetched=\"#{!@fetch.nil?}\" "\
26
- "@fullIdentifier=\"#{@fetch&.shortref(nil)}\" "\
27
- "@title=\"#{@hit[:code]}\">"
23
+ "<#{self.class}:#{format('%<id>#.14x', id: object_id << 1)} " \
24
+ "@text=\"#{@hit_collection&.text}\" " \
25
+ "@fetched=\"#{!@fetch.nil?}\" " \
26
+ "@fullIdentifier=\"#{@fetch&.shortref(nil)}\" " \
27
+ "@title=\"#{@hit[:code]}\">"
28
28
  end
29
29
 
30
30
  def fetch
@@ -78,18 +78,13 @@ module RelatonBib
78
78
  def encode(cnt) # rubocop:disable Metrics/MethodLength
79
79
  return unless cnt
80
80
 
81
- # regex = /(?<prf>.*?)(?<xml><(?<tag>\w+)>.*<\/\k<tag>>)(?<sfx>.*)/m
82
- regex = /(?<prf>.*?)(?<xml><(?<tag>\w+)[^>]*(?:>.*<\/\k<tag>)?>)(?<rest>.*)/m
83
- if cnt.match(regex)
84
- prf = Regexp.last_match(:prf).lstrip
85
- xml = Regexp.last_match[:xml]
86
- rest = Regexp.last_match(:rest).rstrip
87
- parts = xml.scan(/\s*<(?<tago>\w+)(?<attrs>[^>]*)>(?:(?<cnt1>.*?)(?=<\/\w+>|<\w+[^>]*>))?|(?<cnt2>.*?)<\/(?<tagc>\w+)>/)
88
- out = scan_xml parts
89
- "#{escp(prf)}#{out}#{encode(rest)}"
90
- else
91
- escp cnt
92
- end
81
+ parts = cnt.scan(%r{
82
+ <(?<tago>\w+)(?<attrs>[^>]*)> | # tag open
83
+ </(?<tagc>\w+)> | # tag close
84
+ (?<cmt><!--.*?-->) | # comment
85
+ (?<cnt>.+?)(?=<|$) # content
86
+ }x)
87
+ scan_xml parts
93
88
  end
94
89
 
95
90
  #
@@ -100,23 +95,32 @@ module RelatonBib
100
95
  # @return [String] output string
101
96
  #
102
97
  def scan_xml(parts) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
103
- return "" unless parts.any? && parts.first[0]
104
-
105
- tago, attrs, cnt1, = parts.shift
106
- if tago && tago == parts.first&.last
107
- _, _, _, cnt2, tagc = parts.shift
108
- "<#{tago}#{attrs}>#{escp(cnt1)}#{escp(cnt2)}</#{tagc}>"
109
- elsif tago && attrs && attrs[-1] == "/"
110
- "<#{tago}#{attrs}>"
111
- elsif tago
112
- inr = scan_xml parts
113
- _, _, _, cnt2, tagc = parts.shift
114
- if tago == tagc
115
- "<#{tago}#{attrs}>#{escp(cnt1)}#{inr}#{escp(cnt2)}</#{tagc}>"
116
- else
117
- "#{escp("<#{tago}>#{cnt1}")}#{inr}#{escp("#{cnt2}</#{tagc}>")}"
118
- end
119
- end + scan_xml(parts)
98
+ return "" unless parts.any?
99
+
100
+ out = ""
101
+ while parts.any? && (parts.first[3] || parts.first[4])
102
+ _, _, _, cmt, cnt = parts.shift
103
+ out += "#{cmt}#{escp(cnt)}"
104
+ end
105
+ unless out.empty?
106
+ out += scan_xml(parts) if parts.any? && parts.first[0]
107
+ return out
108
+ end
109
+
110
+ tago, attrs, tagc, = parts.shift
111
+ out = if tago && attrs && attrs[-1] == "/"
112
+ "<#{tago}#{attrs}>"
113
+ elsif tago
114
+ inr = scan_xml parts
115
+ _, _, tagc, = parts.shift
116
+ if tago == tagc
117
+ "<#{tago}#{attrs}>#{inr}</#{tagc}>"
118
+ else
119
+ "#{escp("<#{tago}#{attrs}>")}#{inr}#{escp("</#{tagc}>")}"
120
+ end
121
+ end
122
+ out += scan_xml(parts) if parts.any? && (parts.first[0] || parts.first[3] || parts.first[4])
123
+ out
120
124
  end
121
125
 
122
126
  #
@@ -26,8 +26,8 @@ module RelatonBib
26
26
  end
27
27
 
28
28
  # @return [RelatonBib::TypedTitleStringCollection]
29
- def select
30
- TypedTitleStringCollection.new(titles.select { |t| yield t })
29
+ def select(&block)
30
+ TypedTitleStringCollection.new titles.select(&block)
31
31
  end
32
32
 
33
33
  # @param init [Array, Hash]
@@ -62,6 +62,10 @@ module RelatonBib
62
62
  tl.each { |t| opts[:builder].title { t.to_xml opts[:builder] } }
63
63
  end
64
64
 
65
+ def to_hash
66
+ @array.map(&:to_hash)
67
+ end
68
+
65
69
  #
66
70
  # Add main title ot bibtex entry
67
71
  #
@@ -1,3 +1,3 @@
1
1
  module RelatonBib
2
- VERSION = "1.13.1".freeze
2
+ VERSION = "1.13.3".freeze
3
3
  end
@@ -376,7 +376,7 @@ module RelatonBib
376
376
  # @return [Array<RelatonBib::FormattedString>]
377
377
  def fetch_abstract(item)
378
378
  item.xpath("./abstract").map do |a|
379
- c = a.inner_html(encoding: "utf-8").strip
379
+ c = a.children.to_xml(encoding: "utf-8").strip
380
380
  FormattedString.new(content: c, language: a[:language],
381
381
  script: a[:script], format: a[:format])
382
382
  end
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.1
4
+ version: 1.13.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-24 00:00:00.000000000 Z
11
+ date: 2022-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -214,6 +214,7 @@ extensions: []
214
214
  extra_rdoc_files: []
215
215
  files:
216
216
  - ".github/workflows/rake.yml"
217
+ - ".github/workflows/release.yml"
217
218
  - ".gitignore"
218
219
  - ".gitmodules"
219
220
  - ".hound.yml"
@@ -279,7 +280,7 @@ homepage: https://github.com/relaton/relaton-bib
279
280
  licenses:
280
281
  - BSD-2-Clause
281
282
  metadata: {}
282
- post_install_message:
283
+ post_install_message:
283
284
  rdoc_options: []
284
285
  require_paths:
285
286
  - lib
@@ -294,8 +295,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
294
295
  - !ruby/object:Gem::Version
295
296
  version: '0'
296
297
  requirements: []
297
- rubygems_version: 3.2.3
298
- signing_key:
298
+ rubygems_version: 3.1.6
299
+ signing_key:
299
300
  specification_version: 4
300
301
  summary: 'RelatonBib: Ruby XMLDOC impementation.'
301
302
  test_files: []