isodoc 1.1.4 → 1.2.4
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/lib/isodoc-yaml/i18n-en.yaml +4 -1
- data/lib/isodoc-yaml/i18n-fr.yaml +4 -1
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +4 -1
- data/lib/isodoc.rb +1 -0
- data/lib/isodoc/base_style/metanorma_word.css +6 -0
- data/lib/isodoc/base_style/metanorma_word.scss +6 -0
- data/lib/isodoc/common.rb +0 -2
- data/lib/isodoc/convert.rb +34 -28
- data/lib/isodoc/function/blocks.rb +11 -22
- data/lib/isodoc/function/blocks_example_note.rb +14 -15
- data/lib/isodoc/function/cleanup.rb +5 -4
- data/lib/isodoc/function/inline.rb +6 -76
- data/lib/isodoc/function/references.rb +13 -10
- data/lib/isodoc/function/reqt.rb +12 -11
- data/lib/isodoc/function/section.rb +51 -54
- data/lib/isodoc/function/table.rb +2 -6
- data/lib/isodoc/function/terms.rb +13 -6
- data/lib/isodoc/function/to_word_html.rb +3 -0
- data/lib/isodoc/function/utils.rb +6 -5
- data/lib/isodoc/html_function/html.rb +1 -1
- data/lib/isodoc/{function/i18n.rb → i18n.rb} +37 -37
- data/lib/isodoc/metadata.rb +4 -3
- data/lib/isodoc/metadata_date.rb +1 -1
- data/lib/isodoc/presentation_function/block.rb +152 -0
- data/lib/isodoc/presentation_function/inline.rb +131 -0
- data/lib/isodoc/presentation_function/section.rb +46 -0
- data/lib/isodoc/presentation_xml_convert.rb +39 -5
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +13 -8
- data/lib/isodoc/word_function/inline.rb +3 -1
- data/lib/isodoc/word_function/postprocess.rb +1 -1
- data/lib/isodoc/word_function/table.rb +3 -2
- data/lib/isodoc/xref.rb +6 -3
- data/lib/isodoc/xref/xref_counter.rb +21 -7
- data/lib/isodoc/xref/xref_gen.rb +27 -4
- data/lib/isodoc/xref/xref_sect_gen.rb +3 -3
- data/spec/assets/i18n.yaml +12 -1
- data/spec/isodoc/blocks_spec.rb +1338 -147
- data/spec/isodoc/cleanup_spec.rb +5 -3
- data/spec/isodoc/footnotes_spec.rb +2 -2
- data/spec/isodoc/i18n_spec.rb +679 -110
- data/spec/isodoc/inline_spec.rb +323 -142
- data/spec/isodoc/lists_spec.rb +2 -2
- data/spec/isodoc/postproc_spec.rb +1347 -1333
- data/spec/isodoc/ref_spec.rb +181 -3
- data/spec/isodoc/section_spec.rb +633 -681
- data/spec/isodoc/table_spec.rb +386 -136
- data/spec/isodoc/terms_spec.rb +111 -79
- data/spec/isodoc/xref_spec.rb +1597 -1186
- metadata +6 -3
@@ -5,7 +5,7 @@ module IsoDoc::Function
|
|
5
5
|
# references anyway; keeping here instead of in IsoDoc::Iso for now
|
6
6
|
def docid_l10n(x)
|
7
7
|
return x if x.nil?
|
8
|
-
x.gsub(/All Parts/i, @
|
8
|
+
x.gsub(/All Parts/i, @i18n.all_parts.downcase) if @i18n.all_parts
|
9
9
|
x
|
10
10
|
end
|
11
11
|
|
@@ -54,7 +54,8 @@ module IsoDoc::Function
|
|
54
54
|
def bibitem_ref_code(b)
|
55
55
|
id = b.at(ns("./docidentifier[@type = 'metanorma']"))
|
56
56
|
id1 = pref_ref_code(b)
|
57
|
-
id2 = b.at(ns("./docidentifier[@type = 'DOI' or @type = 'ISSN' or
|
57
|
+
id2 = b.at(ns("./docidentifier[@type = 'DOI' or @type = 'ISSN' or "\
|
58
|
+
"@type = 'ISBN']"))
|
58
59
|
return [id, id1, id2] if id || id1 || id2
|
59
60
|
id = Nokogiri::XML::Node.new("docidentifier", b.document)
|
60
61
|
id << "(NO ID)"
|
@@ -155,14 +156,14 @@ module IsoDoc::Function
|
|
155
156
|
|
156
157
|
def norm_ref_xpath
|
157
158
|
"//bibliography/references[@normative = 'true'] | "\
|
158
|
-
|
159
|
+
"//bibliography/clause[.//references[@normative = 'true']]"
|
159
160
|
end
|
160
161
|
|
161
162
|
def norm_ref(isoxml, out, num)
|
162
163
|
f = isoxml.at(ns(norm_ref_xpath)) or return num
|
163
164
|
out.div do |div|
|
164
165
|
num = num + 1
|
165
|
-
clause_name(num,
|
166
|
+
clause_name(num, f.at(ns("./title")), div, nil)
|
166
167
|
if f.name == "clause"
|
167
168
|
f.elements.each { |e| parse(e, div) unless e.name == "title" }
|
168
169
|
else
|
@@ -174,15 +175,18 @@ module IsoDoc::Function
|
|
174
175
|
|
175
176
|
def bibliography_xpath
|
176
177
|
"//bibliography/clause[.//references]"\
|
177
|
-
|
178
|
-
|
178
|
+
"[not(.//references[@normative = 'true'])] | "\
|
179
|
+
"//bibliography/references[@normative = 'false']"
|
179
180
|
end
|
180
181
|
|
181
182
|
def bibliography(isoxml, out)
|
182
183
|
f = isoxml.at(ns(bibliography_xpath)) || return
|
183
184
|
page_break(out)
|
184
185
|
out.div do |div|
|
185
|
-
div.h1 @bibliography_lbl, **{ class: "Section3" }
|
186
|
+
#div.h1 @bibliography_lbl, **{ class: "Section3" }
|
187
|
+
div.h1 **{class: "Section3"} do |h1|
|
188
|
+
f&.at(ns("./title"))&.children&.each { |c2| parse(c2, h1) }
|
189
|
+
end
|
186
190
|
biblio_list(f, div, true)
|
187
191
|
end
|
188
192
|
end
|
@@ -190,9 +194,8 @@ module IsoDoc::Function
|
|
190
194
|
def bibliography_parse(node, out)
|
191
195
|
title = node&.at(ns("./title"))&.text || ""
|
192
196
|
out.div do |div|
|
193
|
-
|
194
|
-
|
195
|
-
div.h2 title, **{ class: "Section3" }
|
197
|
+
clause_parse_title(node, div, node.at(ns("./title")), out,
|
198
|
+
{ class: "Section3" })
|
196
199
|
biblio_list(node, div, true)
|
197
200
|
end
|
198
201
|
end
|
data/lib/isodoc/function/reqt.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
module IsoDoc::Function
|
2
2
|
module Blocks
|
3
3
|
def recommendation_labels(node)
|
4
|
-
[node.at(ns("./label")), node.at(ns("./title")),
|
5
|
-
@xrefs.anchor(node['id'], :label, false)]
|
4
|
+
[node.at(ns("./label")), node.at(ns("./title")), node.at(ns("./name"))]
|
6
5
|
end
|
7
6
|
|
8
|
-
def recommendation_name(node, out,
|
7
|
+
def recommendation_name(node, out, _type)
|
9
8
|
label, title, lbl = recommendation_labels(node)
|
10
9
|
out.p **{ class: "RecommendationTitle" } do |b|
|
11
|
-
|
10
|
+
lbl and lbl.children.each { |n| parse(n, b) }
|
11
|
+
b << l10n(":")
|
12
12
|
if label || title
|
13
13
|
b.br
|
14
14
|
label and label.children.each { |n| parse(n,b) }
|
@@ -21,11 +21,11 @@ module IsoDoc::Function
|
|
21
21
|
def recommendation_attributes1(node)
|
22
22
|
out = []
|
23
23
|
oblig = node["obligation"] and
|
24
|
-
out << l10n("#{@
|
24
|
+
out << l10n("#{@i18n.obligation}: #{oblig}")
|
25
25
|
subj = node&.at(ns("./subject"))&.text and
|
26
|
-
out << l10n("#{@
|
26
|
+
out << l10n("#{@i18n.subject}: #{subj}")
|
27
27
|
node.xpath(ns("./inherit")).each do |i|
|
28
|
-
out << recommendation_attr_parse(i, @
|
28
|
+
out << recommendation_attr_parse(i, @i18n.inherits)
|
29
29
|
end
|
30
30
|
node.xpath(ns("./classification")).each do |c|
|
31
31
|
line = recommendation_attr_keyvalue(c, "tag", "value") and out << line
|
@@ -57,7 +57,8 @@ module IsoDoc::Function
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def reqt_metadata_node(n)
|
60
|
-
%w(label title subject classification tag value
|
60
|
+
%w(label title subject classification tag value
|
61
|
+
inherit name).include? n.name
|
61
62
|
end
|
62
63
|
|
63
64
|
def reqt_attrs(node, klass)
|
@@ -66,7 +67,7 @@ module IsoDoc::Function
|
|
66
67
|
|
67
68
|
def recommendation_parse(node, out)
|
68
69
|
out.div **reqt_attrs(node, "recommend") do |t|
|
69
|
-
recommendation_name(node, t, @
|
70
|
+
recommendation_name(node, t, @i18n.recommendation)
|
70
71
|
recommendation_attributes(node, out)
|
71
72
|
node.children.each do |n|
|
72
73
|
parse(n, t) unless reqt_metadata_node(n)
|
@@ -76,7 +77,7 @@ module IsoDoc::Function
|
|
76
77
|
|
77
78
|
def requirement_parse(node, out)
|
78
79
|
out.div **reqt_attrs(node, "require") do |t|
|
79
|
-
recommendation_name(node, t, @
|
80
|
+
recommendation_name(node, t, @i18n.requirement)
|
80
81
|
recommendation_attributes(node, out)
|
81
82
|
node.children.each do |n|
|
82
83
|
parse(n, t) unless reqt_metadata_node(n)
|
@@ -86,7 +87,7 @@ module IsoDoc::Function
|
|
86
87
|
|
87
88
|
def permission_parse(node, out)
|
88
89
|
out.div **reqt_attrs(node, "permission") do |t|
|
89
|
-
recommendation_name(node, t, @
|
90
|
+
recommendation_name(node, t, @i18n.permission)
|
90
91
|
recommendation_attributes(node, out)
|
91
92
|
node.children.each do |n|
|
92
93
|
parse(n, t) unless reqt_metadata_node(n)
|
@@ -8,36 +8,37 @@ module IsoDoc::Function
|
|
8
8
|
insert_tab(out, 1)
|
9
9
|
end
|
10
10
|
|
11
|
-
def inline_header_title(out, node,
|
11
|
+
def inline_header_title(out, node, title)
|
12
12
|
out.span **{ class: "zzMoveToFollowing" } do |s|
|
13
13
|
s.b do |b|
|
14
|
-
|
15
|
-
|
16
|
-
clausedelimspace(out)
|
17
|
-
end
|
18
|
-
c1&.children&.each { |c2| parse(c2, b) }
|
19
|
-
clausedelimspace(out) if /\S/.match(c1&.text)
|
14
|
+
title&.children&.each { |c2| parse(c2, b) }
|
15
|
+
clausedelimspace(out) if /\S/.match(title&.text)
|
20
16
|
end
|
21
17
|
end
|
22
18
|
end
|
23
19
|
|
24
20
|
# used for subclauses
|
25
|
-
def clause_parse_title(node, div,
|
21
|
+
def clause_parse_title(node, div, title, out, header_class = {})
|
22
|
+
return if title.nil?
|
26
23
|
if node["inline-header"] == "true"
|
27
|
-
inline_header_title(out, node,
|
24
|
+
inline_header_title(out, node, title)
|
28
25
|
else
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
26
|
+
depth = (title && title["depth"]) ? title["depth"] :
|
27
|
+
node.ancestors("clause, annex, terms, references, definitions, "\
|
28
|
+
"acknowledgements, introduction, foreword").size + 1
|
29
|
+
div.send "h#{depth}", **attr_code(header_class) do |h|
|
30
|
+
title&.children&.each { |c2| parse(c2, h) }
|
34
31
|
end
|
35
32
|
end
|
36
33
|
end
|
37
34
|
|
35
|
+
def clause_attrs(node)
|
36
|
+
{ id: node["id"] }
|
37
|
+
end
|
38
|
+
|
38
39
|
# used for subclauses
|
39
40
|
def clause_parse(node, out)
|
40
|
-
out.div **attr_code(
|
41
|
+
out.div **attr_code(clause_attrs(node)) do |div|
|
41
42
|
clause_parse_title(node, div, node.at(ns("./title")), out)
|
42
43
|
node.children.reject { |c1| c1.name == "title" }.each do |c1|
|
43
44
|
parse(c1, div)
|
@@ -45,13 +46,9 @@ module IsoDoc::Function
|
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
48
|
-
def clause_name(
|
49
|
+
def clause_name(_num, title, div, header_class)
|
49
50
|
header_class = {} if header_class.nil?
|
50
51
|
div.h1 **attr_code(header_class) do |h1|
|
51
|
-
if num && !@suppressheadingnumbers
|
52
|
-
h1 << "#{num}#{clausedelim}"
|
53
|
-
clausedelimspace(h1)
|
54
|
-
end
|
55
52
|
title.is_a?(String) ? h1 << title :
|
56
53
|
title&.children&.each { |c2| parse(c2, h1) }
|
57
54
|
end
|
@@ -60,9 +57,8 @@ module IsoDoc::Function
|
|
60
57
|
|
61
58
|
def clause(isoxml, out)
|
62
59
|
isoxml.xpath(ns(middle_clause)).each do |c|
|
63
|
-
out.div **attr_code(
|
64
|
-
clause_name(
|
65
|
-
c&.at(ns("./title")), s, nil)
|
60
|
+
out.div **attr_code(clause_attrs(c)) do |s|
|
61
|
+
clause_name(nil, c&.at(ns("./title")), s, nil)
|
66
62
|
c.elements.reject { |c1| c1.name == "title" }.each do |c1|
|
67
63
|
parse(c1, s)
|
68
64
|
end
|
@@ -71,19 +67,20 @@ module IsoDoc::Function
|
|
71
67
|
end
|
72
68
|
|
73
69
|
def annex_name(annex, name, div)
|
70
|
+
return if name.nil?
|
74
71
|
div.h1 **{ class: "Annex" } do |t|
|
75
|
-
|
76
|
-
t.b do |b|
|
77
|
-
name&.children&.each { |c2| parse(c2, b) }
|
78
|
-
end
|
72
|
+
name.children.each { |c2| parse(c2, t) }
|
79
73
|
end
|
80
74
|
end
|
81
75
|
|
76
|
+
def annex_attrs(node)
|
77
|
+
{ id: node["id"], class: "Section3" }
|
78
|
+
end
|
79
|
+
|
82
80
|
def annex(isoxml, out)
|
83
81
|
isoxml.xpath(ns("//annex")).each do |c|
|
84
82
|
page_break(out)
|
85
|
-
out.div **attr_code(
|
86
|
-
annex_name(c, nil, s) unless c.at(ns("./title"))
|
83
|
+
out.div **attr_code(annex_attrs(c)) do |s|
|
87
84
|
c.elements.each do |c1|
|
88
85
|
if c1.name == "title" then annex_name(c, c1, s)
|
89
86
|
else
|
@@ -95,10 +92,10 @@ module IsoDoc::Function
|
|
95
92
|
end
|
96
93
|
|
97
94
|
def scope(isoxml, out, num)
|
98
|
-
f = isoxml.at(ns("//clause[
|
95
|
+
f = isoxml.at(ns("//clause[@type = 'scope']")) or return num
|
99
96
|
out.div **attr_code(id: f["id"]) do |div|
|
100
97
|
num = num + 1
|
101
|
-
clause_name(num,
|
98
|
+
clause_name(num, f&.at(ns("./title")), div, nil)
|
102
99
|
f.elements.each do |e|
|
103
100
|
parse(e, div) unless e.name == "title"
|
104
101
|
end
|
@@ -109,26 +106,11 @@ module IsoDoc::Function
|
|
109
106
|
TERM_CLAUSE = "//sections/terms | "\
|
110
107
|
"//sections/clause[descendant::terms]".freeze
|
111
108
|
|
112
|
-
def term_def_title(title)
|
113
|
-
case title&.text
|
114
|
-
when "Terms, definitions, symbols and abbreviated terms"
|
115
|
-
@labels["termsdefsymbolsabbrev"]
|
116
|
-
when "Terms, definitions and symbols"
|
117
|
-
@labels["termsdefsymbols"]
|
118
|
-
when "Terms, definitions and abbreviated terms"
|
119
|
-
@labels["termsdefabbrev"]
|
120
|
-
when "Terms and definitions"
|
121
|
-
@labels["termsdef"]
|
122
|
-
else
|
123
|
-
title
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
109
|
def terms_defs(isoxml, out, num)
|
128
110
|
f = isoxml.at(ns(TERM_CLAUSE)) or return num
|
129
111
|
out.div **attr_code(id: f["id"]) do |div|
|
130
112
|
num = num + 1
|
131
|
-
clause_name(num,
|
113
|
+
clause_name(num, f&.at(ns("./title")), div, nil)
|
132
114
|
f.elements.each do |e|
|
133
115
|
parse(e, div) unless %w{title source}.include? e.name
|
134
116
|
end
|
@@ -145,7 +127,7 @@ module IsoDoc::Function
|
|
145
127
|
f = isoxml.at(ns("//sections/definitions")) or return num
|
146
128
|
out.div **attr_code(id: f["id"], class: "Symbols") do |div|
|
147
129
|
num = num + 1
|
148
|
-
clause_name(num, f&.at(ns("./title")) || @
|
130
|
+
clause_name(num, f&.at(ns("./title")) || @i18n.symbols, div, nil)
|
149
131
|
f.elements.each do |e|
|
150
132
|
parse(e, div) unless e.name == "title"
|
151
133
|
end
|
@@ -156,7 +138,7 @@ module IsoDoc::Function
|
|
156
138
|
# subclause
|
157
139
|
def symbols_parse(isoxml, out)
|
158
140
|
isoxml.at(ns("./title")) or
|
159
|
-
isoxml.children.first.previous = "<title>#{@
|
141
|
+
isoxml.children.first.previous = "<title>#{@i18n.symbols}</title>"
|
160
142
|
clause_parse(isoxml, out)
|
161
143
|
end
|
162
144
|
|
@@ -165,7 +147,7 @@ module IsoDoc::Function
|
|
165
147
|
title_attr = { class: "IntroTitle" }
|
166
148
|
page_break(out)
|
167
149
|
out.div **{ class: "Section3", id: f["id"] } do |div|
|
168
|
-
clause_name(nil,
|
150
|
+
clause_name(nil, f.at(ns("./title")), div, { class: "IntroTitle" })
|
169
151
|
f.elements.each do |e|
|
170
152
|
parse(e, div) unless e.name == "title"
|
171
153
|
end
|
@@ -176,7 +158,9 @@ module IsoDoc::Function
|
|
176
158
|
f = isoxml.at(ns("//foreword")) || return
|
177
159
|
page_break(out)
|
178
160
|
out.div **attr_code(id: f["id"]) do |s|
|
179
|
-
|
161
|
+
clause_name(nil, f.at(ns("./title")) || @i18n.foreword, s,
|
162
|
+
{ class: "ForewordTitle" })
|
163
|
+
#s.h1(**{ class: "ForewordTitle" }) { |h1| h1 << @i18n.foreword }
|
180
164
|
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
181
165
|
end
|
182
166
|
end
|
@@ -197,15 +181,15 @@ module IsoDoc::Function
|
|
197
181
|
f = isoxml.at(ns("//preface/abstract")) || return
|
198
182
|
page_break(out)
|
199
183
|
out.div **attr_code(id: f["id"]) do |s|
|
200
|
-
|
184
|
+
clause_name(nil, f.at(ns("./title")), s, { class: "AbstractTitle" })
|
201
185
|
f.elements.each { |e| parse(e, s) unless e.name == "title" }
|
202
186
|
end
|
203
187
|
end
|
204
188
|
|
205
189
|
def preface(isoxml, out)
|
206
190
|
title_attr = { class: "IntroTitle" }
|
207
|
-
isoxml.xpath(ns("//preface/clause | //preface/
|
208
|
-
"//preface/
|
191
|
+
isoxml.xpath(ns("//preface/clause | //preface/references | "\
|
192
|
+
"//preface/definitions | //preface/terms")).each do |f|
|
209
193
|
page_break(out)
|
210
194
|
out.div **{ class: "Section3", id: f["id"] } do |div|
|
211
195
|
clause_name(nil, f&.at(ns("./title")), div, title_attr)
|
@@ -216,6 +200,19 @@ module IsoDoc::Function
|
|
216
200
|
end
|
217
201
|
end
|
218
202
|
|
203
|
+
def is_clause?(name)
|
204
|
+
%w(clause references definitions terms foreword introduction abstract
|
205
|
+
acknowledgements).include? name
|
206
|
+
end
|
207
|
+
|
208
|
+
def preface_block(isoxml, out)
|
209
|
+
p = isoxml.at(ns("//preface")) or return
|
210
|
+
p.elements.each do |e|
|
211
|
+
next if is_clause?(e.name)
|
212
|
+
parse(e, out)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
219
216
|
def copyright_parse(node, out)
|
220
217
|
out.div **{class: "boilerplate-copyright"} do |div|
|
221
218
|
node.children.each { |n| parse(n, div) }
|
@@ -2,13 +2,8 @@ module IsoDoc::Function
|
|
2
2
|
module Table
|
3
3
|
|
4
4
|
def table_title_parse(node, out)
|
5
|
-
name = node.at(ns("./name"))
|
6
|
-
lbl = @xrefs.anchor(node['id'], :label, false)
|
7
|
-
lbl = nil if labelled_ancestor(node)
|
8
|
-
return if name.nil? && lbl.nil?
|
5
|
+
name = node.at(ns("./name")) or return
|
9
6
|
out.p **{ class: "TableTitle", style: "text-align:center;" } do |p|
|
10
|
-
lbl.nil? or p << l10n("#{@table_lbl} #{lbl}")
|
11
|
-
name and !lbl.nil? and p << l10n(" — ")
|
12
7
|
name and name.children.each { |n| parse(n, p) }
|
13
8
|
end
|
14
9
|
end
|
@@ -87,6 +82,7 @@ module IsoDoc::Function
|
|
87
82
|
def make_tr_attr(td, row, totalrows, header)
|
88
83
|
style = td.name == "th" ? "font-weight:bold;" : ""
|
89
84
|
td["align"] and style += "text-align:#{td['align']};"
|
85
|
+
td["valign"] and style += "vertical-align:#{td['valign']};"
|
90
86
|
rowmax = td["rowspan"] ? row + td["rowspan"].to_i - 1 : row
|
91
87
|
style += <<~STYLE
|
92
88
|
border-top:#{row.zero? ? "#{SW} 1.5pt;" : 'none;'}
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module IsoDoc::Function
|
2
2
|
module Terms
|
3
|
-
|
4
3
|
def definition_parse(node, out)
|
5
4
|
node.children.each { |n| parse(n, out) }
|
6
5
|
end
|
@@ -13,7 +12,7 @@ module IsoDoc::Function
|
|
13
12
|
|
14
13
|
def deprecated_term_parse(node, out)
|
15
14
|
out.p **{ class: "DeprecatedTerms", style:"text-align:left;" } do |p|
|
16
|
-
p << l10n("#{@
|
15
|
+
p << l10n("#{@i18n.deprecated}: ")
|
17
16
|
node.children.each { |c| parse(c, p) }
|
18
17
|
end
|
19
18
|
end
|
@@ -39,12 +38,19 @@ module IsoDoc::Function
|
|
39
38
|
end
|
40
39
|
end
|
41
40
|
|
41
|
+
def termnote_delim
|
42
|
+
l10n(": ")
|
43
|
+
end
|
44
|
+
|
42
45
|
def termnote_parse(node, out)
|
46
|
+
name = node&.at(ns("./name"))&.remove
|
43
47
|
out.div **note_attrs(node) do |div|
|
44
|
-
first = node.first_element_child
|
45
48
|
div.p do |p|
|
46
|
-
|
47
|
-
|
49
|
+
if name
|
50
|
+
name.children.each { |n| parse(n, p) }
|
51
|
+
p << termnote_delim
|
52
|
+
end
|
53
|
+
para_then_remainder(node.first_element_child, node, p, div)
|
48
54
|
end
|
49
55
|
end
|
50
56
|
end
|
@@ -58,8 +64,9 @@ module IsoDoc::Function
|
|
58
64
|
end
|
59
65
|
|
60
66
|
def termdef_parse(node, out)
|
67
|
+
name = node&.at(ns("./name"))&.remove
|
61
68
|
out.p **{ class: "TermNum", id: node["id"] } do |p|
|
62
|
-
p
|
69
|
+
name&.children&.each { |n| parse(n, p) }
|
63
70
|
end
|
64
71
|
set_termdomain("")
|
65
72
|
node.children.each { |n| parse(n, out) }
|
@@ -80,6 +80,7 @@ module IsoDoc::Function
|
|
80
80
|
def make_body3(body, docxml)
|
81
81
|
body.div **{ class: "main-section" } do |div3|
|
82
82
|
boilerplate docxml, div3
|
83
|
+
preface_block docxml, div3
|
83
84
|
abstract docxml, div3
|
84
85
|
foreword docxml, div3
|
85
86
|
introduction docxml, div3
|
@@ -220,6 +221,8 @@ module IsoDoc::Function
|
|
220
221
|
when "feedback-statement" then feedback_parse(node, out)
|
221
222
|
when "passthrough" then passthrough_parse(node, out)
|
222
223
|
when "variant" then variant_parse(node, out)
|
224
|
+
when "amend" then amend_parse(node, out)
|
225
|
+
when "tab" then clausedelimspace(out) # in Presentation XML only
|
223
226
|
else
|
224
227
|
error_parse(node, out)
|
225
228
|
end
|
@@ -11,7 +11,8 @@ module IsoDoc::Function
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def insert_tab(out, n)
|
14
|
-
|
14
|
+
tab = %w(Hans Hant).include?(@script) ? " " : " "
|
15
|
+
[1..n].each { out << tab }
|
15
16
|
end
|
16
17
|
|
17
18
|
# add namespaces for Word fragments
|
@@ -99,8 +100,8 @@ module IsoDoc::Function
|
|
99
100
|
return '' if array.nil? || array.empty?
|
100
101
|
if array.length == 1 then array[0]
|
101
102
|
else
|
102
|
-
|
103
|
-
|
103
|
+
@i18n.l10n("#{array[0..-2].join(', ')} "\
|
104
|
+
"#{@i18n.and} #{array.last}",
|
104
105
|
@lang, @script)
|
105
106
|
end
|
106
107
|
end
|
@@ -153,7 +154,7 @@ module IsoDoc::Function
|
|
153
154
|
.get
|
154
155
|
.merge(@labels || {})
|
155
156
|
.merge(@meta.labels || {})
|
156
|
-
.merge(
|
157
|
+
.merge(fonts_options || {})
|
157
158
|
template = liquid(docxml)
|
158
159
|
template.render(meta.map { |k, v| [k.to_s, empty2nil(v)] }.to_h)
|
159
160
|
.gsub('<', '<').gsub('>', '>').gsub('&', '&')
|
@@ -183,7 +184,7 @@ module IsoDoc::Function
|
|
183
184
|
|
184
185
|
def labelled_ancestor(node)
|
185
186
|
!node.ancestors('example, requirement, recommendation, permission, '\
|
186
|
-
'table, figure, sourcecode').empty?
|
187
|
+
'note, table, figure, sourcecode').empty?
|
187
188
|
end
|
188
189
|
end
|
189
190
|
end
|