metanorma-mpfd 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.hound.yml +3 -0
- data/.rubocop.yml +10 -0
- data/README.adoc +302 -1
- data/lib/asciidoctor/mpfd/biblio.rng +60 -6
- data/lib/asciidoctor/mpfd/converter.rb +1 -19
- data/lib/asciidoctor/mpfd/isodoc.rng +54 -26
- data/lib/asciidoctor/mpfd/isostandard.rng +6 -0
- data/lib/asciidoctor/mpfd/mpfd.rng +35 -20
- data/lib/asciidoctor/mpfd/section.rb +16 -19
- data/lib/isodoc/mpfd/html/htmlstyle.scss +1 -1
- data/lib/isodoc/mpfd/html/word_rsd_titlepage.html +1 -1
- data/lib/isodoc/mpfd/html_convert.rb +13 -30
- data/lib/isodoc/mpfd/i18n-en.yaml +1 -0
- data/lib/isodoc/mpfd/i18n-zh-Hans.yaml +2 -0
- data/lib/isodoc/mpfd/metadata.rb +1 -25
- data/lib/isodoc/mpfd/pdf_convert.rb +12 -22
- data/lib/isodoc/mpfd/word_convert.rb +11 -92
- data/lib/metanorma/mpfd/version.rb +1 -1
- metadata +5 -2
@@ -84,6 +84,9 @@
|
|
84
84
|
<zeroOrMore>
|
85
85
|
<ref name="docidentifier"/>
|
86
86
|
</zeroOrMore>
|
87
|
+
<optional>
|
88
|
+
<ref name="docnumber"/>
|
89
|
+
</optional>
|
87
90
|
<zeroOrMore>
|
88
91
|
<ref name="bdate"/>
|
89
92
|
</zeroOrMore>
|
@@ -163,6 +166,9 @@
|
|
163
166
|
<zeroOrMore>
|
164
167
|
<ref name="docidentifier"/>
|
165
168
|
</zeroOrMore>
|
169
|
+
<optional>
|
170
|
+
<ref name="docnumber"/>
|
171
|
+
</optional>
|
166
172
|
<zeroOrMore>
|
167
173
|
<ref name="bdate"/>
|
168
174
|
</zeroOrMore>
|
@@ -16,6 +16,9 @@
|
|
16
16
|
</define>
|
17
17
|
<define name="docidentifier">
|
18
18
|
<element name="docidentifier">
|
19
|
+
<optional>
|
20
|
+
<attribute name="type"/>
|
21
|
+
</optional>
|
19
22
|
<text/>
|
20
23
|
</element>
|
21
24
|
</define>
|
@@ -29,30 +32,38 @@
|
|
29
32
|
<attribute name="id">
|
30
33
|
<data type="ID"/>
|
31
34
|
</attribute>
|
32
|
-
<optional>
|
33
|
-
<ref name="source"/>
|
34
|
-
</optional>
|
35
35
|
<optional>
|
36
36
|
<ref name="tname"/>
|
37
37
|
</optional>
|
38
38
|
<choice>
|
39
|
+
<ref name="image"/>
|
40
|
+
<ref name="pre"/>
|
39
41
|
<oneOrMore>
|
40
|
-
<ref name="
|
42
|
+
<ref name="subfigure"/>
|
41
43
|
</oneOrMore>
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
44
|
+
</choice>
|
45
|
+
<zeroOrMore>
|
46
|
+
<ref name="fn"/>
|
47
|
+
</zeroOrMore>
|
48
|
+
<optional>
|
49
|
+
<ref name="dl"/>
|
50
|
+
</optional>
|
51
|
+
<zeroOrMore>
|
52
|
+
<ref name="note"/>
|
53
|
+
</zeroOrMore>
|
54
|
+
</element>
|
55
|
+
</define>
|
56
|
+
<define name="subfigure">
|
57
|
+
<element name="figure">
|
58
|
+
<attribute name="id">
|
59
|
+
<data type="ID"/>
|
60
|
+
</attribute>
|
61
|
+
<optional>
|
62
|
+
<ref name="tname"/>
|
63
|
+
</optional>
|
64
|
+
<choice>
|
65
|
+
<ref name="image"/>
|
66
|
+
<ref name="pre"/>
|
56
67
|
</choice>
|
57
68
|
</element>
|
58
69
|
</define>
|
@@ -96,7 +107,6 @@
|
|
96
107
|
<choice>
|
97
108
|
<value>policy-and-procedures</value>
|
98
109
|
<value>best-practices</value>
|
99
|
-
<value>circular</value>
|
100
110
|
<value>supporting-document</value>
|
101
111
|
<value>report</value>
|
102
112
|
<value>legal</value>
|
@@ -107,7 +117,9 @@
|
|
107
117
|
</define>
|
108
118
|
<define name="editorialgroup">
|
109
119
|
<element name="editorialgroup">
|
110
|
-
<
|
120
|
+
<oneOrMore>
|
121
|
+
<ref name="committee"/>
|
122
|
+
</oneOrMore>
|
111
123
|
</element>
|
112
124
|
</define>
|
113
125
|
<define name="BibData">
|
@@ -128,6 +140,9 @@
|
|
128
140
|
<zeroOrMore>
|
129
141
|
<ref name="docidentifier"/>
|
130
142
|
</zeroOrMore>
|
143
|
+
<optional>
|
144
|
+
<ref name="docnumber"/>
|
145
|
+
</optional>
|
131
146
|
<zeroOrMore>
|
132
147
|
<ref name="bdate"/>
|
133
148
|
</zeroOrMore>
|
@@ -17,8 +17,7 @@ module Asciidoctor
|
|
17
17
|
x.xpath("//*[@inline-header]").each do |h|
|
18
18
|
h.delete("inline-header")
|
19
19
|
end
|
20
|
-
x.xpath("
|
21
|
-
require "byebug"; byebug
|
20
|
+
x.xpath("//*[@guidance]").each do |h|
|
22
21
|
c = h.previous_element || next
|
23
22
|
c.add_child h.remove
|
24
23
|
end
|
@@ -28,11 +27,7 @@ module Asciidoctor
|
|
28
27
|
a = { id: Asciidoctor::Standoc::Utils::anchor_or_uuid(node) }
|
29
28
|
noko do |xml|
|
30
29
|
case sectiontype(node)
|
31
|
-
when "introduction" then
|
32
|
-
if node.level == 1 then introduction_parse(a, xml, node)
|
33
|
-
else
|
34
|
-
clause_parse(a, xml, node)
|
35
|
-
end
|
30
|
+
when "introduction" then introduction_parse(a, xml, node)
|
36
31
|
when "terms and definitions",
|
37
32
|
"terms, definitions, symbols and abbreviated terms",
|
38
33
|
"terms, definitions, symbols and abbreviations",
|
@@ -54,8 +49,6 @@ module Asciidoctor
|
|
54
49
|
bibliography_parse(a, xml, node)
|
55
50
|
elsif node.attr("style") == "appendix" && node.level == 1
|
56
51
|
annex_parse(a, xml, node)
|
57
|
-
elsif node.option? "appendix"
|
58
|
-
appendix_parse(a, xml, node)
|
59
52
|
else
|
60
53
|
clause_parse(a, xml, node)
|
61
54
|
end
|
@@ -67,22 +60,26 @@ module Asciidoctor
|
|
67
60
|
return node.title
|
68
61
|
end
|
69
62
|
|
70
|
-
def
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
terms = x.at("//terms")
|
78
|
-
preface.add_child terms.remove if terms
|
79
|
-
end
|
63
|
+
def move_sections_into_preface(x, preface)
|
64
|
+
foreword = x.at("//foreword")
|
65
|
+
preface.add_child foreword.remove if foreword
|
66
|
+
introduction = x.at("//introduction")
|
67
|
+
preface.add_child introduction.remove if introduction
|
68
|
+
terms = x.at("//sections/clause[descendant::terms]") || x.at("//terms")
|
69
|
+
preface.add_child terms.remove if terms
|
80
70
|
x.xpath("//clause[@preface]").each do |c|
|
81
71
|
c.delete("preface")
|
82
72
|
preface.add_child c.remove
|
83
73
|
end
|
84
74
|
end
|
85
75
|
|
76
|
+
def make_preface(x, s)
|
77
|
+
if x.at("//foreword | //introduction | //terms | //clause[@preface]")
|
78
|
+
preface = s.add_previous_sibling("<preface/>").first
|
79
|
+
move_sections_into_preface(x, preface)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
86
83
|
def clause_parse(attrs, xml, node)
|
87
84
|
attrs[:preface] = true if node.attr("style") == "preface"
|
88
85
|
attrs[:guidance] = true if node.role == "guidance"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{% if docnumber %}
|
2
2
|
<p class="MsoNormal" align="right" style='text-align:right'><b style='mso-bidi-font-weight:
|
3
|
-
normal'><span lang="EN-GB" style='font-size:14.0pt;mso-no-proof:yes'>{{ docnumber }}
|
3
|
+
normal'><span lang="EN-GB" style='font-size:14.0pt;mso-no-proof:yes'>{{ docnumber }} {{ draftinfo }}</span></b><b
|
4
4
|
style='mso-bidi-font-weight:normal'><span lang="EN-GB" style='font-size:14.0pt'><o:p></o:p></span></b></p>
|
5
5
|
{% endif %}
|
6
6
|
|
@@ -84,14 +84,6 @@ module IsoDoc
|
|
84
84
|
out.pre node.text # content.gsub(/</, "<").gsub(/>/, ">")
|
85
85
|
end
|
86
86
|
|
87
|
-
def term_defs_boilerplate(div, source, term, preface)
|
88
|
-
if source.empty? && term.nil?
|
89
|
-
div << @no_terms_boilerplate
|
90
|
-
else
|
91
|
-
div << term_defs_boilerplate_cont(source, term)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
87
|
def error_parse(node, out)
|
96
88
|
# catch elements not defined in ISO
|
97
89
|
case node.name
|
@@ -108,11 +100,6 @@ module IsoDoc
|
|
108
100
|
File.join(File.dirname(__FILE__), loc)
|
109
101
|
end
|
110
102
|
|
111
|
-
def info(isoxml, out)
|
112
|
-
@meta.security isoxml, out
|
113
|
-
super
|
114
|
-
end
|
115
|
-
|
116
103
|
def i18n_init(lang, script)
|
117
104
|
super
|
118
105
|
y = if lang == "en"
|
@@ -121,10 +108,10 @@ module IsoDoc
|
|
121
108
|
YAML.load_file(File.join(File.dirname(__FILE__),
|
122
109
|
"i18n-zh-Hans.yaml"))
|
123
110
|
else
|
124
|
-
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-
|
111
|
+
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-en.yaml"))
|
125
112
|
end
|
126
|
-
@annex_lbl = "Appendix"
|
127
113
|
@labels = @labels.merge(y)
|
114
|
+
@annex_lbl = y["annex"]
|
128
115
|
@clause_lbl = y["clause"]
|
129
116
|
end
|
130
117
|
|
@@ -135,6 +122,11 @@ module IsoDoc
|
|
135
122
|
TERM_CLAUSE = "//preface/terms | "\
|
136
123
|
"//preface/clause[descendant::terms]".freeze
|
137
124
|
|
125
|
+
SECTIONS_XPATH =
|
126
|
+
"//foreword | //introduction | //preface/terms | //preface/clause | //annex | "\
|
127
|
+
"//sections/clause | //bibliography/references | "\
|
128
|
+
"//bibliography/clause".freeze
|
129
|
+
|
138
130
|
def terms_defs(isoxml, out, num)
|
139
131
|
f = isoxml.at(ns(TERM_CLAUSE)) or return num
|
140
132
|
out.div **attr_code(id: f["id"]) do |div|
|
@@ -150,7 +142,7 @@ module IsoDoc
|
|
150
142
|
|
151
143
|
def preface(isoxml, out)
|
152
144
|
isoxml.xpath(ns(FRONT_CLAUSE)).each do |c|
|
153
|
-
if c.name == "terms" then
|
145
|
+
if c.name == "terms" || c.at(ns(".//terms")) then terms_defs isoxml, out, 0
|
154
146
|
else
|
155
147
|
out.div **attr_code(id: c["id"]) do |s|
|
156
148
|
clause_name(get_anchors[c['id']][:label],
|
@@ -199,14 +191,6 @@ module IsoDoc
|
|
199
191
|
l10n("<b>#{@annex_lbl} #{num}</b>")
|
200
192
|
end
|
201
193
|
|
202
|
-
def xclause_names(docxml, _sect_num)
|
203
|
-
q = "//clause[parent::sections]"
|
204
|
-
@topnum = nil
|
205
|
-
docxml.xpath(ns(q)).each do |c|
|
206
|
-
section_names(c, @topnum, 1)
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
194
|
def clause_names(docxml, sect_num)
|
211
195
|
q = "//clause[parent::sections]"
|
212
196
|
@topnum = nil
|
@@ -231,9 +215,7 @@ module IsoDoc
|
|
231
215
|
def sect_names(clause, num, i, lvl, prev_lvl)
|
232
216
|
return i if clause.nil?
|
233
217
|
curr = i
|
234
|
-
if clause["container"]
|
235
|
-
retlvl = lvl+1
|
236
|
-
else
|
218
|
+
if !clause["container"]
|
237
219
|
retlvl = lvl
|
238
220
|
i+=1
|
239
221
|
curr = i
|
@@ -258,7 +240,7 @@ module IsoDoc
|
|
258
240
|
def annex_naming(c, num, lvl, i)
|
259
241
|
if c["guidance"] then annex_names1(c, "#{num}E", lvl + 1)
|
260
242
|
else
|
261
|
-
i+= 1
|
243
|
+
i+= 1 unless c["container"]
|
262
244
|
annex_names1(c, "#{num}.#{i}", lvl + 1)
|
263
245
|
end
|
264
246
|
i
|
@@ -269,14 +251,15 @@ module IsoDoc
|
|
269
251
|
xref: "#{@annex_lbl} #{num}", level: 1 }
|
270
252
|
i = 0
|
271
253
|
clause.xpath(ns("./clause")).each do |c|
|
254
|
+
container_names(c, 0)
|
272
255
|
i = annex_naming(c, num, 1, i)
|
273
256
|
end
|
274
257
|
hierarchical_asset_names(clause, num)
|
275
258
|
end
|
276
259
|
|
277
260
|
def annex_names1(clause, num, level)
|
278
|
-
@anchors[clause["id"]] =
|
279
|
-
|
261
|
+
clause["container"] or @anchors[clause["id"]] =
|
262
|
+
{ label: num, xref: "#{@annex_lbl} #{num}", level: level }
|
280
263
|
i = 0
|
281
264
|
clause.xpath(ns("./clause")).each do |c|
|
282
265
|
i = annex_naming(c, num, level, i)
|
data/lib/isodoc/mpfd/metadata.rb
CHANGED
@@ -27,14 +27,7 @@ module IsoDoc
|
|
27
27
|
|
28
28
|
def docid(isoxml, _out)
|
29
29
|
docnumber = isoxml.at(ns("//bibdata/docidentifier"))
|
30
|
-
|
31
|
-
dn = docnumber&.text
|
32
|
-
if docstatus
|
33
|
-
set(:status, status_print(docstatus.text))
|
34
|
-
abbr = status_abbr(docstatus.text)
|
35
|
-
dn = "#{dn}(#{abbr})" unless abbr.empty?
|
36
|
-
end
|
37
|
-
set(:docnumber, dn)
|
30
|
+
set(:docnumber, docnumber&.text)
|
38
31
|
end
|
39
32
|
|
40
33
|
def doctype(isoxml, _out)
|
@@ -45,10 +38,6 @@ module IsoDoc
|
|
45
38
|
set(:doctype, t)
|
46
39
|
end
|
47
40
|
|
48
|
-
def status_print(status)
|
49
|
-
status.split(/-/).map{ |w| w.capitalize }.join(" ")
|
50
|
-
end
|
51
|
-
|
52
41
|
def status_abbr(status)
|
53
42
|
case status
|
54
43
|
when "working-draft" then "wd"
|
@@ -61,10 +50,8 @@ module IsoDoc
|
|
61
50
|
|
62
51
|
def version(isoxml, _out)
|
63
52
|
super
|
64
|
-
|
65
53
|
revdate = get[:revdate]
|
66
54
|
set(:revdate_monthyear, monthyr(revdate))
|
67
|
-
|
68
55
|
edition = isoxml.at(ns("//version/edition"))
|
69
56
|
if edition
|
70
57
|
set(
|
@@ -74,12 +61,6 @@ module IsoDoc
|
|
74
61
|
split(/(\W)/).map(&:capitalize).join
|
75
62
|
)
|
76
63
|
end
|
77
|
-
|
78
|
-
puts "get get[:docstage] #{get[:docstage]}"
|
79
|
-
puts get[:docstage]
|
80
|
-
if get[:docstage] == "95" and get[:docsubstage] == "99"
|
81
|
-
set(:draftinfo, "(Repealed)")
|
82
|
-
end
|
83
64
|
end
|
84
65
|
|
85
66
|
def monthyr(isodate)
|
@@ -89,11 +70,6 @@ module IsoDoc
|
|
89
70
|
# invalid dates get thrown
|
90
71
|
isodate
|
91
72
|
end
|
92
|
-
|
93
|
-
def security(isoxml, _out)
|
94
|
-
security = isoxml.at(ns("//bibdata/security")) || return
|
95
|
-
set(:security, security.text)
|
96
|
-
end
|
97
73
|
end
|
98
74
|
end
|
99
75
|
end
|
@@ -82,14 +82,6 @@ module IsoDoc
|
|
82
82
|
out.pre node.text # content.gsub(/</, "<").gsub(/>/, ">")
|
83
83
|
end
|
84
84
|
|
85
|
-
def term_defs_boilerplate(div, source, term, preface)
|
86
|
-
if source.empty? && term.nil?
|
87
|
-
div << @no_terms_boilerplate
|
88
|
-
else
|
89
|
-
div << term_defs_boilerplate_cont(source, term)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
85
|
def error_parse(node, out)
|
94
86
|
# catch elements not defined in ISO
|
95
87
|
case node.name
|
@@ -106,11 +98,6 @@ module IsoDoc
|
|
106
98
|
File.join(File.dirname(__FILE__), loc)
|
107
99
|
end
|
108
100
|
|
109
|
-
def info(isoxml, out)
|
110
|
-
@meta.security isoxml, out
|
111
|
-
super
|
112
|
-
end
|
113
|
-
|
114
101
|
def i18n_init(lang, script)
|
115
102
|
super
|
116
103
|
y = if lang == "en"
|
@@ -119,10 +106,10 @@ module IsoDoc
|
|
119
106
|
YAML.load_file(File.join(File.dirname(__FILE__),
|
120
107
|
"i18n-zh-Hans.yaml"))
|
121
108
|
else
|
122
|
-
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-
|
109
|
+
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-en.yaml"))
|
123
110
|
end
|
124
|
-
@annex_lbl = "Appendix"
|
125
111
|
@labels = @labels.merge(y)
|
112
|
+
@annex_lbl = y["annex"]
|
126
113
|
@clause_lbl = y["clause"]
|
127
114
|
end
|
128
115
|
|
@@ -133,6 +120,10 @@ module IsoDoc
|
|
133
120
|
TERM_CLAUSE = "//preface/terms | "\
|
134
121
|
"//preface/clause[descendant::terms]".freeze
|
135
122
|
|
123
|
+
SECTIONS_XPATH =
|
124
|
+
"//foreword | //introduction | //preface/terms | //preface/clause | //annex | "\
|
125
|
+
"//sections/clause | //bibliography/references | "\
|
126
|
+
"//bibliography/clause".freeze
|
136
127
|
|
137
128
|
def terms_defs(isoxml, out, num)
|
138
129
|
f = isoxml.at(ns(TERM_CLAUSE)) or return num
|
@@ -150,7 +141,7 @@ module IsoDoc
|
|
150
141
|
|
151
142
|
def preface(isoxml, out)
|
152
143
|
isoxml.xpath(ns(FRONT_CLAUSE)).each do |c|
|
153
|
-
if c.name == "terms" then terms_defs isoxml, out, 0
|
144
|
+
if c.name == "terms" || c.at(ns(".//terms")) then terms_defs isoxml, out, 0
|
154
145
|
else
|
155
146
|
out.div **attr_code(id: c["id"]) do |s|
|
156
147
|
clause_name(get_anchors[c['id']][:label],
|
@@ -227,9 +218,7 @@ module IsoDoc
|
|
227
218
|
def sect_names(clause, num, i, lvl, prev_lvl)
|
228
219
|
return i if clause.nil?
|
229
220
|
curr = i
|
230
|
-
if clause["container"]
|
231
|
-
retlvl = lvl+1
|
232
|
-
else
|
221
|
+
if !clause["container"]
|
233
222
|
retlvl = lvl
|
234
223
|
i+=1
|
235
224
|
curr = i
|
@@ -254,7 +243,7 @@ module IsoDoc
|
|
254
243
|
def annex_naming(c, num, lvl, i)
|
255
244
|
if c["guidance"] then annex_names1(c, "#{num}E", lvl + 1)
|
256
245
|
else
|
257
|
-
i+= 1
|
246
|
+
i+= 1 unless c["container"]
|
258
247
|
annex_names1(c, "#{num}.#{i}", lvl + 1)
|
259
248
|
end
|
260
249
|
i
|
@@ -265,14 +254,15 @@ module IsoDoc
|
|
265
254
|
xref: "#{@annex_lbl} #{num}", level: 1 }
|
266
255
|
i = 0
|
267
256
|
clause.xpath(ns("./clause")).each do |c|
|
257
|
+
container_names(c, 0)
|
268
258
|
i = annex_naming(c, num, 1, i)
|
269
259
|
end
|
270
260
|
hierarchical_asset_names(clause, num)
|
271
261
|
end
|
272
262
|
|
273
263
|
def annex_names1(clause, num, level)
|
274
|
-
@anchors[clause["id"]] =
|
275
|
-
|
264
|
+
clause["container"] or @anchors[clause["id"]] =
|
265
|
+
{ label: num, xref: "#{@annex_lbl} #{num}", level: level }
|
276
266
|
i = 0
|
277
267
|
clause.xpath(ns("./clause")).each do |c|
|
278
268
|
i = annex_naming(c, num, level, i)
|
@@ -7,10 +7,6 @@ module IsoDoc
|
|
7
7
|
# A {Converter} implementation that generates Word output, and a document
|
8
8
|
# schema encapsulation of the document for validation
|
9
9
|
class WordConvert < IsoDoc::WordConvert
|
10
|
-
def rsd_html_path(file)
|
11
|
-
File.join(File.dirname(__FILE__), File.join("html", file))
|
12
|
-
end
|
13
|
-
|
14
10
|
def initialize(options)
|
15
11
|
@libdir = File.dirname(__FILE__)
|
16
12
|
super
|
@@ -57,49 +53,6 @@ module IsoDoc
|
|
57
53
|
end
|
58
54
|
end
|
59
55
|
|
60
|
-
def make_body2(body, docxml)
|
61
|
-
body.div **{ class: "WordSection2" } do |div2|
|
62
|
-
info docxml, div2
|
63
|
-
div2.p { |p| p << " " } # placeholder
|
64
|
-
end
|
65
|
-
#body.br **{ clear: "all", style: "page-break-before:auto;mso-break-type:section-break;" }
|
66
|
-
section_break(body)
|
67
|
-
end
|
68
|
-
|
69
|
-
def title(isoxml, _out)
|
70
|
-
main = isoxml&.at(ns("//title[@language='en']"))&.text
|
71
|
-
set_metadata(:doctitle, main)
|
72
|
-
end
|
73
|
-
|
74
|
-
def generate_header(filename, dir)
|
75
|
-
return unless @header
|
76
|
-
template = Liquid::Template.parse(File.read(@header, encoding: "UTF-8"))
|
77
|
-
meta = @meta.get
|
78
|
-
meta[:filename] = filename
|
79
|
-
params = meta.map { |k, v| [k.to_s, v] }.to_h
|
80
|
-
File.open("header.html", "w") { |f| f.write(template.render(params)) }
|
81
|
-
@files_to_delete << "header.html"
|
82
|
-
"header.html"
|
83
|
-
end
|
84
|
-
|
85
|
-
def header_strip(h)
|
86
|
-
h = h.to_s.gsub(%r{<br/>}, " ").sub(/<\/?h[12][^>]*>/, "")
|
87
|
-
h1 = to_xhtml_fragment(h.dup)
|
88
|
-
h1.traverse do |x|
|
89
|
-
x.replace(" ") if x.name == "span" &&
|
90
|
-
/mso-tab-count/.match(x["style"])
|
91
|
-
x.remove if x.name == "span" && x["class"] == "MsoCommentReference"
|
92
|
-
x.remove if x.name == "a" && x["epub:type"] == "footnote"
|
93
|
-
x.replace(x.children) if x.name == "a"
|
94
|
-
end
|
95
|
-
from_xhtml(h1)
|
96
|
-
end
|
97
|
-
|
98
|
-
def info(isoxml, out)
|
99
|
-
@meta.security isoxml, out
|
100
|
-
super
|
101
|
-
end
|
102
|
-
|
103
56
|
def annex_name(annex, name, div)
|
104
57
|
div.h1 **{ class: "Annex" } do |t|
|
105
58
|
t << "#{get_anchors[annex['id']][:label]} "
|
@@ -113,19 +66,6 @@ module IsoDoc
|
|
113
66
|
out.pre node.text # content.gsub(/</, "<").gsub(/>/, ">")
|
114
67
|
end
|
115
68
|
|
116
|
-
def term_defs_boilerplate(div, source, term, preface)
|
117
|
-
if source.empty? && term.nil?
|
118
|
-
div << @no_terms_boilerplate
|
119
|
-
else
|
120
|
-
div << term_defs_boilerplate_cont(source, term)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def i18n_init(lang, script)
|
125
|
-
super
|
126
|
-
@annex_lbl = "Appendix"
|
127
|
-
end
|
128
|
-
|
129
69
|
def error_parse(node, out)
|
130
70
|
# catch elements not defined in ISO
|
131
71
|
case node.name
|
@@ -150,9 +90,10 @@ module IsoDoc
|
|
150
90
|
YAML.load_file(File.join(File.dirname(__FILE__),
|
151
91
|
"i18n-zh-Hans.yaml"))
|
152
92
|
else
|
153
|
-
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-
|
93
|
+
YAML.load_file(File.join(File.dirname(__FILE__), "i18n-en.yaml"))
|
154
94
|
end
|
155
95
|
@labels = @labels.merge(y)
|
96
|
+
@annex_lbl = y["annex"]
|
156
97
|
@clause_lbl = y["clause"]
|
157
98
|
end
|
158
99
|
|
@@ -163,6 +104,10 @@ module IsoDoc
|
|
163
104
|
TERM_CLAUSE = "//preface/terms | "\
|
164
105
|
"//preface/clause[descendant::terms]".freeze
|
165
106
|
|
107
|
+
SECTIONS_XPATH =
|
108
|
+
"//foreword | //introduction | //preface/terms | //preface/clause | //annex | "\
|
109
|
+
"//sections/clause | //bibliography/references | "\
|
110
|
+
"//bibliography/clause".freeze
|
166
111
|
|
167
112
|
def terms_defs(isoxml, out, num)
|
168
113
|
f = isoxml.at(ns(TERM_CLAUSE)) or return num
|
@@ -176,22 +121,6 @@ module IsoDoc
|
|
176
121
|
end
|
177
122
|
|
178
123
|
FRONT_CLAUSE = "//*[parent::preface]".freeze
|
179
|
-
#FRONT_CLAUSE = "//clause[parent::preface] | //terms[parent::preface]".freeze
|
180
|
-
|
181
|
-
def preface(isoxml, out)
|
182
|
-
isoxml.xpath(ns(FRONT_CLAUSE)).each do |c|
|
183
|
-
if c.name == "terms" then terms_defs isoxml, out, 0
|
184
|
-
else
|
185
|
-
out.div **attr_code(id: c["id"]) do |s|
|
186
|
-
clause_name(get_anchors[c['id']][:label],
|
187
|
-
c&.at(ns("./title"))&.content, s, nil)
|
188
|
-
c.elements.reject { |c1| c1.name == "title" }.each do |c1|
|
189
|
-
parse(c1, s)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
124
|
|
196
125
|
def initial_anchor_names(d)
|
197
126
|
d.xpath(ns(FRONT_CLAUSE)).each do |c|
|
@@ -204,14 +133,6 @@ module IsoDoc
|
|
204
133
|
termexample_anchor_names(d)
|
205
134
|
end
|
206
135
|
|
207
|
-
|
208
|
-
def middle(isoxml, out)
|
209
|
-
middle_title(out)
|
210
|
-
clause isoxml, out
|
211
|
-
annex isoxml, out
|
212
|
-
bibliography isoxml, out
|
213
|
-
end
|
214
|
-
|
215
136
|
def make_body2(body, docxml)
|
216
137
|
body.div **{ class: "WordSection2" } do |div2|
|
217
138
|
info docxml, div2
|
@@ -223,7 +144,6 @@ module IsoDoc
|
|
223
144
|
section_break(body)
|
224
145
|
end
|
225
146
|
|
226
|
-
|
227
147
|
def middle(isoxml, out)
|
228
148
|
middle_title(out)
|
229
149
|
clause isoxml, out
|
@@ -264,9 +184,7 @@ module IsoDoc
|
|
264
184
|
def sect_names(clause, num, i, lvl, prev_lvl)
|
265
185
|
return i if clause.nil?
|
266
186
|
curr = i
|
267
|
-
if clause["container"]
|
268
|
-
retlvl = lvl+1
|
269
|
-
else
|
187
|
+
if !clause["container"]
|
270
188
|
retlvl = lvl
|
271
189
|
i+=1
|
272
190
|
curr = i
|
@@ -291,7 +209,7 @@ module IsoDoc
|
|
291
209
|
def annex_naming(c, num, lvl, i)
|
292
210
|
if c["guidance"] then annex_names1(c, "#{num}E", lvl + 1)
|
293
211
|
else
|
294
|
-
i+= 1
|
212
|
+
i+= 1 unless c["container"]
|
295
213
|
annex_names1(c, "#{num}.#{i}", lvl + 1)
|
296
214
|
end
|
297
215
|
i
|
@@ -302,14 +220,15 @@ module IsoDoc
|
|
302
220
|
xref: "#{@annex_lbl} #{num}", level: 1 }
|
303
221
|
i = 0
|
304
222
|
clause.xpath(ns("./clause")).each do |c|
|
223
|
+
container_names(c, 0)
|
305
224
|
i = annex_naming(c, num, 1, i)
|
306
225
|
end
|
307
226
|
hierarchical_asset_names(clause, num)
|
308
227
|
end
|
309
228
|
|
310
229
|
def annex_names1(clause, num, level)
|
311
|
-
@anchors[clause["id"]] =
|
312
|
-
|
230
|
+
clause["container"] or @anchors[clause["id"]] =
|
231
|
+
{ label: num, xref: "#{@annex_lbl} #{num}", level: level }
|
313
232
|
i = 0
|
314
233
|
clause.xpath(ns("./clause")).each do |c|
|
315
234
|
i = annex_naming(c, num, level, i)
|