lib/relaton_bib/bibxml_parser.rb in relaton-bib-1.9.12 vs lib/relaton_bib/bibxml_parser.rb in relaton-bib-1.9.13
- old
+ new
@@ -65,24 +65,34 @@
#
# @return [Array<RelatonBib::DocumentIdentifier>]
#
def docids(reference, ver) # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize
ret = []
- sfid = reference.at("./seriesInfo[@name='#{self::FLAVOR}']",
- "./front/seriesInfo[@name='#{self::FLAVOR}']")
- if sfid
- type = sfid[:name]
- id = sfid[:value]
- scope = "series"
- else # if self::FLAVOR
- id, scope = if reference[:anchor] then [reference[:anchor], "anchor"]
- elsif reference[:docName] then [reference[:docName], "docName"]
- elsif reference[:number] then [reference[:number], "number"]
- end
- id&.match(/^(3GPP|W3C|[A-Z]{2,})(?:\.(?=[A-Z])|(?=\d))/)
- type = self::FLAVOR || ($~ && $~[1])
+ # sfid = reference.at("./seriesInfo[@name='#{self::FLAVOR}']",
+ # "./front/seriesInfo[@name='#{self::FLAVOR}']")
+ # if sfid
+ # type = sfid[:name]
+ # id = sfid[:value]
+ # # scope = "series"
+ # else # if self::FLAVOR
+ # id, scope = if reference[:anchor] then [reference[:anchor], "anchor"]
+ # elsif reference[:docName] then [reference[:docName], "docName"]
+ # elsif reference[:number] then [reference[:number], "number"]
+ # end
+ id = reference["anchor"] || reference["docName"] || reference["number"]
+ type_match = id&.match(/^(3GPP|W3C|[A-Z]{2,})(?:\.(?=[A-Z])|(?=\d))/)
+ type = self::FLAVOR || (type_match && type_match[1])
+ ret << DocumentIdentifier.new(type: type, id: id) if id
+ %w[anchor docName number].each do |atr|
+ if reference[atr]
+ ret << DocumentIdentifier.new(id: reference[atr], type: type, scope: atr)
+ end
end
- ret << DocumentIdentifier.new(type: type, id: id, scope: scope) if id
+ # end
+ # if id
+ # ret << DocumentIdentifier.new(type: type, id: id)
+ # ret << DocumentIdentifier.new(type: type, id: id, scope: scope) if scope
+ # end
# if (id = reference[:anchor])
# ret << DocumentIdentifier.new(type: "rfc-anchor", id: id)
# end
ret + reference.xpath("./seriesInfo", "./front/seriesInfo").map do |si|
next unless SERIESINFONAMES.include? si[:name]