require "isodoc" require_relative "metadata" require_relative "xref" require_relative "i18n" module IsoDoc module Iso module Init def metadata_init(lang, script, locale, i18n) @meta = Metadata.new(lang, script, locale, i18n) end def xref_init(lang, script, _klass, i18n, options) html = HtmlConvert.new(language: lang, script: script) @xrefs = Xref.new(lang, script, html, i18n, options) end def i18n_init(lang, script, locale, i18nyaml = nil) @i18n = I18n.new(lang, script, locale: locale, i18nyaml: i18nyaml || @i18nyaml) end def update_i18n(docxml) @docscheme = docxml.at(ns("//presentation-metadata[name" \ "[text() = 'document-scheme']]/value"))&.text || "2024" %w(1951 1972).include?(@docscheme) and i18n_conditional_set("reference_number", "reference_number_abbrev") %w(1951).include?(@docscheme) and i18n_conditional_set("edition_ordinal", "edition_ordinal_old") end def i18n_conditional_set(old, new) @i18n.get[new] or return @i18n.set(old, @i18n.get[new]) end def bibrenderer(options = {}) ::Relaton::Render::Iso::General.new(options.merge(language: @lang, i18nhash: @i18n.get)) end def amd?(_docxml) %w(amendment technical-corrigendum).include? @doctype end def clausedelim "" end def requirements_processor ::Metanorma::Requirements::Iso end def std_docid_semantic(id) id.nil? and return nil ret = Nokogiri::XML.fragment(id) ret.traverse do |x| x.text? or next x.replace(std_docid_semantic1(x.text)) end to_xml(ret) end def std_docid_semantic1(id) ids = id.split(/(\p{Zs})/) agency?(ids[0].sub(%r{^([^/]+)/.*$}, "\\1")) or return id ids.map! do |i| if %w(GUIDE TR TS DIR).include?(i) "#{i}" elsif /\p{Zs}/.match?(i) then i else std_docid_semantic_full(i) end end.join.gsub(%r{(\p{Zs}+)<}, "\\1<") end def std_docid_semantic_full(ident) ident .sub(/^([^0-9]+)(\p{Zs}|$)/, "\\1\\2") .sub(/([0-9]+)/, "\\1") .sub(/-([0-9]+)/, "-\\1") .sub(/:([0-9]{4})(?!\d)/, ":\\1") end end end end