require "singleton" require_relative "xref_util" module IsoDoc module XrefGen module Anchor class SeenAnchor def initialize(xmldoc) @seen = {} # ignore all metanorma-extension ids xmldoc.xpath("//xmlns:metanorma-extension//*[@id]").each do |x| add(x["id"]) end end def seen(elem) @seen.has_key?(elem) end def add(elem) @seen[elem] = true end end def initialize @anchors = {} end def get_anchors @anchors end def anchor_struct_label(lbl, node, elem) case elem when @labels["appendix"] s = "" \ "#{lbl}" "#{elem} #{s}" else anchor_struct_value(lbl, elem) end end def anchor_struct_xref(lbl, node, elem) unless lbl.blank? lbl = semx(node, lbl) s = " #{anchor_struct_value(lbl, elem)}" end l10n("#{elem}#{s}") .gsub(/ $/, "") end def anchor_struct_value(lbl, elem) case elem # TODO hardcoded ( ) ? when @labels["formula"], @labels["inequality"] then <<~SPAN.strip #{delim_wrap('(')}#{lbl}#{delim_wrap(')')} SPAN else lbl.to_s end end # def anchor_struct(lbl, container, elem, type, unnumb = false) def anchor_struct(lbl, node, elem_name, type, opt = {}) ret = { type: type, elem: elem_name, label: nil } opt[:unnumb] != "true" and ret[:label] = anchor_struct_label(lbl, node, elem_name) ret[:xref] = anchor_struct_xref(opt[:unnumb] == "true" ? "(??)" : lbl, node, elem_name) ret[:container] = @klass.get_clause_id(node) if opt[:container] ret[:value] = stripsemx(lbl) ret end include ::IsoDoc::XrefGen::Util end end end