metanorma-mpfd 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|