metanorma-standoc 1.11.0.1 → 1.11.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/lib/asciidoctor/standoc/base.rb +4 -100
- data/lib/asciidoctor/standoc/blocks.rb +1 -1
- data/lib/asciidoctor/standoc/cleanup.rb +2 -1
- data/lib/asciidoctor/standoc/cleanup_block.rb +1 -2
- data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +28 -20
- data/lib/asciidoctor/standoc/cleanup_inline.rb +14 -4
- data/lib/asciidoctor/standoc/cleanup_ref_dl.rb +25 -15
- data/lib/asciidoctor/standoc/cleanup_reqt.rb +3 -3
- data/lib/asciidoctor/standoc/cleanup_section_names.rb +2 -2
- data/lib/asciidoctor/standoc/cleanup_terms.rb +58 -21
- data/lib/asciidoctor/standoc/cleanup_terms_designations.rb +58 -21
- data/lib/asciidoctor/standoc/cleanup_text.rb +23 -0
- data/lib/asciidoctor/standoc/datamodel/attributes_table_preprocessor.rb +6 -6
- data/lib/asciidoctor/standoc/front.rb +13 -9
- data/lib/asciidoctor/standoc/inline.rb +13 -11
- data/lib/asciidoctor/standoc/isodoc.rng +73 -19
- data/lib/asciidoctor/standoc/lists.rb +1 -3
- data/lib/asciidoctor/standoc/ref.rb +101 -75
- data/lib/asciidoctor/standoc/ref_date_id.rb +30 -1
- data/lib/asciidoctor/standoc/ref_sect.rb +16 -6
- data/lib/asciidoctor/standoc/render.rb +115 -0
- data/lib/asciidoctor/standoc/reqt.rb +1 -1
- data/lib/asciidoctor/standoc/section.rb +33 -15
- data/lib/asciidoctor/standoc/terms.rb +7 -1
- data/lib/asciidoctor/standoc/utils.rb +0 -16
- data/lib/asciidoctor/standoc/validate.rb +1 -1
- data/lib/isodoc/html/htmlstyle.css +20 -11
- data/lib/isodoc/html/htmlstyle.scss +11 -11
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +3 -3
- data/spec/asciidoctor/base_spec.rb +48 -0
- data/spec/asciidoctor/blocks_spec.rb +99 -17
- data/spec/asciidoctor/cleanup_blocks_spec.rb +24 -0
- data/spec/asciidoctor/cleanup_sections_spec.rb +1 -1
- data/spec/asciidoctor/cleanup_spec.rb +6 -6
- data/spec/asciidoctor/cleanup_terms_spec.rb +556 -89
- data/spec/asciidoctor/datamodel/attributes_table_preprocessor_spec.rb +21 -21
- data/spec/asciidoctor/datamodel/diagram_preprocessor_spec.rb +16 -16
- data/spec/asciidoctor/inline_spec.rb +174 -5
- data/spec/asciidoctor/isobib_cache_spec.rb +4 -8
- data/spec/asciidoctor/macros_spec.rb +2 -2
- data/spec/asciidoctor/refs_dl_spec.rb +4 -4
- data/spec/asciidoctor/refs_spec.rb +889 -495
- data/spec/asciidoctor/section_spec.rb +64 -2
- data/spec/spec_helper.rb +2 -2
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +182 -182
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +12 -12
- data/spec/vcr_cassettes/isobib_get_123.yml +14 -14
- data/spec/vcr_cassettes/isobib_get_123_1.yml +99 -99
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +107 -107
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +14 -14
- data/spec/vcr_cassettes/isobib_get_124.yml +12 -12
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +46 -46
- metadata +9 -8
@@ -22,37 +22,44 @@ module Asciidoctor
|
|
22
22
|
{ id: match[:anchor], type: "standard" }
|
23
23
|
end
|
24
24
|
|
25
|
-
def isorefrender1(bib, match,
|
25
|
+
def isorefrender1(bib, match, year, allp = "")
|
26
26
|
bib.title(**plaintxt) { |i| i << ref_normalise(match[:text]) }
|
27
27
|
docid(bib, match[:usrlbl]) if match[:usrlbl]
|
28
|
-
docid(bib, id_and_year(match[:code],
|
28
|
+
docid(bib, id_and_year(match[:code], year) + allp)
|
29
29
|
docnumber(bib, match[:code])
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
32
|
+
def isorefmatchescode(match)
|
33
33
|
yr = norm_year(match[:year])
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
34
|
+
{ code: match[:code], year: yr, match: match,
|
35
|
+
title: match[:text], usrlbl: match[:usrlbl],
|
36
|
+
lang: (@lang || :all) }
|
37
|
+
end
|
38
|
+
|
39
|
+
def isorefmatchesout(item, xml)
|
40
|
+
if item[:doc] then use_retrieved_relaton(item, xml)
|
41
|
+
else
|
42
|
+
xml.bibitem **attr_code(ref_attributes(item[:ref][:match])) do |t|
|
43
|
+
isorefrender1(t, item[:ref][:match], item[:ref][:year])
|
44
|
+
item[:ref][:year] and t.date **{ type: "published" } do |d|
|
45
|
+
set_date_range(d, item[:ref][:year])
|
46
|
+
end
|
47
|
+
iso_publisher(t, item[:ref][:match][:code])
|
43
48
|
end
|
44
|
-
iso_publisher(t, match[:code])
|
45
49
|
end
|
46
50
|
end
|
47
51
|
|
48
|
-
def
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
52
|
+
def isorefmatches2code(match)
|
53
|
+
{ code: match[:code], no_year: true,
|
54
|
+
note: match[:fn], year: nil, match: match,
|
55
|
+
title: match[:text], usrlbl: match[:usrlbl],
|
56
|
+
lang: (@lang || :all) }
|
57
|
+
end
|
54
58
|
|
55
|
-
|
59
|
+
def isorefmatches2out(item, xml)
|
60
|
+
if item[:doc] then use_retrieved_relaton(item, xml)
|
61
|
+
else isorefmatches2_1(xml, item[:ref][:match])
|
62
|
+
end
|
56
63
|
end
|
57
64
|
|
58
65
|
def isorefmatches2_1(xml, match)
|
@@ -70,16 +77,22 @@ module Asciidoctor
|
|
70
77
|
end
|
71
78
|
end
|
72
79
|
|
73
|
-
def
|
80
|
+
def isorefmatches3code(match)
|
74
81
|
yr = norm_year(match[:year])
|
75
82
|
hasyr = !yr.nil? && yr != "--"
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
+
{ code: match[:code], match: match, yr: yr, hasyr: hasyr,
|
84
|
+
year: hasyr ? yr : nil,
|
85
|
+
all_parts: true, no_year: yr == "--",
|
86
|
+
text: match[:text], usrlbl: match[:usrlbl],
|
87
|
+
lang: (@lang || :all) }
|
88
|
+
end
|
89
|
+
|
90
|
+
def isorefmatches3out(item, xml)
|
91
|
+
if item[:doc] then use_retrieved_relaton(item, xml)
|
92
|
+
else
|
93
|
+
isorefmatches3_1(xml, item[:ref][:match], item[:ref][:yr],
|
94
|
+
item[:ref][:hasyr], item[:doc])
|
95
|
+
end
|
83
96
|
end
|
84
97
|
|
85
98
|
def isorefmatches3_1(xml, match, yr, _hasyr, _ref)
|
@@ -120,56 +133,34 @@ module Asciidoctor
|
|
120
133
|
end
|
121
134
|
|
122
135
|
MALFORMED_REF = "no anchor on reference, markup may be malformed: see "\
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
def analyse_ref_nofetch(ret)
|
127
|
-
return ret unless m = /^nofetch\((?<id>.+)\)$/.match(ret[:id])
|
128
|
-
|
129
|
-
ret.merge(id: m[:id], nofetch: true)
|
130
|
-
end
|
131
|
-
|
132
|
-
def analyse_ref_repo_path(ret)
|
133
|
-
return ret unless m =
|
134
|
-
/^(?<type>repo|path):\((?<key>[^,]+),?(?<id>.*)\)$/.match(ret[:id])
|
135
|
-
|
136
|
-
id = m[:id].empty? ? m[:key].sub(%r{^[^/]+/}, "") : m[:id]
|
137
|
-
ret.merge(id: id, type: m[:type], key: m[:key], nofetch: true)
|
138
|
-
end
|
139
|
-
|
140
|
-
def analyse_ref_numeric(ret)
|
141
|
-
return ret unless /^\d+$/.match?(ret[:id])
|
142
|
-
|
143
|
-
ret.merge(numeric: true)
|
144
|
-
end
|
145
|
-
|
146
|
-
# ref id = (usrlbl)code[:-]year
|
147
|
-
# code = nofetch(code) | (repo|path):(key,code) | \[? number \]? | ident
|
148
|
-
def analyse_ref_code(code)
|
149
|
-
ret = { id: code }
|
150
|
-
return ret if code.blank?
|
151
|
-
|
152
|
-
analyse_ref_nofetch(analyse_ref_repo_path(analyse_ref_numeric(ret)))
|
153
|
-
end
|
136
|
+
"https://www.metanorma.com/author/topics/document-format/bibliography/ , "\
|
137
|
+
"https://www.metanorma.com/author/iso/topics/markup/#bibliographies".freeze
|
154
138
|
|
155
139
|
# TODO: alternative where only title is available
|
156
|
-
def
|
157
|
-
m = NON_ISO_REF.match(item) and return
|
140
|
+
def refitemcode(item, node)
|
141
|
+
m = NON_ISO_REF.match(item) and return refitem1code(item, m)
|
158
142
|
@log.add("AsciiDoc Input", node, "#{MALFORMED_REF}: #{item}")
|
159
|
-
|
143
|
+
{}
|
160
144
|
end
|
161
145
|
|
162
|
-
def
|
146
|
+
def refitem1code(_item, match)
|
163
147
|
code = analyse_ref_code(match[:code])
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
148
|
+
if (code[:id] && code[:numeric]) || code[:nofetch]
|
149
|
+
{ code: nil, match: match, analyse_code: code }
|
150
|
+
else
|
151
|
+
{ code: code[:id], analyse_code: code,
|
152
|
+
year: match.names.include?("year") ? match[:year] : nil,
|
153
|
+
title: match[:text], match: match,
|
154
|
+
usrlbl: match[:usrlbl], lang: (@lang || :all) }
|
170
155
|
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def refitemout(item, xml)
|
159
|
+
return nil if item[:ref][:match].nil?
|
171
160
|
|
172
|
-
refitem_render(xml, match,
|
161
|
+
item[:doc] or return refitem_render(xml, item[:ref][:match],
|
162
|
+
item[:ref][:analyse_code])
|
163
|
+
use_retrieved_relaton(item, xml)
|
173
164
|
end
|
174
165
|
|
175
166
|
def ref_normalise(ref)
|
@@ -211,15 +202,50 @@ module Asciidoctor
|
|
211
202
|
[matched, matched2, matched3]
|
212
203
|
end
|
213
204
|
|
214
|
-
def
|
205
|
+
def reference1code(item, node)
|
215
206
|
matched, matched2, matched3 = reference1_matches(item)
|
216
207
|
if matched3.nil? && matched2.nil? && matched.nil?
|
217
|
-
|
218
|
-
elsif !matched.nil? then
|
219
|
-
elsif !matched2.nil? then
|
220
|
-
elsif !matched3.nil? then
|
208
|
+
refitemcode(item, node).merge(process: 0)
|
209
|
+
elsif !matched.nil? then isorefmatchescode(matched).merge(process: 1)
|
210
|
+
elsif !matched2.nil? then isorefmatches2code(matched2).merge(process: 2)
|
211
|
+
elsif !matched3.nil? then isorefmatches3code(matched3).merge(process: 3)
|
221
212
|
end
|
222
213
|
end
|
214
|
+
|
215
|
+
def reference1out(item, xml)
|
216
|
+
case item[:ref][:process]
|
217
|
+
when 0 then refitemout(item, xml)
|
218
|
+
when 1 then isorefmatchesout(item, xml)
|
219
|
+
when 2 then isorefmatches2out(item, xml)
|
220
|
+
when 3 then isorefmatches3out(item, xml)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
def reference_preproc(node)
|
225
|
+
refs = node.items.each_with_object([]) do |b, m|
|
226
|
+
m << reference1code(b.text, node)
|
227
|
+
end
|
228
|
+
results = refs.each_with_index.with_object(Queue.new) do |(ref, i), res|
|
229
|
+
fetch_ref_async(ref.merge(ord: i), i, res)
|
230
|
+
end
|
231
|
+
[refs, results]
|
232
|
+
end
|
233
|
+
|
234
|
+
def reference(node)
|
235
|
+
refs, results = reference_preproc(node)
|
236
|
+
noko do |xml|
|
237
|
+
ret = refs.each.with_object([]) do |_, m|
|
238
|
+
ref, i, doc = results.pop
|
239
|
+
m[i.to_i] = { ref: ref }
|
240
|
+
if doc.is_a?(RelatonBib::RequestError)
|
241
|
+
@log.add("Bibliography", nil, "Could not retrieve #{ref[:code]}: "\
|
242
|
+
"no access to online site")
|
243
|
+
else m[i.to_i][:doc] = doc
|
244
|
+
end
|
245
|
+
end
|
246
|
+
ret.each { |b| reference1out(b, xml) }
|
247
|
+
end.join
|
248
|
+
end
|
223
249
|
end
|
224
250
|
end
|
225
251
|
end
|
@@ -26,7 +26,7 @@ module Asciidoctor
|
|
26
26
|
def conditional_date(bib, match, noyr)
|
27
27
|
if match.names.include?("year") && !match[:year].nil?
|
28
28
|
bib.date(**{ type: "published" }) do |d|
|
29
|
-
noyr and d.on "--" or set_date_range(d, norm_year(match[:year]))
|
29
|
+
(noyr and d.on "--") or set_date_range(d, norm_year(match[:year]))
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -57,6 +57,35 @@ module Asciidoctor
|
|
57
57
|
def mn_code(code)
|
58
58
|
code.sub(/^\(/, "[").sub(/\).*$/, "]").sub(/^nofetch\((.+)\)$/, "\\1")
|
59
59
|
end
|
60
|
+
|
61
|
+
def analyse_ref_nofetch(ret)
|
62
|
+
return ret unless m = /^nofetch\((?<id>.+)\)$/.match(ret[:id])
|
63
|
+
|
64
|
+
ret.merge(id: m[:id], nofetch: true)
|
65
|
+
end
|
66
|
+
|
67
|
+
def analyse_ref_repo_path(ret)
|
68
|
+
return ret unless m =
|
69
|
+
/^(?<type>repo|path):\((?<key>[^,]+),?(?<id>.*)\)$/.match(ret[:id])
|
70
|
+
|
71
|
+
id = m[:id].empty? ? m[:key].sub(%r{^[^/]+/}, "") : m[:id]
|
72
|
+
ret.merge(id: id, type: m[:type], key: m[:key], nofetch: true)
|
73
|
+
end
|
74
|
+
|
75
|
+
def analyse_ref_numeric(ret)
|
76
|
+
return ret unless /^\d+$/.match?(ret[:id])
|
77
|
+
|
78
|
+
ret.merge(numeric: true)
|
79
|
+
end
|
80
|
+
|
81
|
+
# ref id = (usrlbl)code[:-]year
|
82
|
+
# code = nofetch(code) | (repo|path):(key,code) | \[? number \]? | ident
|
83
|
+
def analyse_ref_code(code)
|
84
|
+
ret = { id: code }
|
85
|
+
return ret if code.blank?
|
86
|
+
|
87
|
+
analyse_ref_nofetch(analyse_ref_repo_path(analyse_ref_numeric(ret)))
|
88
|
+
end
|
60
89
|
end
|
61
90
|
end
|
62
91
|
end
|
@@ -9,12 +9,6 @@ module Asciidoctor
|
|
9
9
|
@norm_ref
|
10
10
|
end
|
11
11
|
|
12
|
-
def reference(node)
|
13
|
-
noko do |xml|
|
14
|
-
node.items.each { |item| reference1(node, item.text, xml) }
|
15
|
-
end.join
|
16
|
-
end
|
17
|
-
|
18
12
|
def bibliography_parse(attrs, xml, node)
|
19
13
|
x = biblio_prep(attrs, xml, node) and return x
|
20
14
|
@biblio = true
|
@@ -86,6 +80,16 @@ module Asciidoctor
|
|
86
80
|
nil
|
87
81
|
end
|
88
82
|
|
83
|
+
def fetch_ref_async(ref, idx, res)
|
84
|
+
if ref[:code].nil? || ref[:no_year] || @bibdb.nil?
|
85
|
+
res << [ref, idx, nil]
|
86
|
+
else
|
87
|
+
@bibdb.fetch_async(ref[:code], ref[:year], ref) do |doc|
|
88
|
+
res << [ref, idx, doc]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
89
93
|
def emend_biblio(xml, code, title, usrlbl)
|
90
94
|
unless xml.at("/bibitem/docidentifier[not(@type = 'DOI')][text()]")
|
91
95
|
@log.add("Bibliography", nil,
|
@@ -112,6 +116,12 @@ module Asciidoctor
|
|
112
116
|
xml.to_xml.sub(/<\?[^>]+>/, "")
|
113
117
|
end
|
114
118
|
|
119
|
+
def use_retrieved_relaton(item, xml)
|
120
|
+
xml.parent.add_child(smart_render_xml(item[:doc], item[:ref][:code],
|
121
|
+
item[:ref]))
|
122
|
+
use_my_anchor(xml, item[:ref][:match][:anchor])
|
123
|
+
end
|
124
|
+
|
115
125
|
def init_bib_caches(node)
|
116
126
|
return if @no_isobib
|
117
127
|
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module Asciidoctor
|
2
|
+
module Standoc
|
3
|
+
module Base
|
4
|
+
def html_extract_attributes(node)
|
5
|
+
{
|
6
|
+
script: node.attr("script"),
|
7
|
+
bodyfont: node.attr("body-font"),
|
8
|
+
headerfont: node.attr("header-font"),
|
9
|
+
monospacefont: node.attr("monospace-font"),
|
10
|
+
i18nyaml: node.attr("i18nyaml"),
|
11
|
+
scope: node.attr("scope"),
|
12
|
+
htmlstylesheet: node.attr("htmlstylesheet"),
|
13
|
+
htmlstylesheet_override: node.attr("htmlstylesheet-override"),
|
14
|
+
htmlcoverpage: node.attr("htmlcoverpage"),
|
15
|
+
htmlintropage: node.attr("htmlintropage"),
|
16
|
+
scripts: node.attr("scripts"),
|
17
|
+
scripts_override: node.attr("scripts-override"),
|
18
|
+
scripts_pdf: node.attr("scripts-pdf"),
|
19
|
+
datauriimage: node.attr("data-uri-image") != "false",
|
20
|
+
htmltoclevels: node.attr("htmltoclevels") || node.attr("toclevels"),
|
21
|
+
doctoclevels: node.attr("doctoclevels") || node.attr("toclevels"),
|
22
|
+
break_up_urls_in_tables: node.attr("break-up-urls-in-tables"),
|
23
|
+
suppressasciimathdup: node.attr("suppress-asciimath-dup"),
|
24
|
+
bare: node.attr("bare"),
|
25
|
+
sectionsplit: node.attr("sectionsplit"),
|
26
|
+
baseassetpath: node.attr("base-asset-path"),
|
27
|
+
aligncrosselements: node.attr("align-cross-elements"),
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def html_converter(node)
|
32
|
+
IsoDoc::HtmlConvert.new(html_extract_attributes(node))
|
33
|
+
end
|
34
|
+
|
35
|
+
def pdf_converter(node)
|
36
|
+
return nil if node.attr("no-pdf")
|
37
|
+
|
38
|
+
IsoDoc::Standoc::PdfConvert.new(pdf_extract_attributes(node))
|
39
|
+
end
|
40
|
+
|
41
|
+
def doc_extract_attributes(node)
|
42
|
+
attrs = {
|
43
|
+
script: node.attr("script"),
|
44
|
+
bodyfont: node.attr("body-font"),
|
45
|
+
headerfont: node.attr("header-font"),
|
46
|
+
monospacefont: node.attr("monospace-font"),
|
47
|
+
i18nyaml: node.attr("i18nyaml"),
|
48
|
+
scope: node.attr("scope"),
|
49
|
+
wordstylesheet: node.attr("wordstylesheet"),
|
50
|
+
wordstylesheet_override: node.attr("wordstylesheet-override"),
|
51
|
+
standardstylesheet: node.attr("standardstylesheet"),
|
52
|
+
header: node.attr("header"),
|
53
|
+
wordcoverpage: node.attr("wordcoverpage"),
|
54
|
+
wordintropage: node.attr("wordintropage"),
|
55
|
+
ulstyle: node.attr("ulstyle"),
|
56
|
+
olstyle: node.attr("olstyle"),
|
57
|
+
htmltoclevels: node.attr("htmltoclevels") || node.attr("toclevels"),
|
58
|
+
doctoclevels: node.attr("doctoclevels") || node.attr("toclevels"),
|
59
|
+
break_up_urls_in_tables: node.attr("break-up-urls-in-tables"),
|
60
|
+
suppressasciimathdup: node.attr("suppress-asciimath-dup"),
|
61
|
+
bare: node.attr("bare"),
|
62
|
+
baseassetpath: node.attr("base-asset-path"),
|
63
|
+
aligncrosselements: node.attr("align-cross-elements"),
|
64
|
+
}
|
65
|
+
|
66
|
+
if fonts_manifest = node.attr(FONTS_MANIFEST)
|
67
|
+
attrs[IsoDoc::XslfoPdfConvert::MN2PDF_OPTIONS] = {
|
68
|
+
IsoDoc::XslfoPdfConvert::MN2PDF_FONT_MANIFEST => fonts_manifest,
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
attrs
|
73
|
+
end
|
74
|
+
|
75
|
+
def pdf_extract_attributes(node)
|
76
|
+
%w(pdf-encrypt pdf-encryption-length pdf-user-password
|
77
|
+
pdf-owner-password pdf-allow-copy-content pdf-allow-edit-content
|
78
|
+
pdf-allow-assemble-document pdf-allow-edit-annotations
|
79
|
+
pdf-allow-print pdf-allow-print-hq pdf-allow-fill-in-forms
|
80
|
+
pdf-allow-access-content pdf-encrypt-metadata)
|
81
|
+
.each_with_object({}) do |x, m|
|
82
|
+
m[x.gsub(/-/, "").to_i] = node.attr(x)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def doc_converter(node)
|
87
|
+
IsoDoc::WordConvert.new(doc_extract_attributes(node))
|
88
|
+
end
|
89
|
+
|
90
|
+
def presentation_xml_converter(node)
|
91
|
+
IsoDoc::PresentationXMLConvert.new(html_extract_attributes(node))
|
92
|
+
end
|
93
|
+
|
94
|
+
def default_fonts(node)
|
95
|
+
b = node.attr("body-font") ||
|
96
|
+
(node.attr("script") == "Hans" ? '"Source Han Sans",serif' : '"Cambria",serif')
|
97
|
+
h = node.attr("header-font") ||
|
98
|
+
(node.attr("script") == "Hans" ? '"Source Han Sans",sans-serif' : '"Cambria",serif')
|
99
|
+
m = node.attr("monospace-font") || '"Courier New",monospace'
|
100
|
+
"$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
|
101
|
+
end
|
102
|
+
|
103
|
+
def outputs(node, ret)
|
104
|
+
File.open("#{@filename}.xml", "w:UTF-8") { |f| f.write(ret) }
|
105
|
+
presentation_xml_converter(node).convert("#{@filename}.xml")
|
106
|
+
html_converter(node).convert("#{@filename}.presentation.xml",
|
107
|
+
nil, false, "#{@filename}.html")
|
108
|
+
doc_converter(node).convert("#{@filename}.presentation.xml",
|
109
|
+
nil, false, "#{@filename}.doc")
|
110
|
+
pdf_converter(node)&.convert("#{@filename}.presentation.xml",
|
111
|
+
nil, false, "#{@filename}.pdf")
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require "uri"
|
1
|
+
require "uri" if /^2\./.match?(RUBY_VERSION)
|
2
2
|
require_relative "ref_sect"
|
3
3
|
require_relative "terms"
|
4
4
|
|
@@ -18,7 +18,7 @@ module Asciidoctor
|
|
18
18
|
def sectiontype(node, level = true)
|
19
19
|
ret = sectiontype1(node)
|
20
20
|
ret1 = sectiontype_streamline(ret)
|
21
|
-
return ret1 if "symbols and abbreviated terms"
|
21
|
+
return ret1 if ret1 == "symbols and abbreviated terms"
|
22
22
|
return nil unless !level || node.level == 1
|
23
23
|
return nil if @seen_headers.include? ret
|
24
24
|
|
@@ -49,12 +49,17 @@ module Asciidoctor
|
|
49
49
|
script: node.attributes["script"],
|
50
50
|
number: node.attributes["number"],
|
51
51
|
type: node.attributes["type"],
|
52
|
-
annex: (if (node.attr("style") == "appendix" ||
|
52
|
+
annex: (if (node.attr("style") == "appendix" ||
|
53
|
+
node.role == "appendix") &&
|
53
54
|
node.level == 1
|
54
55
|
true
|
55
56
|
end),
|
56
|
-
|
57
|
-
|
57
|
+
tag: node&.attr("tag"),
|
58
|
+
"multilingual-rendering": node&.attr("multilingual-rendering"),
|
59
|
+
preface: (if node.role == "preface" ||
|
60
|
+
node.attr("style") == "preface"
|
61
|
+
true
|
62
|
+
end) }
|
58
63
|
return ret unless node.attributes["change"]
|
59
64
|
|
60
65
|
ret.merge(change: node.attributes["change"],
|
@@ -84,13 +89,11 @@ module Asciidoctor
|
|
84
89
|
else
|
85
90
|
if @term_def then term_def_subclause_parse(a, xml, node)
|
86
91
|
elsif @definitions then symbols_parse(a, xml, node)
|
87
|
-
elsif @norm_ref
|
88
|
-
|
89
|
-
|
92
|
+
elsif @norm_ref ||
|
93
|
+
(node.attr("style") == "bibliography" &&
|
94
|
+
sectiontype(node, false) == "normative references")
|
90
95
|
norm_ref_parse(a, xml, node)
|
91
|
-
elsif node.attr("style") == "bibliography"
|
92
|
-
bibliography_parse(a, xml, node)
|
93
|
-
elsif node.attr("style") == "bibliography"
|
96
|
+
elsif @biblio || node.attr("style") == "bibliography"
|
94
97
|
bibliography_parse(a, xml, node)
|
95
98
|
elsif node.attr("style") == "abstract"
|
96
99
|
abstract_parse(a, xml, node)
|
@@ -118,7 +121,9 @@ module Asciidoctor
|
|
118
121
|
def preamble(node)
|
119
122
|
noko do |xml|
|
120
123
|
xml.foreword **attr_code(section_attributes(node)) do |xml_abstract|
|
121
|
-
xml_abstract.title
|
124
|
+
xml_abstract.title do |t|
|
125
|
+
t << (node.blocks[0].title || @i18n.foreword)
|
126
|
+
end
|
122
127
|
content = node.content
|
123
128
|
xml_abstract << content
|
124
129
|
end
|
@@ -143,7 +148,7 @@ module Asciidoctor
|
|
143
148
|
end
|
144
149
|
|
145
150
|
def clause_parse(attrs, xml, node)
|
146
|
-
attrs["inline-header"
|
151
|
+
attrs[:"inline-header"] = node.option? "inline-header"
|
147
152
|
attrs[:bibitem] = true if node.option? "bibitem"
|
148
153
|
attrs[:level] = node.attr("level")
|
149
154
|
set_obligation(attrs, node)
|
@@ -154,7 +159,7 @@ module Asciidoctor
|
|
154
159
|
end
|
155
160
|
|
156
161
|
def annex_parse(attrs, xml, node)
|
157
|
-
attrs["inline-header"
|
162
|
+
attrs[:"inline-header"] = node.option? "inline-header"
|
158
163
|
set_obligation(attrs, node)
|
159
164
|
xml.annex **attr_code(attrs) do |xml_section|
|
160
165
|
xml_section.title { |name| name << node.title }
|
@@ -180,11 +185,24 @@ module Asciidoctor
|
|
180
185
|
|
181
186
|
def acknowledgements_parse(attrs, xml, node)
|
182
187
|
xml.acknowledgements **attr_code(attrs) do |xml_section|
|
183
|
-
xml_section.title { |t| t << node.title || @i18n.acknowledgements }
|
188
|
+
xml_section.title { |t| (t << node.title) || @i18n.acknowledgements }
|
184
189
|
content = node.content
|
185
190
|
xml_section << content
|
186
191
|
end
|
187
192
|
end
|
193
|
+
|
194
|
+
def floating_title_attrs(node)
|
195
|
+
attr_code(id_attr(node).merge(align: node.attr("align"),
|
196
|
+
type: "floating-title"))
|
197
|
+
end
|
198
|
+
|
199
|
+
def floating_title(node)
|
200
|
+
noko do |xml|
|
201
|
+
xml.p **floating_title_attrs(node) do |xml_t|
|
202
|
+
xml_t << node.title
|
203
|
+
end
|
204
|
+
end.join("\n")
|
205
|
+
end
|
188
206
|
end
|
189
207
|
end
|
190
208
|
end
|
@@ -105,8 +105,14 @@ module Asciidoctor
|
|
105
105
|
else
|
106
106
|
attrs = term_source_attrs(node, seen_xref)
|
107
107
|
attrs.delete(:text)
|
108
|
-
xml_t.origin
|
108
|
+
xml_t.origin **attr_code(attrs) do |o|
|
109
|
+
o << seen_xref.children[0].children.to_xml
|
110
|
+
end
|
109
111
|
end
|
112
|
+
add_term_source_mod(xml_t, match)
|
113
|
+
end
|
114
|
+
|
115
|
+
def add_term_source_mod(xml_t, match)
|
110
116
|
match[:text] && xml_t.modification do |mod|
|
111
117
|
mod.p { |p| p << match[:text].sub(/^\s+/, "") }
|
112
118
|
end
|
@@ -64,22 +64,6 @@ module Asciidoctor
|
|
64
64
|
conv
|
65
65
|
end
|
66
66
|
|
67
|
-
def default_script(lang)
|
68
|
-
case lang
|
69
|
-
when "ar", "fa" then "Arab"
|
70
|
-
when "ur" then "Aran"
|
71
|
-
when "ru", "bg" then "Cyrl"
|
72
|
-
when "hi" then "Deva"
|
73
|
-
when "el" then "Grek"
|
74
|
-
when "zh" then "Hans"
|
75
|
-
when "ko" then "Kore"
|
76
|
-
when "he" then "Hebr"
|
77
|
-
when "ja" then "Jpan"
|
78
|
-
else
|
79
|
-
"Latn"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
67
|
def dl_to_attrs(elem, dlist, name)
|
84
68
|
e = dlist.at("./dt[text()='#{name}']") or return
|
85
69
|
val = e.at("./following::dd/p") || e.at("./following::dd") or return
|
@@ -112,7 +112,7 @@ module Asciidoctor
|
|
112
112
|
def schema_validate1(file, doc, schema)
|
113
113
|
file.write(doc.to_xml)
|
114
114
|
file.close
|
115
|
-
errors = Jing.new(schema).validate(file.path)
|
115
|
+
errors = Jing.new(schema, encoding: "UTF-8").validate(file.path)
|
116
116
|
warn "Syntax Valid!" if errors.none?
|
117
117
|
errors.each do |e|
|
118
118
|
@log.add("Metanorma XML Syntax",
|