require "htmlentities" require "uri" require "mime/types" require "base64" module Asciidoctor module Standoc module Blocks def requirement_subpart(node) name = node.role || node.attr("style") noko do |xml| xml.send name, **attr_code(exclude: node.option?("exclude"), type: node.attr("type")) do |o| o << node.content end end end def req_classif_parse(classif) ret = [] HTMLEntities.new.decode(classif).split(/;\s*/).each do |c| c1 = c.split(/:\s*/) next unless c1.size == 2 c1[1].split(/,\s*/).each { |v| ret << [ c1[0], v ] } end ret end def requirement_classification(classif, ex) req_classif_parse(classif).each do |r| ex.classification do |c| c.tag { |t| t << r[0] } c.value { |v| v << r[1] } end end end def reqt_attributes(node) { id: Utils::anchor_or_uuid(node), unnumbered: node.option?("unnumbered") ? "true" : nil, subsequence: node.attr("subsequence"), obligation: node.attr("obligation"), filename: node.attr("filename"), type: node.attr("type"), model: node.attr("model"), } end def requirement(node, obligation) classif = node.attr("classification") noko do |xml| xml.send obligation, **attr_code(reqt_attributes(node)) do |ex| node.title and ex.title { |t| t << node.title } node.attr("label") and ex.label { |l| l << node.attr("label") } node.attr("subject") and ex.subject { |s| s << node.attr("subject") } i = HTMLEntities.new.decode(node.attr("inherit")) i&.split(/;\s*/)&.each do |i| ex.inherit { |inh| inh << i } end requirement_classification(classif, ex) if classif wrap_in_para(node, ex) end end.join("\n") end end end end