isodoc 2.5.10 → 2.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/isodoc.gemspec +1 -1
- data/lib/isodoc/base_style/metanorma_word.css +3 -3
- data/lib/isodoc/base_style/metanorma_word.scss +5 -3
- data/lib/isodoc/common.rb +13 -13
- data/lib/isodoc/convert.rb +4 -2
- data/lib/isodoc/function/blocks.rb +1 -4
- data/lib/isodoc/function/blocks_example_note.rb +1 -7
- data/lib/isodoc/function/inline.rb +2 -2
- data/lib/isodoc/function/references.rb +13 -15
- data/lib/isodoc/function/section.rb +35 -63
- data/lib/isodoc/function/section_titles.rb +0 -14
- data/lib/isodoc/function/to_word_html.rb +44 -21
- data/lib/isodoc/function/utils.rb +1 -0
- data/lib/isodoc/html_function/footnotes.rb +2 -2
- data/lib/isodoc/html_function/html.rb +0 -10
- data/lib/isodoc/init.rb +11 -3
- data/lib/isodoc/metadata.rb +3 -3
- data/lib/isodoc/metadata_contributor.rb +7 -1
- data/lib/isodoc/presentation_function/erefs.rb +2 -2
- data/lib/isodoc/presentation_function/image.rb +22 -10
- data/lib/isodoc/presentation_function/inline.rb +12 -13
- data/lib/isodoc/presentation_function/refs.rb +16 -3
- data/lib/isodoc/presentation_function/section.rb +39 -20
- data/lib/isodoc/presentation_function/terms.rb +7 -0
- data/lib/isodoc/presentation_function/xrefs.rb +4 -4
- data/lib/isodoc/presentation_xml_convert.rb +3 -1
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +15 -6
- data/lib/isodoc/word_function/inline.rb +3 -3
- data/lib/isodoc/word_function/postprocess.rb +20 -4
- data/lib/isodoc/xref/xref_gen.rb +5 -5
- data/lib/isodoc/xref/xref_sect_gen.rb +90 -34
- data/lib/isodoc-yaml/i18n-ar.yaml +1 -1
- data/lib/isodoc-yaml/i18n-de.yaml +1 -1
- data/lib/isodoc-yaml/i18n-en.yaml +1 -1
- data/lib/isodoc-yaml/i18n-es.yaml +1 -1
- data/lib/isodoc-yaml/i18n-fr.yaml +1 -1
- data/lib/isodoc-yaml/i18n-ja.yaml +1 -1
- data/lib/isodoc-yaml/i18n-ru.yaml +1 -1
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b149d913a483c336d7463e587e980fe234f4d1e32d8d683a070d919b0ce7429
|
4
|
+
data.tar.gz: 46e568e2b91f13069f62131ab1b86e28fd74416c55ae0937935575927a578430
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae43a3f990e70f7d1929357172ca48b4cbc5db2750e61d1f91768c8087e796f5e333de64b60fc928434862e1fb874151c6a00a0cd41e25d491fe79e8604dfa9d
|
7
|
+
data.tar.gz: 9abab47db0d610e3971c1f9a19af240449dc11d6cd1d8d0f9e1e860f4b00e4a6947cce60d8483ba8701a180472278badaee6d431a07bd32ba1727ea5ad4d9a16
|
data/isodoc.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
end
|
29
29
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
30
30
|
|
31
|
-
spec.add_dependency "html2doc", "~> 1.
|
31
|
+
spec.add_dependency "html2doc", "~> 1.6.0"
|
32
32
|
spec.add_dependency "htmlentities", "~> 4.3.4"
|
33
33
|
# spec.add_dependency "isodoc-i18n", "~> 1.1.0" # already in relaton-render and mn-requirements
|
34
34
|
spec.add_dependency "emf2svg"
|
data/lib/isodoc/common.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
require_relative "
|
2
|
-
require_relative "
|
3
|
-
require_relative "
|
4
|
-
require_relative "
|
5
|
-
require_relative "
|
6
|
-
require_relative "
|
7
|
-
require_relative "
|
8
|
-
require_relative "
|
9
|
-
require_relative "
|
10
|
-
require_relative "
|
11
|
-
require_relative "
|
12
|
-
require_relative "
|
13
|
-
require_relative "
|
1
|
+
require_relative "function/blocks"
|
2
|
+
require_relative "function/cleanup"
|
3
|
+
require_relative "function/form"
|
4
|
+
require_relative "function/inline"
|
5
|
+
require_relative "function/lists"
|
6
|
+
require_relative "function/references"
|
7
|
+
require_relative "function/section"
|
8
|
+
require_relative "function/table"
|
9
|
+
require_relative "function/terms"
|
10
|
+
require_relative "function/to_word_html"
|
11
|
+
require_relative "function/utils"
|
12
|
+
require_relative "function/reqt"
|
13
|
+
require_relative "class_utils"
|
14
14
|
|
15
15
|
module IsoDoc
|
16
16
|
class Common
|
data/lib/isodoc/convert.rb
CHANGED
@@ -113,6 +113,8 @@ module IsoDoc
|
|
113
113
|
docxml = Nokogiri::XSLT(x).transform(docxml)
|
114
114
|
end
|
115
115
|
docxml
|
116
|
+
rescue
|
117
|
+
require "debug"; binding.b
|
116
118
|
end
|
117
119
|
|
118
120
|
def extract_preprocess_xslt(docxml)
|
@@ -156,11 +158,11 @@ module IsoDoc
|
|
156
158
|
|
157
159
|
def middle_clause(_docxml = nil)
|
158
160
|
"//clause[parent::sections][not(@type = 'scope')]" \
|
159
|
-
"[not(descendant::terms)]"
|
161
|
+
"[not(descendant::terms)][not(descendant::references)]"
|
160
162
|
end
|
161
163
|
|
162
164
|
def target_pdf(node)
|
163
|
-
if
|
165
|
+
if node["target"].include?("#") then node["target"].sub("#", ".pdf#")
|
164
166
|
else "##{node['target']}"
|
165
167
|
end
|
166
168
|
end
|
@@ -5,10 +5,6 @@ module IsoDoc
|
|
5
5
|
module Blocks
|
6
6
|
@annotation = false
|
7
7
|
|
8
|
-
def middle_title(_isoxml, out)
|
9
|
-
out.p(class: "zzSTDTitle1") { |p| p << @meta.get[:doctitle] }
|
10
|
-
end
|
11
|
-
|
12
8
|
def figure_name_parse(_node, div, name)
|
13
9
|
name.nil? and return
|
14
10
|
div.p class: "FigureTitle", style: "text-align:center;" do |p|
|
@@ -140,6 +136,7 @@ module IsoDoc
|
|
140
136
|
if node["type"] == "floating-title"
|
141
137
|
classtype = "h#{node['depth']}"
|
142
138
|
end
|
139
|
+
classtype ||= node["class"]
|
143
140
|
classtype
|
144
141
|
end
|
145
142
|
|
@@ -71,7 +71,7 @@ module IsoDoc
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def note_parse1(node, div)
|
74
|
-
name = node
|
74
|
+
name = node.at(ns("./name"))&.remove
|
75
75
|
name and div.p do |p|
|
76
76
|
p.span class: "note_label" do |s|
|
77
77
|
name.children.each { |n| parse(n, s) }
|
@@ -110,12 +110,6 @@ module IsoDoc
|
|
110
110
|
@note = false
|
111
111
|
end
|
112
112
|
|
113
|
-
def middle_admonitions(isoxml, out)
|
114
|
-
isoxml.xpath(ns("//sections/note | //sections/admonition")).each do |x|
|
115
|
-
parse(x, out)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
113
|
def admonition_name_parse(_node, div, name)
|
120
114
|
div.p class: "AdmonitionTitle", style: "text-align:center;" do |p|
|
121
115
|
name.children.each { |n| parse(n, p) }
|
@@ -38,7 +38,7 @@ module IsoDoc
|
|
38
38
|
|
39
39
|
def xref_parse(node, out)
|
40
40
|
target = if /#/.match?(node["target"])
|
41
|
-
node["target"].sub(
|
41
|
+
node["target"].sub("#", ".html#")
|
42
42
|
else
|
43
43
|
"##{node['target']}"
|
44
44
|
end
|
@@ -150,7 +150,7 @@ module IsoDoc
|
|
150
150
|
end
|
151
151
|
|
152
152
|
def error_parse(node, out)
|
153
|
-
text = node.to_xml.gsub(
|
153
|
+
text = node.to_xml.gsub("<", "<").gsub(">", ">")
|
154
154
|
out.para do |p|
|
155
155
|
p.b(role: "strong") { |e| e << text }
|
156
156
|
end
|
@@ -145,21 +145,20 @@ module IsoDoc
|
|
145
145
|
|
146
146
|
def norm_ref_xpath
|
147
147
|
"//bibliography/references[@normative = 'true'] | " \
|
148
|
-
"//bibliography/clause[.//references[@normative = 'true']]"
|
148
|
+
"//bibliography/clause[.//references[@normative = 'true']] | " \
|
149
|
+
"//sections/references[@normative = 'true'] | " \
|
150
|
+
"//sections/clause[.//references[@normative = 'true']]"
|
149
151
|
end
|
150
152
|
|
151
|
-
def norm_ref(
|
152
|
-
|
153
|
-
return num
|
153
|
+
def norm_ref(node, out)
|
154
|
+
node["hidden"] != "true" or return
|
154
155
|
out.div do |div|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
else biblio_list(f, div, false)
|
156
|
+
clause_name(node, node.at(ns("./title")), div, nil)
|
157
|
+
if node.name == "clause"
|
158
|
+
node.elements.each { |e| parse(e, div) unless e.name == "title" }
|
159
|
+
else biblio_list(node, div, false)
|
160
160
|
end
|
161
161
|
end
|
162
|
-
num
|
163
162
|
end
|
164
163
|
|
165
164
|
def bibliography_xpath
|
@@ -168,15 +167,14 @@ module IsoDoc
|
|
168
167
|
"//bibliography/references[@normative = 'false']"
|
169
168
|
end
|
170
169
|
|
171
|
-
def bibliography(
|
172
|
-
|
173
|
-
return
|
170
|
+
def bibliography(node, out)
|
171
|
+
node["hidden"] != "true" or return
|
174
172
|
page_break(out)
|
175
173
|
out.div do |div|
|
176
174
|
div.h1 class: "Section3" do |h1|
|
177
|
-
|
175
|
+
node.at(ns("./title"))&.children&.each { |c2| parse(c2, h1) }
|
178
176
|
end
|
179
|
-
biblio_list(
|
177
|
+
biblio_list(node, div, true)
|
180
178
|
end
|
181
179
|
end
|
182
180
|
|
@@ -17,13 +17,11 @@ module IsoDoc
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def clause(
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
parse(c1, s)
|
26
|
-
end
|
20
|
+
def clause(node, out)
|
21
|
+
out.div **attr_code(clause_attrs(node)) do |s|
|
22
|
+
clause_name(node, node.at(ns("./title")), s, nil)
|
23
|
+
node.elements.reject { |c1| c1.name == "title" }.each do |c1|
|
24
|
+
parse(c1, s)
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end
|
@@ -32,44 +30,40 @@ module IsoDoc
|
|
32
30
|
{ id: node["id"], class: "Section3" }
|
33
31
|
end
|
34
32
|
|
35
|
-
def annex(
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
else parse(c1, s)
|
42
|
-
end
|
33
|
+
def annex(node, out)
|
34
|
+
page_break(out)
|
35
|
+
out.div **attr_code(annex_attrs(node)) do |s|
|
36
|
+
node.elements.each do |c1|
|
37
|
+
if c1.name == "title" then annex_name(node, c1, s)
|
38
|
+
else parse(c1, s)
|
43
39
|
end
|
44
40
|
end
|
45
41
|
end
|
46
42
|
end
|
47
43
|
|
48
|
-
def
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
44
|
+
def indexsect(node, out)
|
45
|
+
clause_parse(node, out)
|
46
|
+
end
|
47
|
+
|
48
|
+
def scope(node, out)
|
49
|
+
out.div **attr_code(id: node["id"]) do |div|
|
50
|
+
clause_name(node, node.at(ns("./title")), div, nil)
|
51
|
+
node.elements.each do |e|
|
54
52
|
parse(e, div) unless e.name == "title"
|
55
53
|
end
|
56
54
|
end
|
57
|
-
num
|
58
55
|
end
|
59
56
|
|
60
57
|
TERM_CLAUSE = "//sections/terms | " \
|
61
58
|
"//sections/clause[descendant::terms]".freeze
|
62
59
|
|
63
|
-
def terms_defs(
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
clause_name(f, f.at(ns("./title")), div, nil)
|
68
|
-
f.elements.each do |e|
|
60
|
+
def terms_defs(node, out)
|
61
|
+
out.div **attr_code(id: node["id"]) do |div|
|
62
|
+
clause_name(node, node.at(ns("./title")), div, nil)
|
63
|
+
node.elements.each do |e|
|
69
64
|
parse(e, div) unless %w{title source}.include? e.name
|
70
65
|
end
|
71
66
|
end
|
72
|
-
num
|
73
67
|
end
|
74
68
|
|
75
69
|
# subclause
|
@@ -77,16 +71,13 @@ module IsoDoc
|
|
77
71
|
clause_parse(isoxml, out)
|
78
72
|
end
|
79
73
|
|
80
|
-
def symbols_abbrevs(
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
clause_name(f, f.at(ns("./title")), div, nil)
|
85
|
-
f.elements.each do |e|
|
74
|
+
def symbols_abbrevs(node, out)
|
75
|
+
out.div **attr_code(id: node["id"], class: "Symbols") do |div|
|
76
|
+
clause_name(node, node.at(ns("./title")), div, nil)
|
77
|
+
node.elements.each do |e|
|
86
78
|
parse(e, div) unless e.name == "title"
|
87
79
|
end
|
88
80
|
end
|
89
|
-
num
|
90
81
|
end
|
91
82
|
|
92
83
|
# subclause
|
@@ -171,15 +162,14 @@ module IsoDoc
|
|
171
162
|
end
|
172
163
|
end
|
173
164
|
|
174
|
-
def colophon(
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
end
|
165
|
+
def colophon(node, out)
|
166
|
+
@seen_colophon or page_break(out)
|
167
|
+
@seen_colophon = true
|
168
|
+
out.div class: "Section3", id: node["id"] do |div|
|
169
|
+
clause_name(node, node.at(ns("./title")), div,
|
170
|
+
{ class: "IntroTitle" })
|
171
|
+
node.elements.each do |e|
|
172
|
+
parse(e, div) unless e.name == "title"
|
183
173
|
end
|
184
174
|
end
|
185
175
|
end
|
@@ -194,24 +184,6 @@ module IsoDoc
|
|
194
184
|
t.size == 1 && %w(terms definitions references).include?(t[0].name)
|
195
185
|
end
|
196
186
|
|
197
|
-
def front(isoxml, out)
|
198
|
-
p = isoxml.at(ns("//preface")) or return
|
199
|
-
p.elements.each do |e|
|
200
|
-
if is_clause?(e.name)
|
201
|
-
case e.name
|
202
|
-
when "abstract" then abstract e, out
|
203
|
-
when "foreword" then foreword e, out
|
204
|
-
when "introduction" then introduction e, out
|
205
|
-
when "executivesummary" then executivesummary e, out
|
206
|
-
when "clause" then preface e, out
|
207
|
-
when "acknowledgements" then acknowledgements e, out
|
208
|
-
end
|
209
|
-
else
|
210
|
-
preface_block(e, out)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
187
|
def executivesummary(clause, out)
|
216
188
|
introduction clause, out
|
217
189
|
end
|
@@ -56,7 +56,6 @@ module IsoDoc
|
|
56
56
|
|
57
57
|
# top level clause names
|
58
58
|
def clause_name(node, title, div, header_class)
|
59
|
-
preceding_floating_titles(node, div)
|
60
59
|
header_class = {} if header_class.nil?
|
61
60
|
div.h1 **attr_code(header_class) do |h1|
|
62
61
|
if title.is_a?(String) then h1 << title
|
@@ -69,7 +68,6 @@ module IsoDoc
|
|
69
68
|
end
|
70
69
|
|
71
70
|
def annex_name(_annex, name, div)
|
72
|
-
preceding_floating_titles(name, div)
|
73
71
|
return if name.nil?
|
74
72
|
|
75
73
|
div.h1 class: "Annex" do |t|
|
@@ -84,18 +82,6 @@ module IsoDoc
|
|
84
82
|
node.children.each { |c| parse(c, p) }
|
85
83
|
end
|
86
84
|
end
|
87
|
-
|
88
|
-
def preceding_floating_titles(node, div)
|
89
|
-
return if node.nil?
|
90
|
-
|
91
|
-
out = node.xpath("./preceding-sibling::*")
|
92
|
-
.reverse.each_with_object([]) do |p, m|
|
93
|
-
break m unless p.name == "p"
|
94
|
-
|
95
|
-
m << p
|
96
|
-
end or return
|
97
|
-
out.each { |c| parse(c, div) }
|
98
|
-
end
|
99
85
|
end
|
100
86
|
end
|
101
87
|
end
|
@@ -82,20 +82,57 @@ module IsoDoc
|
|
82
82
|
section_break(body)
|
83
83
|
end
|
84
84
|
|
85
|
+
TOP_ELEMENTS =
|
86
|
+
"//preface/*[@displayorder] | //sections/*[@displayorder] | " \
|
87
|
+
"//annex[@displayorder] | //bibliography/*[@displayorder] | " \
|
88
|
+
"//colophon/*[@displayorder] | //indexsect[@displayorder]"
|
89
|
+
.freeze
|
90
|
+
|
85
91
|
def make_body3(body, docxml)
|
86
92
|
body.div class: "main-section" do |div3|
|
87
93
|
boilerplate docxml, div3
|
88
|
-
|
89
|
-
abstract docxml, div3
|
90
|
-
foreword docxml, div3
|
91
|
-
introduction docxml, div3
|
92
|
-
acknowledgements docxml, div3
|
93
|
-
middle docxml, div3
|
94
|
+
content(div3, docxml, ns(self.class::TOP_ELEMENTS))
|
94
95
|
footnotes div3
|
95
96
|
comments div3
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
100
|
+
# xpath presumed to list elements with displayorder attribute
|
101
|
+
def content(body, docxml, xpath)
|
102
|
+
docxml.xpath(xpath).sort_by { |c| c["displayorder"].to_i }
|
103
|
+
.each do |c|
|
104
|
+
top_element_render(c, body)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def top_element_render(e, out)
|
109
|
+
case e.name
|
110
|
+
when "abstract" then abstract e, out
|
111
|
+
when "foreword" then foreword e, out
|
112
|
+
when "introduction" then introduction e, out
|
113
|
+
when "executivesummary" then executivesummary e, out
|
114
|
+
when "acknowledgements" then acknowledgements e, out
|
115
|
+
when "annex" then annex e, out
|
116
|
+
when "definitions" then symbols_abbrevs e, out
|
117
|
+
when "indexsect" then indexsect e, out
|
118
|
+
when "references"
|
119
|
+
if e["normative"] == "true" then norm_ref e, out
|
120
|
+
else bibliography e, out
|
121
|
+
end
|
122
|
+
when "clause"
|
123
|
+
if e.parent.name == "preface" then preface e, out
|
124
|
+
elsif e.parent.name == "colophon" then colophon e, out
|
125
|
+
elsif e["type"] == "scope" then scope e, out
|
126
|
+
elsif e.at(ns(".//terms")) then terms_defs e, out
|
127
|
+
elsif e.at(ns(".//references[@normative = 'true']"))
|
128
|
+
norm_ref e, out
|
129
|
+
elsif e.at(ns(".//references")) then bibliography e, out
|
130
|
+
else clause e, out
|
131
|
+
end
|
132
|
+
else parse(e, out)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
99
136
|
def info(isoxml, out)
|
100
137
|
@meta.code_css isoxml, out
|
101
138
|
@meta.title isoxml, out
|
@@ -116,22 +153,8 @@ module IsoDoc
|
|
116
153
|
@meta.get
|
117
154
|
end
|
118
155
|
|
119
|
-
def middle(isoxml, out)
|
120
|
-
middle_title(isoxml, out)
|
121
|
-
middle_admonitions(isoxml, out)
|
122
|
-
scope isoxml, out, 0
|
123
|
-
norm_ref isoxml, out, 0
|
124
|
-
terms_defs isoxml, out, 0
|
125
|
-
symbols_abbrevs isoxml, out, 0
|
126
|
-
clause isoxml, out
|
127
|
-
annex isoxml, out
|
128
|
-
bibliography isoxml, out
|
129
|
-
colophon isoxml, out
|
130
|
-
end
|
131
|
-
|
132
156
|
def boilerplate(node, out)
|
133
|
-
|
134
|
-
|
157
|
+
@bare and return
|
135
158
|
boilerplate = node.at(ns("//boilerplate")) or return
|
136
159
|
out.div class: "authority" do |s|
|
137
160
|
boilerplate.children.each do |n|
|
@@ -176,6 +176,7 @@ module IsoDoc
|
|
176
176
|
imgtype = "emf" if emf?("#{imgclass}/#{imgtype}")
|
177
177
|
imgtype = imgtype.sub(/\+[a-z0-9]+$/, "") # svg+xml
|
178
178
|
imgtype = "png" unless /^[a-z0-9]+$/.match? imgtype
|
179
|
+
imgtype == "postscript" and imgtype = "eps"
|
179
180
|
Tempfile.open(["image", ".#{imgtype}"]) do |f|
|
180
181
|
f.binmode
|
181
182
|
f.write(Base64.strict_decode64(imgdata))
|
@@ -36,7 +36,7 @@ module IsoDoc
|
|
36
36
|
|
37
37
|
def make_generic_footnote_text(node, fnid)
|
38
38
|
noko do |xml|
|
39
|
-
xml.aside
|
39
|
+
xml.aside id: "fn:#{fnid}", class: "footnote" do |div|
|
40
40
|
node.children.each { |n| parse(n, div) }
|
41
41
|
end
|
42
42
|
end.join("\n")
|
@@ -59,7 +59,7 @@ module IsoDoc
|
|
59
59
|
return if @seen_footnote.include?(tid + fn)
|
60
60
|
|
61
61
|
@in_footnote = true
|
62
|
-
out.aside
|
62
|
+
out.aside class: "footnote" do |a|
|
63
63
|
a << make_table_footnote_text(node, tid + fn, fn)
|
64
64
|
end
|
65
65
|
@in_footnote = false
|
@@ -33,16 +33,6 @@ module IsoDoc
|
|
33
33
|
section_break(body)
|
34
34
|
end
|
35
35
|
|
36
|
-
def make_body3(body, docxml)
|
37
|
-
body.div class: "main-section" do |div3|
|
38
|
-
boilerplate docxml, div3
|
39
|
-
front docxml, div3
|
40
|
-
middle docxml, div3
|
41
|
-
footnotes div3
|
42
|
-
comments div3
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
36
|
def googlefonts
|
47
37
|
<<~HEAD.freeze
|
48
38
|
<link href="https://fonts.googleapis.com/css?family=Overpass:300,300i,600,900" rel="stylesheet"/>
|
data/lib/isodoc/init.rb
CHANGED
@@ -21,9 +21,9 @@ module IsoDoc
|
|
21
21
|
def toc_init(docxml)
|
22
22
|
x = "//metanorma-extension/presentation-metadata" \
|
23
23
|
"[name[text() = 'TOC Heading Levels']]/value"
|
24
|
-
n = docxml.at(ns(x.sub(
|
24
|
+
n = docxml.at(ns(x.sub("TOC", "DOC TOC"))) and
|
25
25
|
@wordToClevels = n.text.to_i
|
26
|
-
n = docxml.at(ns(x.sub(
|
26
|
+
n = docxml.at(ns(x.sub("TOC", "HTML TOC"))) and
|
27
27
|
@htmlToClevels = n.text.to_i
|
28
28
|
end
|
29
29
|
|
@@ -93,7 +93,7 @@ module IsoDoc
|
|
93
93
|
@fn_bookmarks = {}
|
94
94
|
end
|
95
95
|
|
96
|
-
|
96
|
+
def init_fonts(options)
|
97
97
|
@normalfontsize = options[:normalfontsize]
|
98
98
|
@smallerfontsize = options[:smallerfontsize]
|
99
99
|
@monospacefontsize = options[:monospacefontsize]
|
@@ -129,5 +129,13 @@ module IsoDoc
|
|
129
129
|
@toctables = options[:toctables]
|
130
130
|
@tocrecommendations = options[:tocrecommendations]
|
131
131
|
end
|
132
|
+
|
133
|
+
AGENCIES = %w(ISO IEC ITU IETF NIST OGC IEEE BIPM BSI BS JIS IANA UN W3C
|
134
|
+
IHO CSA IEV)
|
135
|
+
.freeze
|
136
|
+
|
137
|
+
def agency?(text)
|
138
|
+
self.class::AGENCIES.include?(text)
|
139
|
+
end
|
132
140
|
end
|
133
141
|
end
|
data/lib/isodoc/metadata.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require_relative "
|
2
|
-
require_relative "
|
1
|
+
require_relative "metadata_date"
|
2
|
+
require_relative "metadata_contributor"
|
3
3
|
|
4
4
|
module IsoDoc
|
5
5
|
class Metadata
|
@@ -15,7 +15,7 @@ module IsoDoc
|
|
15
15
|
|
16
16
|
def initialize(lang, script, locale, i18n, fonts_options = {})
|
17
17
|
@metadata = { lang: lang, script: script }
|
18
|
-
DATETYPES.each { |w| @metadata["#{w.gsub(
|
18
|
+
DATETYPES.each { |w| @metadata["#{w.gsub('-', '_')}date".to_sym] = "XXX" }
|
19
19
|
@lang = lang
|
20
20
|
@script = script
|
21
21
|
@locale = locale
|
@@ -67,7 +67,7 @@ module IsoDoc
|
|
67
67
|
publisher = []
|
68
68
|
xml.xpath(ns("//bibdata/contributor[xmlns:role/@type = 'publisher']/" \
|
69
69
|
"organization")).each do |org|
|
70
|
-
name = org.at(ns("./name"))
|
70
|
+
name = extract_variant(org.at(ns("./name")))
|
71
71
|
agency1 = org.at(ns("./abbreviation"))&.text || name
|
72
72
|
publisher << name if name
|
73
73
|
agency = iso?(org) ? "ISO/#{agency}" : "#{agency}#{agency1}/"
|
@@ -75,6 +75,12 @@ module IsoDoc
|
|
75
75
|
[agency, publisher]
|
76
76
|
end
|
77
77
|
|
78
|
+
def extract_variant(node)
|
79
|
+
node.nil? and return node
|
80
|
+
x = node.at(ns("./variant[@language = '#{@lang}']")) and node = x
|
81
|
+
node.text
|
82
|
+
end
|
83
|
+
|
78
84
|
def agency(xml)
|
79
85
|
agency, publisher = agency1(xml)
|
80
86
|
set(:agency, agency.sub(%r{/$}, ""))
|
@@ -4,7 +4,7 @@ module IsoDoc
|
|
4
4
|
class PresentationXMLConvert < ::IsoDoc::Convert
|
5
5
|
def expand_citeas(text)
|
6
6
|
text.nil? and return text
|
7
|
-
HTMLEntities.new.decode(text.gsub(
|
7
|
+
HTMLEntities.new.decode(text.gsub("&#x", "&#"))
|
8
8
|
end
|
9
9
|
|
10
10
|
def erefstack1(elem)
|
@@ -84,7 +84,7 @@ module IsoDoc
|
|
84
84
|
locs1 = []
|
85
85
|
until locs.empty?
|
86
86
|
if locs[1] == "to"
|
87
|
-
locs1 << @i18n.chain_to.sub(
|
87
|
+
locs1 << @i18n.chain_to.sub("%1", locs[0]).sub("%2", locs[2])
|
88
88
|
locs.shift(3)
|
89
89
|
else locs1 << locs.shift
|
90
90
|
end
|