metanorma-unece 0.0.14 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +12 -10
- data/appveyor.yml +7 -2
- data/lib/asciidoctor/unece/biblio.rng +44 -15
- data/lib/asciidoctor/unece/converter.rb +14 -8
- data/lib/asciidoctor/unece/isodoc.rng +128 -71
- data/lib/asciidoctor/unece/isostandard.rng +29 -304
- data/lib/asciidoctor/unece/reqt.rng +5 -0
- data/lib/asciidoctor/unece/unece.rng +11 -83
- data/lib/asciidoctor/unece/validate.rb +22 -0
- data/lib/isodoc/unece/base_convert.rb +215 -0
- data/lib/isodoc/unece/html/html_unece_plenary_titlepage.html +3 -3
- data/lib/isodoc/unece/html/html_unece_titlepage.html +3 -3
- data/lib/isodoc/unece/html_convert.rb +5 -206
- data/lib/isodoc/unece/metadata.rb +12 -17
- data/lib/isodoc/unece/word_convert.rb +87 -291
- data/lib/metanorma/unece/version.rb +1 -1
- data/metanorma-unece.gemspec +3 -3
- metadata +10 -22
@@ -8,7 +8,6 @@ module IsoDoc
|
|
8
8
|
class Metadata < IsoDoc::Metadata
|
9
9
|
def initialize(lang, script, labels)
|
10
10
|
super
|
11
|
-
set(:status, "XXX")
|
12
11
|
end
|
13
12
|
|
14
13
|
def title(isoxml, _out)
|
@@ -31,12 +30,12 @@ module IsoDoc
|
|
31
30
|
end
|
32
31
|
|
33
32
|
def author(isoxml, _out)
|
34
|
-
tc = isoxml.at(ns("//bibdata/editorialgroup/committee"))
|
33
|
+
tc = isoxml.at(ns("//bibdata/ext/editorialgroup/committee"))
|
35
34
|
set(:tc, tc.text) if tc
|
36
|
-
set(:distribution, isoxml&.at(ns("//bibdata/distribution"))&.text)
|
35
|
+
set(:distribution, isoxml&.at(ns("//bibdata/ext/distribution"))&.text)
|
37
36
|
lgs = extract_languages(isoxml.xpath(ns("//bibdata/language")))
|
38
37
|
lgs = [] if lgs.sort == %w(English French Arabic Chinese German Spanish).sort
|
39
|
-
slgs = extract_languages(isoxml.xpath(ns("//bibdata/submissionlanguage")))
|
38
|
+
slgs = extract_languages(isoxml.xpath(ns("//bibdata/ext/submissionlanguage")))
|
40
39
|
lgs = [] if slgs.size == 1
|
41
40
|
set(:language, lgs) unless lgs.empty?
|
42
41
|
set(:submissionlanguage, slgs) unless slgs.empty?
|
@@ -50,28 +49,24 @@ module IsoDoc
|
|
50
49
|
end
|
51
50
|
|
52
51
|
def session(isoxml, _out)
|
53
|
-
set(:session_number, isoxml&.at(ns("//bibdata/session/number"))&.text&.to_i&.
|
52
|
+
set(:session_number, isoxml&.at(ns("//bibdata/ext/session/number"))&.text&.to_i&.
|
54
53
|
localize&.to_rbnf_s("SpelloutRules", "spellout-ordinal")&.capitalize)
|
55
|
-
set(:session_date, isoxml&.at(ns("//bibdata/session/date"))&.text)
|
56
|
-
set(:session_collaborator, isoxml&.at(ns("//bibdata/session/collaborator"))&.text)
|
57
|
-
set(:session_id, isoxml&.at(ns("//bibdata/session/id"))&.text)
|
58
|
-
set(:item_footnote, isoxml&.at(ns("//bibdata/session/item-footnote"))&.text)
|
59
|
-
set(:session_itemnumber, multival(isoxml, "//bibdata/session/item-number"))
|
60
|
-
set(:session_itemname, multival(isoxml, "//bibdata/session/item-name"))
|
61
|
-
set(:session_subitemname, multival(isoxml, "//bibdata/session/subitem-name"))
|
54
|
+
set(:session_date, isoxml&.at(ns("//bibdata/ext/session/date"))&.text)
|
55
|
+
set(:session_collaborator, isoxml&.at(ns("//bibdata/ext/session/collaborator"))&.text)
|
56
|
+
set(:session_id, isoxml&.at(ns("//bibdata/ext/session/id"))&.text)
|
57
|
+
set(:item_footnote, isoxml&.at(ns("//bibdata/ext/session/item-footnote"))&.text)
|
58
|
+
set(:session_itemnumber, multival(isoxml, "//bibdata/ext/session/item-number"))
|
59
|
+
set(:session_itemname, multival(isoxml, "//bibdata/ext/session/item-name"))
|
60
|
+
set(:session_subitemname, multival(isoxml, "//bibdata/ext/session/subitem-name"))
|
62
61
|
end
|
63
62
|
|
64
63
|
def docid(isoxml, _out)
|
65
64
|
dn = isoxml.at(ns("//bibdata/docidentifier"))&.text
|
66
65
|
set(:docnumber, dn)
|
67
|
-
type = isoxml&.at(ns("//bibdata
|
66
|
+
type = isoxml&.at(ns("//bibdata/ext/doctype"))&.text
|
68
67
|
set(:formatted_docnumber, type == "recommendation" ? "UN/CEFACT Recommendation #{dn}" : dn)
|
69
68
|
end
|
70
69
|
|
71
|
-
def status_print(status)
|
72
|
-
status.split(/-/).map{ |w| w.capitalize }.join(" ")
|
73
|
-
end
|
74
|
-
|
75
70
|
def status_abbr(status)
|
76
71
|
case status
|
77
72
|
when "working-draft" then "wd"
|
@@ -1,7 +1,5 @@
|
|
1
|
+
require_relative "base_convert"
|
1
2
|
require "isodoc"
|
2
|
-
require_relative "metadata"
|
3
|
-
require "fileutils"
|
4
|
-
require "roman-numerals"
|
5
3
|
|
6
4
|
module IsoDoc
|
7
5
|
module Unece
|
@@ -40,11 +38,6 @@ module IsoDoc
|
|
40
38
|
}
|
41
39
|
end
|
42
40
|
|
43
|
-
def metadata_init(lang, script, labels)
|
44
|
-
@meta = Metadata.new(lang, script, labels)
|
45
|
-
@meta.set(:toc, @toc)
|
46
|
-
end
|
47
|
-
|
48
41
|
def footnotes(div)
|
49
42
|
if @meta.get[:item_footnote]
|
50
43
|
fn = noko do |xml|
|
@@ -57,319 +50,122 @@ module IsoDoc
|
|
57
50
|
super
|
58
51
|
end
|
59
52
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
53
|
+
def make_body(xml, docxml)
|
54
|
+
plenary = docxml.at(ns("//bibdata/ext[doctype = 'plenary']"))
|
55
|
+
if plenary && @wordcoverpage == html_doc_path("word_unece_titlepage.html")
|
56
|
+
@wordcoverpage = html_doc_path("word_unece_plenary_titlepage.html")
|
57
|
+
end
|
58
|
+
@wordintropage = nil if plenary && !@toc
|
59
|
+
body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72" }
|
60
|
+
xml.body **body_attr do |body|
|
61
|
+
make_body1(body, docxml)
|
62
|
+
make_body2(body, docxml)
|
63
|
+
make_body3(body, docxml)
|
64
|
+
end
|
71
65
|
end
|
72
|
-
end
|
73
66
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
67
|
+
def make_body2(body, docxml)
|
68
|
+
body.div **{ class: "WordSection2" } do |div2|
|
69
|
+
info docxml, div2
|
70
|
+
abstract docxml, div2
|
71
|
+
foreword docxml, div2
|
72
|
+
introduction docxml, div2
|
73
|
+
div2.p { |p| p << " " } # placeholder
|
74
|
+
end
|
75
|
+
section_break(body)
|
81
76
|
end
|
82
|
-
section_break(body)
|
83
|
-
end
|
84
77
|
|
85
|
-
|
78
|
+
ENDLINE = <<~END.freeze
|
86
79
|
<v:line id="_x0000_s1026"
|
87
80
|
alt="" style='position:absolute;left:0;text-align:left;z-index:251662848;
|
88
81
|
mso-wrap-edited:f;mso-width-percent:0;mso-height-percent:0;
|
89
82
|
mso-width-percent:0;mso-height-percent:0'
|
90
83
|
from="6.375cm,20.95pt" to="10.625cm,20.95pt"
|
91
84
|
strokeweight="1.5pt"/>
|
92
|
-
|
85
|
+
END
|
93
86
|
|
94
|
-
|
95
|
-
|
96
|
-
end
|
97
|
-
|
98
|
-
def middle(isoxml, out)
|
99
|
-
clause isoxml, out
|
100
|
-
annex isoxml, out
|
101
|
-
bibliography isoxml, out
|
102
|
-
end_line(isoxml, out)
|
103
|
-
end
|
104
|
-
|
105
|
-
def clause_parse_title(node, div, c1, out)
|
106
|
-
if node["inline-header"] == "true"
|
107
|
-
inline_header_title(out, node, c1)
|
108
|
-
else
|
109
|
-
div.send "h#{get_anchors[node['id']][:level]}" do |h|
|
110
|
-
lbl = get_anchors[node['id']][:label]
|
111
|
-
h << "#{lbl}. " if lbl && !@suppressheadingnumbers
|
112
|
-
insert_tab(h, 1)
|
113
|
-
c1&.children&.each { |c2| parse(c2, h) }
|
114
|
-
end
|
87
|
+
def end_line(_isoxml, out)
|
88
|
+
out.parent.add_child(ENDLINE)
|
115
89
|
end
|
116
|
-
end
|
117
90
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
h1 << @introduction_lbl
|
124
|
-
end
|
125
|
-
f.elements.each do |e|
|
126
|
-
parse(e, div) unless e.name == "title"
|
127
|
-
end
|
91
|
+
def middle(isoxml, out)
|
92
|
+
clause isoxml, out
|
93
|
+
annex isoxml, out
|
94
|
+
bibliography isoxml, out
|
95
|
+
end_line(isoxml, out)
|
128
96
|
end
|
129
|
-
end
|
130
97
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
98
|
+
def clause_parse_title(node, div, c1, out)
|
99
|
+
if node["inline-header"] == "true"
|
100
|
+
inline_header_title(out, node, c1)
|
101
|
+
else
|
102
|
+
div.send "h#{anchor(node['id'], :level) || '1'}" do |h|
|
103
|
+
lbl = anchor(node['id'], :label, false)
|
104
|
+
h << "#{lbl}. " if lbl && !@suppressheadingnumbers
|
105
|
+
insert_tab(h, 1)
|
106
|
+
c1&.children&.each { |c2| parse(c2, h) }
|
107
|
+
end
|
137
108
|
end
|
138
|
-
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def word_preface(docxml)
|
143
|
-
super
|
144
|
-
preface_container = docxml.at("//div[@id = 'preface_container']") # recommendation
|
145
|
-
abstractbox = docxml.at("//div[@id = 'abstractbox']") # plenary
|
146
|
-
foreword = docxml.at("//p[@class = 'ForewordTitle']/..")
|
147
|
-
intro = docxml.at("//p[@class = 'IntroTitle']/..")
|
148
|
-
abstract = docxml.at("//p[@class = 'AbstractTitle']/..")
|
149
|
-
abstract.parent = (abstractbox || preface_container) if abstract
|
150
|
-
abstractbox and abstract&.xpath(".//p/br")&.each do |a|
|
151
|
-
a.parent.remove if /page-break-before:always/.match(a["style"])
|
152
|
-
end
|
153
|
-
docxml&.at("//p[@class = 'AbstractTitle']")&.remove if abstractbox
|
154
|
-
foreword.parent = preface_container if foreword && preface_container
|
155
|
-
intro.parent = preface_container if intro && preface_container
|
156
|
-
if preface_container && (foreword || intro)
|
157
|
-
preface_container.at("./div/p[br]").remove # remove initial page break
|
158
109
|
end
|
159
|
-
if abstractbox && !intro && !foreword && !@toc
|
160
|
-
sect2 = docxml.at("//div[@class='WordSection2']")
|
161
|
-
sect2.next_element.remove # pagebreak
|
162
|
-
sect2.remove # pagebreak
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
# SAME as html_convert.rb from here on, starting with annex_name
|
167
110
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
111
|
+
def introduction(isoxml, out)
|
112
|
+
f = isoxml.at(ns("//introduction")) || return
|
113
|
+
out.div **{ class: "Section3", id: f["id"] } do |div|
|
114
|
+
page_break(out)
|
115
|
+
div.p(**{ class: "IntroTitle" }) do |h1|
|
116
|
+
h1 << @introduction_lbl
|
117
|
+
end
|
118
|
+
f.elements.each do |e|
|
119
|
+
parse(e, div) unless e.name == "title"
|
120
|
+
end
|
174
121
|
end
|
175
122
|
end
|
176
|
-
end
|
177
|
-
|
178
|
-
def i18n_init(lang, script)
|
179
|
-
super
|
180
|
-
@admonition_lbl = "Box"
|
181
|
-
@abstract_lbl = "Summary"
|
182
|
-
end
|
183
|
-
|
184
|
-
def fileloc(loc)
|
185
|
-
File.join(File.dirname(__FILE__), loc)
|
186
|
-
end
|
187
|
-
|
188
|
-
MIDDLE_CLAUSE = "//clause[parent::sections]".freeze
|
189
|
-
|
190
|
-
def initial_anchor_names(d)
|
191
|
-
preface_names(d.at(ns("//foreword")))
|
192
|
-
preface_names(d.at(ns("//introduction")))
|
193
|
-
sequential_asset_names(d.xpath(ns("//foreword | //introduction")))
|
194
|
-
middle_section_asset_names(d)
|
195
|
-
clause_names(d, 0)
|
196
|
-
termnote_anchor_names(d)
|
197
|
-
termexample_anchor_names(d)
|
198
|
-
end
|
199
|
-
|
200
|
-
def clause_names(docxml, sect_num)
|
201
|
-
q = "//clause[parent::sections]"
|
202
|
-
@paranumber = 0
|
203
|
-
docxml.xpath(ns(q)).each_with_index do |c, i|
|
204
|
-
section_names(c, (i + sect_num), 1)
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
def levelnumber(num, lvl)
|
209
|
-
case lvl % 3
|
210
|
-
when 1 then RomanNumerals.to_roman(num)
|
211
|
-
when 2 then ("A".ord + num - 1).chr
|
212
|
-
when 0 then num.to_s
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
def annex_levelnumber(num, lvl)
|
217
|
-
case lvl % 3
|
218
|
-
when 0 then RomanNumerals.to_roman(num)
|
219
|
-
when 1 then ("A".ord + num - 1).chr
|
220
|
-
when 2 then num.to_s
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
def leaf_section(clause, lvl)
|
225
|
-
@paranumber += 1
|
226
|
-
@anchors[clause["id"]] = {label: @paranumber.to_s, xref: "paragraph #{@paranumber}", level: lvl, type: "paragraph" }
|
227
|
-
end
|
228
|
-
|
229
|
-
def annex_leaf_section(clause, num, lvl)
|
230
|
-
@paranumber += 1
|
231
|
-
@anchors[clause["id"]] = {label: @paranumber.to_s, xref: "paragraph #{num}.#{@paranumber}", level: lvl, type: "paragraph" }
|
232
|
-
end
|
233
|
-
|
234
|
-
def section_names(clause, num, lvl)
|
235
|
-
return num if clause.nil?
|
236
|
-
clause.at(ns("./clause | ./term | ./terms | ./definitions")) or
|
237
|
-
leaf_section(clause, lvl) && return
|
238
|
-
num = num + 1
|
239
|
-
lbl = levelnumber(num, 1)
|
240
|
-
@anchors[clause["id"]] =
|
241
|
-
{ label: lbl, xref: l10n("#{@clause_lbl} #{lbl}"), level: lvl, type: "clause" }
|
242
|
-
i = 1
|
243
|
-
clause.xpath(ns("./clause | ./term | ./terms | ./definitions")).each do |c|
|
244
|
-
section_names1(c, "#{lbl}.#{levelnumber(i, lvl + 1)}", lvl + 1)
|
245
|
-
i += 1 if c.at(ns("./clause | ./term | ./terms | ./definitions"))
|
246
|
-
end
|
247
|
-
num
|
248
|
-
end
|
249
|
-
|
250
|
-
def section_names1(clause, num, level)
|
251
|
-
unless clause.at(ns("./clause | ./term | ./terms | ./definitions"))
|
252
|
-
leaf_section(clause, level) and return
|
253
|
-
end
|
254
|
-
/\.(?<leafnum>[^.]+$)/ =~ num
|
255
|
-
@anchors[clause["id"]] =
|
256
|
-
{ label: leafnum, level: level, xref: l10n("#{@clause_lbl} #{num}"), type: "clause" }
|
257
|
-
i = 1
|
258
|
-
clause.xpath(ns("./clause | ./terms | ./term | ./definitions")).each do |c|
|
259
|
-
section_names1(c, "#{num}.#{levelnumber(i, level + 1)}", level + 1)
|
260
|
-
i += 1 if c.at(ns("./clause | ./term | ./terms | ./definitions"))
|
261
|
-
end
|
262
|
-
end
|
263
|
-
|
264
|
-
def annex_name_lbl(clause, num)
|
265
|
-
l10n("<b>#{@annex_lbl} #{num}</b>")
|
266
|
-
end
|
267
|
-
|
268
|
-
def annex_names(clause, num)
|
269
|
-
hierarchical_asset_names(clause, num)
|
270
|
-
unless clause.at(ns("./clause | ./term | ./terms | ./definitions"))
|
271
|
-
annex_leaf_section(clause, num, 1) and return
|
272
|
-
end
|
273
|
-
@anchors[clause["id"]] = { label: annex_name_lbl(clause, num), type: "clause",
|
274
|
-
xref: "#{@annex_lbl} #{num}", level: 1 }
|
275
|
-
i = 1
|
276
|
-
clause.xpath(ns("./clause")).each do |c|
|
277
|
-
annex_names1(c, "#{num}.#{annex_levelnumber(i, 2)}", 2)
|
278
|
-
i += 1 if c.at(ns("./clause | ./term | ./terms | ./definitions"))
|
279
|
-
end
|
280
|
-
end
|
281
|
-
|
282
|
-
def annex_names1(clause, num, level)
|
283
|
-
unless clause.at(ns("./clause | ./term | ./terms | ./definitions"))
|
284
|
-
annex_leaf_section(clause, num, level) and return
|
285
|
-
end
|
286
|
-
/\.(?<leafnum>[^.]+$)/ =~ num
|
287
|
-
@anchors[clause["id"]] = { label: leafnum, xref: "#{@annex_lbl} #{num}",
|
288
|
-
level: level, type: "clause" }
|
289
|
-
i = 1
|
290
|
-
clause.xpath(ns("./clause")).each do |c|
|
291
|
-
annex_names1(c, "#{num}.#{annex_levelnumber(i, level + 1)}", level + 1)
|
292
|
-
i += 1 if c.at(ns("./clause | ./term | ./terms | ./definitions"))
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
def back_anchor_names(docxml)
|
297
|
-
docxml.xpath(ns("//annex")).each_with_index do |c, i|
|
298
|
-
@paranumber = 0
|
299
|
-
annex_names(c, RomanNumerals.to_roman(i + 1))
|
300
|
-
end
|
301
|
-
docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
|
302
|
-
reference_names(ref)
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
|
-
def sequential_admonition_names(clause)
|
307
|
-
i = 0
|
308
|
-
clause.xpath(ns(".//admonition")).each do |t|
|
309
|
-
i += 1
|
310
|
-
next if t["id"].nil? || t["id"].empty?
|
311
|
-
@anchors[t["id"]] = anchor_struct(i.to_s, nil, @admonition_lbl, "box")
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
def hierarchical_admonition_names(clause, num)
|
316
|
-
i = 0
|
317
|
-
clause.xpath(ns(".//admonition")).each do |t|
|
318
|
-
i += 1
|
319
|
-
next if t["id"].nil? || t["id"].empty?
|
320
|
-
@anchors[t["id"]] = anchor_struct("#{num}.#{i}", nil, @admonition_lbl, "box")
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
def sequential_asset_names(clause)
|
325
|
-
super
|
326
|
-
sequential_admonition_names(clause)
|
327
|
-
end
|
328
123
|
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
if name
|
338
|
-
p << " — "
|
339
|
-
name.children.each { |n| parse(n, div) }
|
124
|
+
def foreword(isoxml, out)
|
125
|
+
f = isoxml.at(ns("//foreword")) || return
|
126
|
+
out.div **attr_code(id: f["id"]) do |s|
|
127
|
+
page_break(out)
|
128
|
+
s.p(**{ class: "ForewordTitle" }) do |h1|
|
129
|
+
h1 << @foreword_lbl
|
130
|
+
end
|
131
|
+
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
340
132
|
end
|
341
133
|
end
|
342
|
-
end
|
343
134
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
135
|
+
def word_preface(docxml)
|
136
|
+
super
|
137
|
+
preface_container = docxml.at("//div[@id = 'preface_container']") # recommendation
|
138
|
+
abstractbox = docxml.at("//div[@id = 'abstractbox']") # plenary
|
139
|
+
foreword = docxml.at("//p[@class = 'ForewordTitle']/..")
|
140
|
+
intro = docxml.at("//p[@class = 'IntroTitle']/..")
|
141
|
+
abstract = docxml.at("//p[@class = 'AbstractTitle']/..")
|
142
|
+
abstract.parent = (abstractbox || preface_container) if abstract
|
143
|
+
abstractbox and abstract&.xpath(".//p/br")&.each do |a|
|
144
|
+
a.parent.remove if /page-break-before:always/.match(a["style"])
|
145
|
+
end
|
146
|
+
docxml&.at("//p[@class = 'AbstractTitle']")&.remove if abstractbox
|
147
|
+
foreword.parent = preface_container if foreword && preface_container
|
148
|
+
intro.parent = preface_container if intro && preface_container
|
149
|
+
if preface_container && (foreword || intro)
|
150
|
+
preface_container.at("./div/p[br]").remove # remove initial page break
|
151
|
+
end
|
152
|
+
if abstractbox && !intro && !foreword && !@toc
|
153
|
+
sect2 = docxml.at("//div[@class='WordSection2']")
|
154
|
+
sect2.next_element.remove # pagebreak
|
155
|
+
sect2.remove # pagebreak
|
350
156
|
end
|
351
157
|
end
|
352
|
-
end
|
353
158
|
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
s
|
359
|
-
|
159
|
+
def abstract(isoxml, out)
|
160
|
+
f = isoxml.at(ns("//abstract")) || return
|
161
|
+
out.div **attr_code(id: f["id"]) do |s|
|
162
|
+
page_break(out)
|
163
|
+
s.p(**{ class: "AbstractTitle" }) { |h1| h1 << @abstract_lbl }
|
164
|
+
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
360
165
|
end
|
361
|
-
s << "#{title} "
|
362
166
|
end
|
363
|
-
end
|
364
167
|
|
365
|
-
|
366
|
-
f = isoxml.at(ns("//abstract")) || return
|
367
|
-
out.div **attr_code(id: f["id"]) do |s|
|
368
|
-
page_break(out)
|
369
|
-
s.p(**{ class: "AbstractTitle" }) { |h1| h1 << @abstract_lbl }
|
370
|
-
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
371
|
-
end
|
168
|
+
include BaseConvert
|
372
169
|
end
|
373
170
|
end
|
374
171
|
end
|
375
|
-
end
|