Module: Asciidoctor::Standoc::Base
- Included in:
- Converter
- Defined in:
- lib/asciidoctor/standoc/base.rb
Constant Summary collapse
- XML_ROOT_TAG =
"standard-document".freeze
- XML_NAMESPACE =
"https://www.metanorma.org/ns/standoc".freeze
- TERM_REFERENCE_RE_STR =
<<~REGEXP.freeze ^(?<xref><(xref|concept)[^>]+>([^<]*</(xref|concept)>)?) (,\s(?<text>.*))? $ REGEXP
- TERM_REFERENCE_RE =
Regexp.new(TERM_REFERENCE_RE_STR.gsub(/\s/, "").gsub(/_/, "\\s"), Regexp::IGNORECASE | Regexp::MULTILINE)
Instance Method Summary collapse
- #add_term_source(xml_t, seen_xref, m) ⇒ Object
- #clean_exit ⇒ Object
- #content(node) ⇒ Object
- #default_fonts(node) ⇒ Object
- #doc_converter(node) ⇒ Object
- #doc_extract_attributes(node) ⇒ Object
- #doctype(node) ⇒ Object
- #document(node) ⇒ Object
- #draft? ⇒ Boolean
- #extract_termsource_refs(text, node) ⇒ Object
- #front(node, xml) ⇒ Object
- #html_converter(node) ⇒ Object
- #html_extract_attributes(node) ⇒ Object
- #init(node) ⇒ Object
- #makexml(node) ⇒ Object
- #makexml1(node) ⇒ Object
- #middle(node, xml) ⇒ Object
- #outputs(node, ret) ⇒ Object
- #presentation_xml_converter(node) ⇒ Object
- #skip(node, name = nil) ⇒ Object
- #term_source_attrs(seen_xref) ⇒ Object
- #termsource(node) ⇒ Object
- #version ⇒ Object
- #xml_namespace ⇒ Object
- #xml_root_tag ⇒ Object
Instance Method Details
#add_term_source(xml_t, seen_xref, m) ⇒ Object
193 194 195 196 197 198 199 200 201 202 |
# File 'lib/asciidoctor/standoc/base.rb', line 193 def add_term_source(xml_t, seen_xref, m) if seen_xref.children[0].name == "concept" xml_t.origin { |o| o << seen_xref.children[0].to_xml } else xml_t.origin seen_xref.children[0].content, **attr_code(term_source_attrs(seen_xref)) end m[:text] && xml_t.modification do |mod| mod.p { |p| p << m[:text].sub(/^\s+/, "") } end end |
#clean_exit ⇒ Object
147 148 149 150 |
# File 'lib/asciidoctor/standoc/base.rb', line 147 def clean_exit @log.write(@output_dir + @filename + ".err") unless @novalid @files_to_delete.each { |f| FileUtils.rm f } end |
#content(node) ⇒ Object
25 26 27 |
# File 'lib/asciidoctor/standoc/base.rb', line 25 def content(node) node.content end |
#default_fonts(node) ⇒ Object
118 119 120 121 122 123 124 125 |
# File 'lib/asciidoctor/standoc/base.rb', line 118 def default_fonts(node) b = node.attr("body-font") || (node.attr("script") == "Hans" ? '"SimSun",serif' : '"Cambria",serif') h = node.attr("header-font") || (node.attr("script") == "Hans" ? '"SimHei",sans-serif' : '"Cambria",serif') m = node.attr("monospace-font") || '"Courier New",monospace' "$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n" end |
#doc_converter(node) ⇒ Object
81 82 83 |
# File 'lib/asciidoctor/standoc/base.rb', line 81 def doc_converter(node) IsoDoc::WordConvert.new(doc_extract_attributes(node)) end |
#doc_extract_attributes(node) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/asciidoctor/standoc/base.rb', line 60 def doc_extract_attributes(node) { script: node.attr("script"), bodyfont: node.attr("body-font"), headerfont: node.attr("header-font"), monospacefont: node.attr("monospace-font"), i18nyaml: node.attr("i18nyaml"), scope: node.attr("scope"), wordstylesheet: node.attr("wordstylesheet"), standardstylesheet: node.attr("standardstylesheet"), header: node.attr("header"), wordcoverpage: node.attr("wordcoverpage"), wordintropage: node.attr("wordintropage"), ulstyle: node.attr("ulstyle"), olstyle: node.attr("olstyle"), htmltoclevels: node.attr("htmltoclevels") || node.attr("toclevels"), doctoclevels: node.attr("doctoclevels") || node.attr("toclevels"), break_up_urls_in_tables: node.attr("break-up-urls-in-tables"), } end |
#doctype(node) ⇒ Object
172 173 174 |
# File 'lib/asciidoctor/standoc/base.rb', line 172 def doctype(node) node.attr("doctype")&.gsub(/\s+/, "-")&.downcase end |
#document(node) ⇒ Object
134 135 136 137 138 139 140 |
# File 'lib/asciidoctor/standoc/base.rb', line 134 def document(node) init(node) ret = makexml(node).to_xml(indent: 2) outputs(node, ret) unless node.attr("nodoc") || !node.attr("docfile") clean_exit ret end |
#draft? ⇒ Boolean
168 169 170 |
# File 'lib/asciidoctor/standoc/base.rb', line 168 def draft? @draft end |
#extract_termsource_refs(text, node) ⇒ Object
213 214 215 216 217 |
# File 'lib/asciidoctor/standoc/base.rb', line 213 def extract_termsource_refs(text, node) matched = TERM_REFERENCE_RE.match text matched.nil? and @log.add("AsciiDoc Input", node, "term reference not in expected format: #{text}") matched end |
#front(node, xml) ⇒ Object
176 177 178 179 180 |
# File 'lib/asciidoctor/standoc/base.rb', line 176 def front(node, xml) xml.bibdata **attr_code(type: "standard") do |b| node, b end end |
#html_converter(node) ⇒ Object
56 57 58 |
# File 'lib/asciidoctor/standoc/base.rb', line 56 def html_converter(node) IsoDoc::HtmlConvert.new(html_extract_attributes(node)) end |
#html_extract_attributes(node) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/asciidoctor/standoc/base.rb', line 36 def html_extract_attributes(node) { script: node.attr("script"), bodyfont: node.attr("body-font"), headerfont: node.attr("header-font"), monospacefont: node.attr("monospace-font"), i18nyaml: node.attr("i18nyaml"), scope: node.attr("scope"), htmlstylesheet: node.attr("htmlstylesheet"), htmlcoverpage: node.attr("htmlcoverpage"), htmlintropage: node.attr("htmlintropage"), scripts: node.attr("scripts"), scripts_pdf: node.attr("scripts-pdf"), datauriimage: node.attr("data-uri-image"), htmltoclevels: node.attr("htmltoclevels") || node.attr("toclevels"), doctoclevels: node.attr("doctoclevels") || node.attr("toclevels"), break_up_urls_in_tables: node.attr("break-up-urls-in-tables"), } end |
#init(node) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/asciidoctor/standoc/base.rb', line 89 def init(node) @fn_number ||= 0 @draft = false @refids = Set.new @anchors = {} @draft = node.attributes.has_key?("draft") @novalid = node.attr("novalid") @smartquotes = node.attr("smartquotes") != "false" @keepasciimath = node.attr("mn-keep-asciimath") && node.attr("mn-keep-asciimath") != "false" @fontheader = default_fonts(node) @files_to_delete = [] @filename = node.attr("docfile") ? File.basename(node.attr("docfile")).gsub(/\.adoc$/, "") : "" @localdir = Utils::localdir(node) @output_dir = outputdir node @no_isobib_cache = node.attr("no-isobib-cache") @no_isobib = node.attr("no-isobib") @bibdb = nil @seen_headers = [] @datauriimage = node.attr("data-uri-image") @boilerplateauthority = node.attr("boilerplate-authority") @log = Asciidoctor::Standoc::Log.new init_bib_caches(node) init_iev_caches(node) @lang = (node.attr("language") || "en") @script = (node.attr("script") || "Latn") @isodoc = isodoc(@lang, @script, node.attr("i18nyaml")) @i18n = @isodoc.i18n end |
#makexml(node) ⇒ Object
160 161 162 163 164 165 166 |
# File 'lib/asciidoctor/standoc/base.rb', line 160 def makexml(node) result = makexml1(node) ret1 = cleanup(Nokogiri::XML(result)) ret1.root.add_namespace(nil, xml_namespace) validate(ret1) unless @novalid ret1 end |
#makexml1(node) ⇒ Object
152 153 154 155 156 157 158 |
# File 'lib/asciidoctor/standoc/base.rb', line 152 def makexml1(node) result = ["<?xml version='1.0' encoding='UTF-8'?>", "<#{xml_root_tag} type='semantic' version='#{version}'>"] result << noko { |ixml| front node, ixml } result << noko { |ixml| middle node, ixml } result << "</#{xml_root_tag}>" textcleanup(result) end |
#middle(node, xml) ⇒ Object
182 183 184 185 186 |
# File 'lib/asciidoctor/standoc/base.rb', line 182 def middle(node, xml) xml.sections do |s| s << node.content if node.blocks? end end |
#outputs(node, ret) ⇒ Object
127 128 129 130 131 132 |
# File 'lib/asciidoctor/standoc/base.rb', line 127 def outputs(node, ret) File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) } presentation_xml_converter(node).convert(@filename + ".xml") html_converter(node).convert(@filename + ".presentation.xml", nil, false, "#{@filename}.html") doc_converter(node).convert(@filename + ".presentation.xml", nil, false, "#{@filename}.doc") end |
#presentation_xml_converter(node) ⇒ Object
85 86 87 |
# File 'lib/asciidoctor/standoc/base.rb', line 85 def presentation_xml_converter(node) IsoDoc::PresentationXMLConvert.new(html_extract_attributes(node)) end |
#skip(node, name = nil) ⇒ Object
29 30 31 32 33 34 |
# File 'lib/asciidoctor/standoc/base.rb', line 29 def skip(node, name = nil) name = name || node.node_name w = "converter missing for #{name} node in Metanorma backend" @log.add("AsciiDoc Input", node, w) nil end |
#term_source_attrs(seen_xref) ⇒ Object
188 189 190 191 |
# File 'lib/asciidoctor/standoc/base.rb', line 188 def term_source_attrs(seen_xref) { bibitemid: seen_xref.children[0]["target"], format: seen_xref.children[0]["format"], type: "inline" } end |
#termsource(node) ⇒ Object
219 220 221 222 223 224 225 226 227 228 |
# File 'lib/asciidoctor/standoc/base.rb', line 219 def termsource(node) matched = extract_termsource_refs(node.content, node) || return noko do |xml| attrs = { status: matched[:text] ? "modified" : "identical" } xml.termsource **attrs do |xml_t| seen_xref = Nokogiri::XML.fragment(matched[:xref]) add_term_source(xml_t, seen_xref, matched) end end.join("\n") end |
#version ⇒ Object
142 143 144 145 |
# File 'lib/asciidoctor/standoc/base.rb', line 142 def version flavour = self.class.name.sub(/::Converter$/, "").sub(/^.+::/, "") Metanorma.versioned(Metanorma, flavour)[-1]::VERSION end |
#xml_namespace ⇒ Object
21 22 23 |
# File 'lib/asciidoctor/standoc/base.rb', line 21 def xml_namespace self.class::XML_NAMESPACE end |
#xml_root_tag ⇒ Object
17 18 19 |
# File 'lib/asciidoctor/standoc/base.rb', line 17 def xml_root_tag self.class::XML_ROOT_TAG end |