isodoc 2.11.4 → 2.12.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/isodoc.gemspec +1 -1
- data/lib/isodoc/function/blocks.rb +12 -41
- data/lib/isodoc/function/blocks_example_note.rb +37 -14
- data/lib/isodoc/function/cleanup.rb +3 -40
- data/lib/isodoc/function/inline.rb +8 -1
- data/lib/isodoc/function/lists.rb +1 -1
- data/lib/isodoc/function/references.rb +4 -128
- data/lib/isodoc/function/section.rb +1 -4
- data/lib/isodoc/function/section_titles.rb +1 -1
- data/lib/isodoc/function/table.rb +2 -2
- data/lib/isodoc/function/terms.rb +8 -10
- data/lib/isodoc/function/to_word_html.rb +3 -5
- data/lib/isodoc/function/utils.rb +1 -1
- data/lib/isodoc/init.rb +21 -0
- data/lib/isodoc/metadata.rb +1 -1
- data/lib/isodoc/presentation_function/block.rb +58 -8
- data/lib/isodoc/presentation_function/docid.rb +101 -0
- data/lib/isodoc/presentation_function/erefs.rb +2 -2
- data/lib/isodoc/presentation_function/image.rb +31 -8
- data/lib/isodoc/presentation_function/inline.rb +5 -5
- data/lib/isodoc/presentation_function/math.rb +0 -14
- data/lib/isodoc/presentation_function/metadata.rb +0 -62
- data/lib/isodoc/presentation_function/refs.rb +44 -14
- data/lib/isodoc/presentation_function/section.rb +12 -15
- data/lib/isodoc/presentation_function/terms.rb +27 -1
- data/lib/isodoc/presentation_xml_convert.rb +4 -1
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +3 -3
- data/lib/isodoc/xref/clause_order.rb +2 -2
- data/lib/isodoc/xref/xref_anchor.rb +1 -1
- data/lib/isodoc/xref/xref_counter.rb +18 -3
- data/lib/isodoc/xref/xref_counter_types.rb +13 -0
- data/lib/isodoc/xref/xref_gen.rb +6 -7
- data/lib/isodoc/xref/xref_sect_gen.rb +16 -31
- data/lib/isodoc/xref/xref_util.rb +6 -0
- data/lib/isodoc/xref.rb +26 -10
- data/lib/isodoc-yaml/i18n-ja.yaml +13 -13
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1936cca0c61f789903af805b809d73c8dbae298e4bc6569c533274dbf5d8eac5
|
4
|
+
data.tar.gz: 3bc62ddb747526969bf2c36d10ffab8e0b0008e827ee7b6634f566c925d5db8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3f526f015973c666f70749ee97708d992c455d9d0d8273cb8389f73090a9926f66cdb616d1d2b13f2737ab53248103674cf34bec46ab5cff42f3bd678bb43b9
|
7
|
+
data.tar.gz: cf3c0a4afbc963c4ab579bf36ab252030f882f794b8b27e734b58f8e8d4c99a6e9b40b283e8dd1d089cb1b9d16aeb9d47e3040cbfb84014e2f60a1a4150b4c15
|
data/isodoc.gemspec
CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
|
|
34
34
|
# spec.add_dependency "isodoc-i18n", "~> 1.1.0" # already in relaton-render and mn-requirements
|
35
35
|
# spec.add_dependency "relaton-cli"
|
36
36
|
# spec.add_dependency "metanorma-utils", "~> 1.5.0" # already in isodoc-i18n
|
37
|
-
spec.add_dependency "mn2pdf"
|
37
|
+
spec.add_dependency "mn2pdf", ">= 2.08"
|
38
38
|
spec.add_dependency "mn-requirements", "~> 0.4.0"
|
39
39
|
|
40
40
|
spec.add_dependency "relaton-render", "~> 0.7.1"
|
@@ -3,8 +3,6 @@ require_relative "blocks_example_note"
|
|
3
3
|
module IsoDoc
|
4
4
|
module Function
|
5
5
|
module Blocks
|
6
|
-
@annotation = false
|
7
|
-
|
8
6
|
def figure_name_parse(_node, div, name)
|
9
7
|
name.nil? and return
|
10
8
|
div.p class: "FigureTitle", style: "text-align:center;" do |p|
|
@@ -12,20 +10,13 @@ module IsoDoc
|
|
12
10
|
end
|
13
11
|
end
|
14
12
|
|
15
|
-
def figure_key(out)
|
16
|
-
out.p style: "page-break-after:avoid;" do |p|
|
17
|
-
p.b { |b| b << @i18n.key }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
13
|
def figure_attrs(node)
|
22
14
|
attr_code(id: node["id"], class: "figure", style: keep_style(node))
|
23
15
|
end
|
24
16
|
|
25
17
|
def figure_parse(node, out)
|
26
|
-
|
27
|
-
node
|
28
|
-
|
18
|
+
node["class"] == "pseudocode" || node["type"] == "pseudocode" and
|
19
|
+
return pseudocode_parse(node, out)
|
29
20
|
@in_figure = true
|
30
21
|
figure_parse1(node, out)
|
31
22
|
@in_figure = false
|
@@ -34,7 +25,6 @@ module IsoDoc
|
|
34
25
|
def figure_parse1(node, out)
|
35
26
|
out.div **figure_attrs(node) do |div|
|
36
27
|
node.children.each do |n|
|
37
|
-
figure_key(out) if n.name == "dl"
|
38
28
|
parse(n, div) unless n.name == "name"
|
39
29
|
end
|
40
30
|
figure_name_parse(node, div, node.at(ns("./name")))
|
@@ -56,8 +46,7 @@ module IsoDoc
|
|
56
46
|
end
|
57
47
|
|
58
48
|
def sourcecode_name_parse(_node, div, name)
|
59
|
-
|
60
|
-
|
49
|
+
name.nil? and return
|
61
50
|
div.p class: "SourceTitle", style: "text-align:center;" do |p|
|
62
51
|
name.children.each { |n| parse(n, p) }
|
63
52
|
end
|
@@ -95,10 +84,8 @@ module IsoDoc
|
|
95
84
|
def annotation_parse(node, out)
|
96
85
|
dl = node.at(ns("./dl")) or return
|
97
86
|
@sourcecode = false
|
98
|
-
# @annotation = true
|
99
87
|
out.div class: "annotation" do |div|
|
100
88
|
parse(dl, div)
|
101
|
-
# @annotation = false
|
102
89
|
end
|
103
90
|
end
|
104
91
|
|
@@ -108,7 +95,7 @@ module IsoDoc
|
|
108
95
|
parse(node.at(ns("./stem")), div)
|
109
96
|
if lbl = node&.at(ns("./name"))&.text
|
110
97
|
insert_tab(div, 1)
|
111
|
-
div <<
|
98
|
+
div << lbl
|
112
99
|
end
|
113
100
|
end
|
114
101
|
end
|
@@ -122,8 +109,7 @@ module IsoDoc
|
|
122
109
|
out.div **formula_attrs(node) do |div|
|
123
110
|
formula_parse1(node, div)
|
124
111
|
node.children.each do |n|
|
125
|
-
|
126
|
-
|
112
|
+
%w(stem name).include? n.name and next
|
127
113
|
parse(n, div)
|
128
114
|
end
|
129
115
|
end
|
@@ -132,10 +118,8 @@ module IsoDoc
|
|
132
118
|
def para_class(node)
|
133
119
|
classtype = nil
|
134
120
|
classtype = "MsoCommentText" if in_comment
|
135
|
-
|
136
|
-
if node["type"] == "floating-title"
|
121
|
+
node["type"] == "floating-title" and
|
137
122
|
classtype = "h#{node['depth']}"
|
138
|
-
end
|
139
123
|
classtype ||= node["class"]
|
140
124
|
classtype
|
141
125
|
end
|
@@ -150,22 +134,13 @@ module IsoDoc
|
|
150
134
|
|
151
135
|
def para_parse(node, out)
|
152
136
|
out.p **attr_code(para_attrs(node)) do |p|
|
153
|
-
unless @termdomain.empty?
|
154
|
-
p << "<#{@termdomain}> "
|
155
|
-
@termdomain = ""
|
156
|
-
end
|
157
137
|
node.children.each { |n| parse(n, p) }
|
158
138
|
end
|
159
139
|
end
|
160
140
|
|
161
|
-
def
|
162
|
-
|
163
|
-
|
164
|
-
author.nil? && source.nil? and return
|
165
|
-
out.p class: "QuoteAttribution" do |p|
|
166
|
-
p << "— #{author.text}" if author
|
167
|
-
p << ", " if author && source
|
168
|
-
eref_parse(source, p) if source
|
141
|
+
def attribution_parse(node, out)
|
142
|
+
out.div class: "QuoteAttribution" do |d|
|
143
|
+
node.children.each { |n| parse(n, d) }
|
169
144
|
end
|
170
145
|
end
|
171
146
|
|
@@ -173,17 +148,13 @@ module IsoDoc
|
|
173
148
|
attrs = para_attrs(node)
|
174
149
|
attrs[:class] = "Quote"
|
175
150
|
out.div **attr_code(attrs) do |p|
|
176
|
-
node.children.each
|
177
|
-
parse(n, p) unless %w(author source).include? n.name
|
178
|
-
end
|
179
|
-
quote_attribution(node, out)
|
151
|
+
node.children.each { |n| parse(n, p) }
|
180
152
|
end
|
181
153
|
end
|
182
154
|
|
183
155
|
def passthrough_parse(node, out)
|
184
|
-
|
185
|
-
!(node["
|
186
|
-
|
156
|
+
node["formats"] &&
|
157
|
+
!(node["formats"].split(" ").include? @format.to_s) and return
|
187
158
|
out.passthrough node.text
|
188
159
|
end
|
189
160
|
|
@@ -2,8 +2,7 @@ module IsoDoc
|
|
2
2
|
module Function
|
3
3
|
module Blocks
|
4
4
|
def example_label(_node, div, name)
|
5
|
-
|
6
|
-
|
5
|
+
name.nil? and return
|
7
6
|
div.p class: "example-title" do |_p|
|
8
7
|
name.children.each { |n| parse(n, div) }
|
9
8
|
end
|
@@ -53,28 +52,22 @@ module IsoDoc
|
|
53
52
|
example_div_parse(node, out)
|
54
53
|
end
|
55
54
|
|
56
|
-
def note_delim
|
57
|
-
""
|
58
|
-
end
|
59
|
-
|
60
55
|
def note_p_parse(node, div)
|
61
56
|
name = node.at(ns("./name"))&.remove
|
62
57
|
div.p do |p|
|
63
58
|
name and p.span class: "note_label" do |s|
|
64
59
|
name.children.each { |n| parse(n, s) }
|
65
|
-
s << note_delim
|
66
60
|
end
|
67
61
|
insert_tab(p, 1)
|
68
62
|
node.first_element_child.children.each { |n| parse(n, p) }
|
69
63
|
end
|
70
|
-
node.element_children[1
|
64
|
+
node.element_children[1..].each { |n| parse(n, div) }
|
71
65
|
end
|
72
66
|
|
73
67
|
def note_parse1(node, div)
|
74
68
|
name = node.at(ns("./name")) and div.p do |p|
|
75
69
|
p.span class: "note_label" do |s|
|
76
70
|
name.remove.children.each { |n| parse(n, s) }
|
77
|
-
s << note_delim
|
78
71
|
end
|
79
72
|
insert_tab(p, 1)
|
80
73
|
end
|
@@ -130,12 +123,42 @@ module IsoDoc
|
|
130
123
|
end
|
131
124
|
|
132
125
|
def admonition_parse(node, out)
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
126
|
+
out.div **admonition_attrs(node) do |div|
|
127
|
+
if node&.at(ns("./*[local-name() != 'name'][1]"))&.name == "p"
|
128
|
+
admonition_p_parse(node, div)
|
129
|
+
else
|
130
|
+
admonition_parse1(node, div)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# code to allow name and first paragraph to be rendered in same block
|
136
|
+
def admonition_p_parse(node, div)
|
137
|
+
admonition_parse1(node, div)
|
138
|
+
end
|
139
|
+
|
140
|
+
# code to allow name and first paragraph to be rendered in same block
|
141
|
+
def admonition_name_in_first_para(node, div)
|
142
|
+
div.p do |p|
|
143
|
+
if name = admonition_name(node, node["type"])&.remove
|
144
|
+
name.children.each { |n| parse(n, p) }
|
145
|
+
admonition_name_para_delim(p)
|
146
|
+
end
|
147
|
+
node.first_element_child.children.each { |n| parse(n, p) }
|
148
|
+
end
|
149
|
+
node.element_children[1..].each { |n| parse(n, div) }
|
150
|
+
end
|
151
|
+
|
152
|
+
def admonition_name_para_delim(para)
|
153
|
+
insert_tab(para, 1)
|
154
|
+
end
|
155
|
+
|
156
|
+
def admonition_parse1(node, div)
|
157
|
+
name = admonition_name(node, node["type"])
|
158
|
+
if name
|
159
|
+
admonition_name_parse(node, div, name)
|
138
160
|
end
|
161
|
+
node.children.each { |n| parse(n, div) unless n.name == "name" }
|
139
162
|
end
|
140
163
|
end
|
141
164
|
end
|
@@ -25,6 +25,7 @@ module IsoDoc
|
|
25
25
|
admonition_cleanup(docxml)
|
26
26
|
end
|
27
27
|
|
28
|
+
# todo PRESENTATION XML
|
28
29
|
def admonition_cleanup(docxml)
|
29
30
|
docxml.xpath("//div[@class = 'Admonition'][title]").each do |d|
|
30
31
|
title = d.at("./title")
|
@@ -42,45 +43,7 @@ module IsoDoc
|
|
42
43
|
docxml
|
43
44
|
end
|
44
45
|
|
45
|
-
def
|
46
|
-
dl = elem.at(".//dl")
|
47
|
-
if dl.nil?
|
48
|
-
elem.add_child("<p><b>#{@i18n.key}</b></p><dl></dl>")
|
49
|
-
dl = elem.at(".//dl")
|
50
|
-
end
|
51
|
-
dl
|
52
|
-
end
|
53
|
-
|
54
|
-
FIGURE_WITH_FOOTNOTES =
|
55
|
-
"//div[@class = 'figure'][descendant::aside]" \
|
56
|
-
"[not(descendant::div[@class = 'figure'])]".freeze
|
57
|
-
|
58
|
-
def figure_aside_process(elem, aside, key)
|
59
|
-
# get rid of footnote link, it is in diagram
|
60
|
-
elem&.at("./a[@class='TableFootnoteRef']")&.remove
|
61
|
-
fnref = elem.at(".//span[@class='TableFootnoteRef']/..")
|
62
|
-
dt = key.add_child("<dt></dt>").first
|
63
|
-
dd = key.add_child("<dd></dd>").first
|
64
|
-
fnref.parent = dt
|
65
|
-
aside.xpath(".//p").each do |a|
|
66
|
-
a.delete("class")
|
67
|
-
a.parent = dd
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# move footnotes into key, and get rid of footnote reference
|
72
|
-
# since it is in diagram
|
73
|
-
def figure_cleanup(docxml)
|
74
|
-
docxml.xpath(FIGURE_WITH_FOOTNOTES).each do |f|
|
75
|
-
next unless f.at(".//aside[not(ancestor::p[@class = 'FigureTitle'])]")
|
76
|
-
|
77
|
-
key = figure_get_or_make_dl(f)
|
78
|
-
f.xpath(".//aside").each do |aside|
|
79
|
-
figure_aside_process(f, aside, key)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
docxml
|
83
|
-
end
|
46
|
+
def figure_cleanup(docxml); end
|
84
47
|
|
85
48
|
def inline_header_cleanup(docxml)
|
86
49
|
docxml.xpath('//span[@class="zzMoveToFollowing"]').each do |x|
|
@@ -89,13 +52,13 @@ module IsoDoc
|
|
89
52
|
if n.nil?
|
90
53
|
x.name = "p"
|
91
54
|
else
|
92
|
-
#n.children.first.previous = x.remove
|
93
55
|
n.add_first_child(x.remove)
|
94
56
|
end
|
95
57
|
end
|
96
58
|
docxml
|
97
59
|
end
|
98
60
|
|
61
|
+
# todo PRESENTATION XML
|
99
62
|
def footnote_cleanup(docxml)
|
100
63
|
docxml.xpath('//a[@class = "FootnoteRef"]/sup')
|
101
64
|
.each_with_index do |x, i|
|
@@ -8,7 +8,8 @@ module IsoDoc
|
|
8
8
|
node["update-type"] == "true" and url = suffix_url(url)
|
9
9
|
out.a **attr_code(href: url, title: node["alt"]) do |l|
|
10
10
|
if node.elements.empty? && node.text.strip.empty?
|
11
|
-
l << @c.encode(node["target"].sub(/^mailto:/, ""), :basic,
|
11
|
+
l << @c.encode(node["target"].sub(/^mailto:/, ""), :basic,
|
12
|
+
:hexadecimal)
|
12
13
|
else node.children.each { |n| parse(n, l) }
|
13
14
|
end
|
14
15
|
end
|
@@ -26,6 +27,7 @@ module IsoDoc
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
30
|
+
# todo PRESENTATION XML
|
29
31
|
def callout_parse(node, out)
|
30
32
|
out << " <#{node.text}>"
|
31
33
|
end
|
@@ -64,6 +66,7 @@ module IsoDoc
|
|
64
66
|
end
|
65
67
|
end
|
66
68
|
|
69
|
+
# todo PRESENTATION XML
|
67
70
|
def termrefelem_parse(node, out)
|
68
71
|
if node.text.strip.empty?
|
69
72
|
out << "Termbase #{node['base']}, term ID #{node['target']}"
|
@@ -179,6 +182,10 @@ module IsoDoc
|
|
179
182
|
node.children.each { |n| parse(n, e) }
|
180
183
|
end
|
181
184
|
end
|
185
|
+
|
186
|
+
def author_parse(node, out)
|
187
|
+
node.children.each { |n| parse(n, out) }
|
188
|
+
end
|
182
189
|
end
|
183
190
|
end
|
184
191
|
end
|
@@ -1,16 +1,7 @@
|
|
1
1
|
module IsoDoc
|
2
2
|
module Function
|
3
3
|
module References
|
4
|
-
|
5
|
-
# references anyway; keeping here instead of in IsoDoc::Iso for now
|
6
|
-
def docid_l10n(text)
|
7
|
-
text.nil? and return text
|
8
|
-
@i18n.all_parts and text.gsub!(/All Parts/i, @i18n.all_parts.downcase)
|
9
|
-
text.size < 20 and text.gsub!(/ /, " ")
|
10
|
-
text
|
11
|
-
end
|
12
|
-
|
13
|
-
def nonstd_bibitem(list, bib, _ordinal, biblio)
|
4
|
+
def bibitem_entry(list, bib, _ordinal, biblio)
|
14
5
|
list.p **attr_code(iso_bibitem_entry_attrs(bib, biblio)) do |ref|
|
15
6
|
tag = bib.at(ns("./biblio-tag"))
|
16
7
|
tag&.children&.each { |n| parse(n, ref) }
|
@@ -18,137 +9,22 @@ module IsoDoc
|
|
18
9
|
end
|
19
10
|
end
|
20
11
|
|
21
|
-
def std_bibitem_entry(list, bib, _ordinal, biblio)
|
22
|
-
list.p **attr_code(iso_bibitem_entry_attrs(bib, biblio)) do |ref|
|
23
|
-
tag = bib.at(ns("./biblio-tag"))
|
24
|
-
tag&.children&.each { |n| parse(n, ref) }
|
25
|
-
reference_format(bib, ref)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
SKIP_DOCID = <<~XPATH.strip.freeze
|
30
|
-
@type = 'DOI' or @type = 'doi' or @type = 'ISSN' or @type = 'issn' or @type = 'ISBN' or @type = 'isbn' or starts-with(@type, 'ISSN.') or starts-with(@type, 'ISBN.') or starts-with(@type, 'issn.') or starts-with(@type, 'isbn.')
|
31
|
-
XPATH
|
32
|
-
|
33
|
-
def pref_ref_code(bib)
|
34
|
-
bib["suppress_identifier"] == "true" and return nil
|
35
|
-
ret = bib.xpath(ns("./docidentifier[@scope = 'biblio-tag']"))
|
36
|
-
ret.empty? or return ret.map(&:text)
|
37
|
-
ret = pref_ref_code_parse(bib) or return nil
|
38
|
-
ins = bib.at(ns("./docidentifier[last()]"))
|
39
|
-
ret.reverse.each do |r|
|
40
|
-
ins.next = "<docidentifier scope='biblio-tag'>#{docid_l10n(r)}</docidentifier>"
|
41
|
-
end
|
42
|
-
ret
|
43
|
-
end
|
44
|
-
|
45
|
-
def pref_ref_code_parse(bib)
|
46
|
-
data, = @bibrender.parse(bib)
|
47
|
-
ret = data[:authoritative_identifier] or return nil
|
48
|
-
ret.empty? and return nil
|
49
|
-
ret
|
50
|
-
end
|
51
|
-
|
52
|
-
# returns [metanorma, non-metanorma, DOI/ISSN/ISBN] identifiers
|
53
|
-
def bibitem_ref_code(bib)
|
54
|
-
id, id1, id2, id3 = bibitem_ref_code_prep(bib)
|
55
|
-
id || id1 || id2 || id3 and return [id, id1, id2, id3]
|
56
|
-
bib["suppress_identifier"] == "true" and return [nil, nil, nil, nil]
|
57
|
-
[nil, no_identifier(bib), nil, nil]
|
58
|
-
end
|
59
|
-
|
60
|
-
def bibitem_ref_code_prep(bib)
|
61
|
-
id = bib.at(ns("./docidentifier[@type = 'metanorma']"))
|
62
|
-
id1 = pref_ref_code(bib)
|
63
|
-
id2 = bib.at(ns("./docidentifier[#{SKIP_DOCID}]"))
|
64
|
-
id3 = bib.at(ns("./docidentifier[@type = 'metanorma-ordinal']"))
|
65
|
-
[id, id1, id2, id3]
|
66
|
-
end
|
67
|
-
|
68
|
-
def no_identifier(bib)
|
69
|
-
@i18n.no_identifier or return nil
|
70
|
-
id = Nokogiri::XML::Node.new("docidentifier", bib.document)
|
71
|
-
id << @i18n.no_identifier
|
72
|
-
id
|
73
|
-
end
|
74
|
-
|
75
|
-
def bracket_if_num(num)
|
76
|
-
num.nil? and return nil
|
77
|
-
num = num.text.sub(/^\[/, "").sub(/\]$/, "")
|
78
|
-
/^\d+$/.match?(num) and return "[#{num}]"
|
79
|
-
num
|
80
|
-
end
|
81
|
-
|
82
|
-
def unbracket1(ident)
|
83
|
-
ident.nil? and return nil
|
84
|
-
ident.is_a?(String) or ident = ident.text
|
85
|
-
ident.sub(/^\[/, "").sub(/\]$/, "")
|
86
|
-
end
|
87
|
-
|
88
|
-
def unbracket(ident)
|
89
|
-
if ident.respond_to?(:size)
|
90
|
-
ident.map { |x| unbracket1(x) }.join(" / ")
|
91
|
-
else
|
92
|
-
unbracket1(ident)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def render_identifier(ident)
|
97
|
-
{ metanorma: bracket_if_num(ident[0]),
|
98
|
-
sdo: unbracket(ident[1]),
|
99
|
-
doi: unbracket(ident[2]),
|
100
|
-
ordinal: bracket_if_num(ident[3]) }
|
101
|
-
end
|
102
|
-
|
103
|
-
def docid_prefix(prefix, docid)
|
104
|
-
docid = "#{prefix} #{docid}" if prefix && !omit_docid_prefix(prefix) &&
|
105
|
-
!/^#{prefix}\b/.match(docid)
|
106
|
-
docid_l10n(docid)
|
107
|
-
end
|
108
|
-
|
109
|
-
def omit_docid_prefix(prefix)
|
110
|
-
return true if prefix.nil? || prefix.empty?
|
111
|
-
|
112
|
-
%w(ISO IEC IEV ITU W3C BIPM csd metanorma repository metanorma-ordinal)
|
113
|
-
.include? prefix
|
114
|
-
end
|
115
|
-
|
116
12
|
def iso_bibitem_entry_attrs(bib, biblio)
|
117
13
|
{ id: bib["id"], class: biblio ? "Biblio" : "NormRef" }
|
118
14
|
end
|
119
15
|
|
120
|
-
# reference not to be rendered because it is deemed implicit
|
121
|
-
# in the standards environment
|
122
|
-
def implicit_reference(bib)
|
123
|
-
bib["hidden"] == "true"
|
124
|
-
end
|
125
|
-
|
126
16
|
def reference_format(bib, out)
|
127
17
|
ftitle = bib.at(ns("./formattedref"))
|
128
18
|
ftitle&.children&.each { |n| parse(n, out) }
|
129
19
|
end
|
130
20
|
|
131
|
-
def standard?(bib)
|
132
|
-
ret = false
|
133
|
-
bib.xpath(ns("./docidentifier")).each do |id|
|
134
|
-
next if id["type"].nil? ||
|
135
|
-
id.at(".//self::*[#{SKIP_DOCID} or @type = 'metanorma']")
|
136
|
-
|
137
|
-
ret = true
|
138
|
-
end
|
139
|
-
ret
|
140
|
-
end
|
141
|
-
|
142
21
|
def biblio_list(refs, div, biblio)
|
143
22
|
i = 0
|
144
23
|
refs.children.each do |b|
|
145
24
|
if b.name == "bibitem"
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
if standard?(b) then std_bibitem_entry(div, b, i, biblio)
|
150
|
-
else nonstd_bibitem(div, b, i, biblio)
|
151
|
-
end
|
25
|
+
b["hidden"] == "true" and next
|
26
|
+
i += 1
|
27
|
+
bibitem_entry(div, b, i, biblio)
|
152
28
|
else
|
153
29
|
parse(b, div) unless %w(title).include? b.name
|
154
30
|
end
|
@@ -82,9 +82,6 @@ module IsoDoc
|
|
82
82
|
|
83
83
|
# subclause
|
84
84
|
def symbols_parse(isoxml, out)
|
85
|
-
isoxml.at(ns("./title")) or
|
86
|
-
#isoxml.children.first.previous = "<title>#{@i18n.symbols}</title>"
|
87
|
-
isoxml.add_first_child "<title>#{@i18n.symbols}</title>"
|
88
85
|
clause_parse(isoxml, out)
|
89
86
|
end
|
90
87
|
|
@@ -102,7 +99,7 @@ module IsoDoc
|
|
102
99
|
def foreword(clause, out)
|
103
100
|
page_break(out)
|
104
101
|
out.div **attr_code(id: clause["id"]) do |s|
|
105
|
-
clause_name(clause, clause.at(ns("./title"))
|
102
|
+
clause_name(clause, clause.at(ns("./title")), s,
|
106
103
|
{ class: "ForewordTitle" })
|
107
104
|
clause.elements.each { |e| parse(e, s) unless e.name == "title" }
|
108
105
|
end
|
@@ -63,7 +63,7 @@ module IsoDoc
|
|
63
63
|
end
|
64
64
|
|
65
65
|
# top level clause names
|
66
|
-
def clause_name(
|
66
|
+
def clause_name(_node, title, div, header_class)
|
67
67
|
header_class = {} if header_class.nil?
|
68
68
|
div.h1 **attr_code(header_class) do |h1|
|
69
69
|
if title.is_a?(String) then h1 << title
|
@@ -112,12 +112,12 @@ module IsoDoc
|
|
112
112
|
!header && cell.name == "th" and
|
113
113
|
scope = (cell["rowspan"] ? "rowgroup" : "row")
|
114
114
|
{ rowspan: cell["rowspan"], colspan: cell["colspan"],
|
115
|
-
style: style.
|
115
|
+
style: style.delete("\n"), scope: scope, class: cell["class"] }
|
116
116
|
end
|
117
117
|
|
118
118
|
def make_tr_attr_style(row, rowmax, totalrows, _header, bordered)
|
119
119
|
bordered or return ""
|
120
|
-
<<~STYLE.
|
120
|
+
<<~STYLE.delete("\n")
|
121
121
|
border-top:#{row.zero? ? "#{SW} 1.5pt;" : 'none;'}
|
122
122
|
border-bottom:#{SW} #{rowmax >= totalrows ? '1.5' : '1.0'}pt;
|
123
123
|
STYLE
|
@@ -37,18 +37,12 @@ module IsoDoc
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
def termnote_delim
|
41
|
-
l10n(": ")
|
42
|
-
end
|
43
|
-
|
44
40
|
def termnote_parse(node, out)
|
45
41
|
name = node&.at(ns("./name"))&.remove
|
46
42
|
out.div **note_attrs(node) do |div|
|
47
43
|
div.p do |p|
|
48
|
-
|
49
|
-
|
50
|
-
p << termnote_delim
|
51
|
-
end
|
44
|
+
name&.children&.each { |n| parse(n, p) }
|
45
|
+
p << " "
|
52
46
|
para_then_remainder(node.first_element_child, node, p, div)
|
53
47
|
end
|
54
48
|
end
|
@@ -60,12 +54,16 @@ module IsoDoc
|
|
60
54
|
end
|
61
55
|
end
|
62
56
|
|
57
|
+
def termdomain_parse(node, out)
|
58
|
+
node["hidden"] == "true" and return
|
59
|
+
node.children.each { |n| parse(n, out) }
|
60
|
+
end
|
61
|
+
|
63
62
|
def termdef_parse(node, out)
|
64
|
-
name = node
|
63
|
+
name = node.at(ns("./name"))&.remove
|
65
64
|
out.p class: "TermNum", id: node["id"] do |p|
|
66
65
|
name&.children&.each { |n| parse(n, p) }
|
67
66
|
end
|
68
|
-
set_termdomain("")
|
69
67
|
node.children.each { |n| parse(n, out) }
|
70
68
|
end
|
71
69
|
|
@@ -4,10 +4,6 @@ require "pathname"
|
|
4
4
|
module IsoDoc
|
5
5
|
module Function
|
6
6
|
module ToWordHtml
|
7
|
-
def set_termdomain(termdomain)
|
8
|
-
@termdomain = termdomain
|
9
|
-
end
|
10
|
-
|
11
7
|
def note?
|
12
8
|
@note
|
13
9
|
end
|
@@ -222,7 +218,7 @@ module IsoDoc
|
|
222
218
|
when "preferred" then term_parse(node, out)
|
223
219
|
when "admitted" then admitted_term_parse(node, out)
|
224
220
|
when "deprecates" then deprecated_term_parse(node, out)
|
225
|
-
when "domain" then
|
221
|
+
when "domain" then termdomain_parse(node, out)
|
226
222
|
when "definition" then definition_parse(node, out)
|
227
223
|
when "termsource" then termref_parse(node, out)
|
228
224
|
when "modification" then modification_parse(node, out)
|
@@ -261,6 +257,8 @@ module IsoDoc
|
|
261
257
|
when "location" then location_parse(node, out)
|
262
258
|
when "cross-align" then cross_align_parse(node, out)
|
263
259
|
when "columnbreak" then columnbreak_parse(node, out)
|
260
|
+
when "attribution" then attribution_parse(node, out)
|
261
|
+
when "author" then author_parse(node, out)
|
264
262
|
when "ruby" then ruby_parse(node, out)
|
265
263
|
when "rt" then rt_parse(node, out)
|
266
264
|
when "rb" then rb_parse(node, out)
|
data/lib/isodoc/init.rb
CHANGED
@@ -140,5 +140,26 @@ module IsoDoc
|
|
140
140
|
def agency?(text)
|
141
141
|
self.class::AGENCIES.include?(text)
|
142
142
|
end
|
143
|
+
|
144
|
+
# This is highly specific to ISO, but it's not a bad precedent for
|
145
|
+
# references anyway; keeping here instead of in IsoDoc::Iso for now
|
146
|
+
def docid_l10n(text)
|
147
|
+
text.nil? and return text
|
148
|
+
@i18n.all_parts and text.gsub!(/All Parts/i, @i18n.all_parts.downcase)
|
149
|
+
text.size < 20 and text.gsub!(/ /, " ")
|
150
|
+
text
|
151
|
+
end
|
152
|
+
|
153
|
+
def docid_prefix(prefix, docid)
|
154
|
+
docid = "#{prefix} #{docid}" if prefix && !omit_docid_prefix(prefix) &&
|
155
|
+
!/^#{prefix}\b/.match(docid)
|
156
|
+
docid_l10n(docid)
|
157
|
+
end
|
158
|
+
|
159
|
+
def omit_docid_prefix(prefix)
|
160
|
+
prefix.nil? || prefix.empty? and return true
|
161
|
+
%w(ISO IEC IEV ITU W3C BIPM csd metanorma repository metanorma-ordinal)
|
162
|
+
.include? prefix
|
163
|
+
end
|
143
164
|
end
|
144
165
|
end
|