lib/asciidoctor/iso/ref.rb in asciidoctor-iso-0.9.0 vs lib/asciidoctor/iso/ref.rb in asciidoctor-iso-0.9.1
- old
+ new
@@ -78,134 +78,20 @@
iso_publisher(t, m[:code])
t.allParts "true"
end
end
-# --- ISOBIB
- def fetch_ref_err(code, year, missed_years)
- id = year ? "#{code}:#{year}" : code
- warn "WARNING: no match found on the ISO website for #{id}. "\
- "The code must be exactly like it is on the website."
- warn "(There was no match for #{year}, though there were matches "\
- "found for #{missed_years.join(', ')}.)" unless missed_years.empty?
- if /\d-\d/.match? code
- warn "The provided document part may not exist, or the document "\
- "may no longer be published in parts."
- else
- warn "If you wanted to cite all document parts for the reference, "\
- "use \"#{code} (all parts)\".\nIf the document is not a standard, "\
- "use its document type abbreviation (TS, TR, PAS, Guide)."
- end
- nil
- end
-
- def fetch_pages(s, n)
- workers = WorkersPool.new n
- workers.worker { |w| { i: w[:i], hit: w[:hit].fetch } }
- s.each_with_index { |hit, i| workers << { i: i, hit: hit } }
- workers.end
- workers.result.sort { |x, y| x[:i] <=> y[:i] }.map { |x| x[:hit] }
- end
-
- def isobib_search_filter(code)
- docidrx = %r{^(ISO|IEC)[^0-9]*\s[0-9-]+}
- corrigrx = %r{^(ISO|IEC)[^0-9]*\s[0-9-]+:[0-9]+/}
- warn "fetching #{code}..."
- result = Isobib::IsoBibliography.search(code)
- result.first.select do |i|
- i.hit["title"] &&
- i.hit["title"].match(docidrx).to_s == code &&
- !corrigrx.match?(i.hit["title"])
- end
- end
-
- def iev
- Nokogiri::XML.fragment(<<~"END")
- <bibitem type="international-standard" id="IEV">
- <title format="text/plain" language="en" script="Latn">Electropedia:
- The World's Online Electrotechnical Vocabulary</title>
- <source type="src">http://www.electropedia.org</source>
- <docidentifier>IEV</docidentifier>
- <date type="published"> <on>#{Date.today.year}</on> </date>
- <contributor>
- <role type="publisher"/>
- <organization>
- <name>International Electrotechnical Commission</name>
- <abbreviation>IEC</abbreviation>
- <uri>www.iec.ch</uri>
- </organization>
- </contributor>
- <language>en</language> <language>fr</language>
- <script>Latn</script>
- <copyright>
- <from>#{Date.today.year}</from>
- <owner>
- <organization>
- <name>International Electrotechnical Commission</name>
- <abbreviation>IEC</abbreviation>
- <uri>www.iec.ch</uri>
- </organization>
- </owner>
- </copyright>
- <relation type="updates">
- <bibitem>
- <formattedref>IEC 60050</formattedref>
- </bibitem>
- </relation>
-</bibitem>
- END
- end
-
- # Sort through the results from Isobib, fetching them three at a time,
- # and return the first result that matches the code,
- # matches the year (if provided), and which # has a title (amendments do not).
- # Only expects the first page of results to be populated.
- # Does not match corrigenda etc (e.g. ISO 3166-1:2006/Cor 1:2007)
- # If no match, returns any years which caused mismatch, for error reporting
- def isobib_results_filter(result, year)
- missed_years = []
- result.each_slice(3) do |s| # ISO website only allows 3 connections
- fetch_pages(s, 3).each_with_index do |r, i|
- return { ret: r } if !year
- r.dates.select { |d| d.type == "published" }.each do |d|
- return { ret: r } if year.to_i == d.on.year
- missed_years << d.on.year
- end
- end
- end
- { years: missed_years }
- end
-
- def isobib_get1(code, year, opts)
- return iev if code.casecmp? "IEV"
- result = isobib_search_filter(code) or return nil
- ret = isobib_results_filter(result, year)
- return ret[:ret] if ret[:ret]
- fetch_ref_err(code, year, ret[:years])
- end
-
- def isobib_get(code, year, opts)
- code += "-1" if opts[:all_parts]
- ret = isobib_get1(code, year, opts)
- return nil if ret.nil?
- ret.to_most_recent_reference if !year
- ret.to_all_parts if opts[:all_parts]
- ret.to_xml
- end
-
- # --- ISOBIB
-
def iso_id(code, year, all_parts)
ret = code
ret += ":#{year}" if year
ret += " (all parts)" if all_parts
ret
end
def fetch_ref1(code, year, opts)
id = iso_id(code, year, opts[:all_parts])
return nil if @bibliodb.nil? # signals we will not be using isobib
- @bibliodb[id] = isobib_get(code, year, opts) unless @bibliodb[id]
+ @bibliodb[id] = Isobib::IsoBibliography.isobib_get(code, year, opts) unless @bibliodb[id]
@local_bibliodb[id] = @bibliodb[id] if !@local_bibliodb.nil? &&
!@local_bibliodb[id]
return @local_bibliodb[id] unless @local_bibliodb.nil?
@bibliodb[id]
end