Module: Metanorma::Standoc::Utils
- Included in:
- Cleanup::SpansToBibitem, Converter, NumberInlineMacro, TermLookupCleanup
- Defined in:
- lib/metanorma/standoc/utils.rb
Defined Under Namespace
Classes: EmptyAttr
Constant Summary collapse
- SUBCLAUSE_XPATH =
"//clause[not(parent::sections)]" \ "[not(ancestor::boilerplate)]".freeze
- SECTION_CONTAINERS =
%w(foreword introduction acknowledgements abstract clause references terms definitions annex appendix indexsect executivesummary).freeze
Class Method Summary collapse
-
.adoc2xml(text, flavour) ⇒ Object
wrapped in <sections>.
Instance Method Summary collapse
- #asciimath_key(sym) ⇒ Object
- #attr_code(attributes) ⇒ Object
- #convert(node, transform = nil, opts = {}) ⇒ Object
- #csv_split(text, delim = ";") ⇒ Object
- #dl_to_attrs(elem, dlist, name) ⇒ Object
- #dl_to_elems(ins, elem, dlist, name) ⇒ Object
- #document_ns_attributes(_doc) ⇒ Object
- #grkletters(text) ⇒ Object
- #insert_before(xmldoc, xpath) ⇒ Object
- #isodoc(lang, script, locale, i18nyaml = nil) ⇒ Object
- #kv_parse(text, delim = ",", eql = "=") ⇒ Object
- #link_unwrap(para) ⇒ Object
- #noko ⇒ Object
- #processor ⇒ Object
- #quoted_csv_split(text, delim = ",", eql = "=") ⇒ Object
- #refid?(ref) ⇒ Boolean
- #section_containers ⇒ Object
- #term_expr(elem) ⇒ Object
- #to_xml(node) ⇒ Object
- #uuid?(ref) ⇒ Boolean
- #wrap_in_para(node, out) ⇒ Object
- #xml_encode(text) ⇒ Object
Class Method Details
permalink .adoc2xml(text, flavour) ⇒ Object
wrapped in <sections>
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/metanorma/standoc/utils.rb', line 129 def adoc2xml(text, flavour) Nokogiri::XML(text).root and return text f = @flush_caches ? ":flush-caches:\n" : "" doc = <<~ADOC = X A :semantic-metadata-headless: true :no-isobib: #{f}:novalid: :!sectids: #{text} ADOC c = Asciidoctor.convert(doc, backend: flavour, header_footer: true) Nokogiri::XML(c).at("//xmlns:sections") end |
Instance Method Details
permalink #asciimath_key(sym) ⇒ Object
[View source]
146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/metanorma/standoc/utils.rb', line 146 def asciimath_key(sym) key = sym.dup key.traverse do |n| if n.name == "stem" && a = n.at(".//asciimath") n.children = @c.encode( @c.decode(grkletters(a.text)), :basic ) end end key.xpath(".//asciimath").each(&:remove) Nokogiri::XML(key.to_xml) end |
permalink #attr_code(attributes) ⇒ Object
[View source]
34 35 36 |
# File 'lib/metanorma/standoc/utils.rb', line 34 def attr_code(attributes) Metanorma::Utils::attr_code(attributes) end |
permalink #convert(node, transform = nil, opts = {}) ⇒ Object
[View source]
11 12 13 14 |
# File 'lib/metanorma/standoc/utils.rb', line 11 def convert(node, transform = nil, opts = {}) transform ||= node.node_name opts.empty? ? (send transform, node) : (send transform, node, opts) end |
permalink #csv_split(text, delim = ";") ⇒ Object
[View source]
38 39 40 41 |
# File 'lib/metanorma/standoc/utils.rb', line 38 def csv_split(text, delim = ";") Metanorma::Utils::csv_split(@c.decode(text), delim) .map { |x| @c.encode(x, :basic, :hexadecimal) } end |
permalink #dl_to_attrs(elem, dlist, name) ⇒ Object
[View source]
83 84 85 |
# File 'lib/metanorma/standoc/utils.rb', line 83 def dl_to_attrs(elem, dlist, name) Metanorma::Utils::dl_to_attrs(elem, dlist, name) end |
permalink #dl_to_elems(ins, elem, dlist, name) ⇒ Object
[View source]
87 88 89 |
# File 'lib/metanorma/standoc/utils.rb', line 87 def dl_to_elems(ins, elem, dlist, name) Metanorma::Utils::dl_to_elems(ins, elem, dlist, name) end |
permalink #document_ns_attributes(_doc) ⇒ Object
[View source]
26 27 28 |
# File 'lib/metanorma/standoc/utils.rb', line 26 def document_ns_attributes(_doc) nil end |
permalink #grkletters(text) ⇒ Object
[View source]
159 160 161 162 163 |
# File 'lib/metanorma/standoc/utils.rb', line 159 def grkletters(text) text.gsub(/\b(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa| lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi| psi|omega)\b/xi, "&\\1;") end |
permalink #insert_before(xmldoc, xpath) ⇒ Object
[View source]
103 104 105 106 107 108 109 |
# File 'lib/metanorma/standoc/utils.rb', line 103 def insert_before(xmldoc, xpath) unless ins = xmldoc.at(xpath).children.first xmldoc.at(xpath) << " " ins = xmldoc.at(xpath).children.first end ins end |
permalink #isodoc(lang, script, locale, i18nyaml = nil) ⇒ Object
[View source]
76 77 78 79 80 81 |
# File 'lib/metanorma/standoc/utils.rb', line 76 def isodoc(lang, script, locale, i18nyaml = nil) conv = presentation_xml_converter(EmptyAttr.new) i18n = conv.i18n_init(lang, script, locale, i18nyaml) conv.(lang, script, locale, i18n) conv end |
permalink #kv_parse(text, delim = ",", eql = "=") ⇒ Object
[View source]
55 56 57 58 59 60 61 62 |
# File 'lib/metanorma/standoc/utils.rb', line 55 def kv_parse(text, delim = ",", eql = "=") text or return {} c = HTMLEntities.new quoted_csv_split(text, delim).each_with_object({}) do |k, m| x = k.split(eql, 2) m[x[0]] = c.decode(x[1]) end end |
permalink #link_unwrap(para) ⇒ Object
[View source]
95 96 97 98 99 100 101 |
# File 'lib/metanorma/standoc/utils.rb', line 95 def link_unwrap(para) elems = para.elements if elems.size == 1 && elems[0].name == "link" para.at("./link").replace(elems[0]["target"].strip) end para end |
permalink #noko ⇒ Object
[View source]
30 31 32 |
# File 'lib/metanorma/standoc/utils.rb', line 30 def noko(&) Metanorma::Utils::noko(@script, &) end |
permalink #processor ⇒ Object
[View source]
16 17 18 19 20 21 22 23 24 |
# File 'lib/metanorma/standoc/utils.rb', line 16 def processor parent_type = self.class.name.split("::")[0...-1] parent_type << "Processor" begin Object.const_get(parent_type.join("::")) rescue NameError nil end end |
permalink #quoted_csv_split(text, delim = ",", eql = "=") ⇒ Object
[View source]
43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/metanorma/standoc/utils.rb', line 43 def quoted_csv_split(text, delim = ",", eql = "=") # quoted strings: key="va,lue", c = HTMLEntities.new text = c.decode(text).gsub(/([a-zA-Z_]+)#{eql}(["'])(.+?)\2/, %("\\1#{eql}\\3")) Metanorma::Utils::csv_split(text, delim) .map do |x| c.encode(x.sub(/^(["'])(.+)\1$/, "\\2"), :basic, :hexadecimal) end end |
permalink #refid?(ref) ⇒ Boolean
165 166 167 |
# File 'lib/metanorma/standoc/utils.rb', line 165 def refid?(ref) @refids.include? ref end |
permalink #section_containers ⇒ Object
[View source]
124 125 126 |
# File 'lib/metanorma/standoc/utils.rb', line 124 def section_containers SECTION_CONTAINERS end |
permalink #term_expr(elem) ⇒ Object
[View source]
91 92 93 |
# File 'lib/metanorma/standoc/utils.rb', line 91 def term_expr(elem) "<expression><name>#{elem}</name></expression>" end |
permalink #to_xml(node) ⇒ Object
[View source]
68 69 70 71 |
# File 'lib/metanorma/standoc/utils.rb', line 68 def to_xml(node) node.to_xml(encoding: "UTF-8", indent: 2, save_with: Nokogiri::XML::Node::SaveOptions::AS_XML) end |
permalink #uuid?(ref) ⇒ Boolean
169 170 171 172 |
# File 'lib/metanorma/standoc/utils.rb', line 169 def uuid?(ref) /^_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/ .match?(ref) end |
permalink #wrap_in_para(node, out) ⇒ Object
[View source]
64 65 66 |
# File 'lib/metanorma/standoc/utils.rb', line 64 def wrap_in_para(node, out) Metanorma::Utils::wrap_in_para(node, out) end |
permalink #xml_encode(text) ⇒ Object
[View source]
111 112 113 114 115 116 117 |
# File 'lib/metanorma/standoc/utils.rb', line 111 def xml_encode(text) @c.encode(text, :basic, :hexadecimal) .gsub("&gt;", ">").gsub("&lt;", "<").gsub("&amp;", "&") .gsub(">", ">").gsub("<", "<").gsub("&", "&") .gsub(""", '"').gsub("
", "\n").gsub("&#", "&#") .gsub("'", "'") end |