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