class AnyStyle::Normalizer::Volume

Constants

VOLNUM_RX

Public Instance Methods

normalize(item, **opts) click to toggle source
   # File lib/anystyle/normalizer/volume.rb
 8 def normalize(item, **opts)
 9   map_values(item, [:volume]) do |_, volume|
10     volume = StringUtils.strip_html volume
11 
12     unless item.key?(:date)
13       unless volume.sub!(/([12]\d{3});|\(([12]\d{3})\)|\/([12]\d{3})/, '').nil?
14         append item, :date, $1 || $2 || $3
15       end
16     end
17 
18     case volume
19     when /(?:^|\s)#{VOLNUM_RX}\s?\(([^)]+)\)[;:,]?(?:pp?.?)?(\s?\d+\p{Pd}\d+)?/
20       volume = $1
21       append item, :issue, $2
22       append item, :pages, $3.strip unless $3.nil?
23       volume
24     when /(?:#{VOLNUM_RX}
25           (?:\.?\s*J(?:ahrgan)?g\.?)?
26           [\p{P}\s]+)?(?:nos?|nr|n°|nº|iss?|fasc|heft|h)\.?\s?(.+)$/ix
27       volume = $1
28       append item, :issue, $2.sub(/\p{P}$/, '')
29       volume
30     when /#{VOLNUM_RX}:(\d+(\p{Pd}\d+)?)/
31       volume = $1
32       append item, (($3.nil? || item.key?(:pages)) ? :issue : :pages), $2
33       volume
34     when /#{VOLNUM_RX}[\.\/](\S+)/
35       volume = $1
36       append item, :issue, $2.sub(/\p{P}$/, '')
37       volume
38     when /(\d+) [Vv]ol/, /J(?:ahrgan)?g\.? (\d+)/
39       $1
40     else
41       volume
42         .sub(/<\/?(italic|i|strong|b|span|div)>/, '')
43         .sub(/^[\p{P}\s]+/, '')
44         .sub(/^[Vv]ol(ume)?[\p{P}\s]+/, '')
45         .sub(/[\p{P}\p{Z}\p{C}]+$/, '')
46     end
47   end
48 end