isodoc 2.12.0 → 2.12.2
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 +2 -2
- data/lib/isodoc/convert.rb +0 -21
- data/lib/isodoc/function/blocks.rb +19 -48
- data/lib/isodoc/function/blocks_example_note.rb +75 -29
- data/lib/isodoc/function/cleanup.rb +3 -40
- data/lib/isodoc/function/inline.rb +39 -9
- data/lib/isodoc/function/lists.rb +5 -5
- data/lib/isodoc/function/references.rb +9 -133
- data/lib/isodoc/function/reqt.rb +2 -2
- data/lib/isodoc/function/section.rb +25 -28
- data/lib/isodoc/function/section_titles.rb +16 -13
- data/lib/isodoc/function/table.rb +3 -3
- data/lib/isodoc/function/terms.rb +21 -20
- data/lib/isodoc/function/to_word_html.rb +8 -5
- data/lib/isodoc/function/utils.rb +1 -1
- data/lib/isodoc/html_function/footnotes.rb +2 -1
- data/lib/isodoc/html_function/html.rb +1 -5
- data/lib/isodoc/init.rb +31 -0
- data/lib/isodoc/metadata.rb +9 -0
- data/lib/isodoc/metadata_contributor.rb +1 -1
- data/lib/isodoc/metadata_date.rb +1 -1
- data/lib/isodoc/presentation_function/autonum.rb +139 -0
- data/lib/isodoc/presentation_function/block.rb +95 -36
- data/lib/isodoc/presentation_function/docid.rb +78 -0
- data/lib/isodoc/presentation_function/erefs.rb +6 -4
- data/lib/isodoc/presentation_function/image.rb +52 -13
- data/lib/isodoc/presentation_function/inline.rb +6 -6
- 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/reqt.rb +1 -1
- data/lib/isodoc/presentation_function/section.rb +46 -121
- data/lib/isodoc/presentation_function/sourcecode.rb +7 -4
- data/lib/isodoc/presentation_function/terms.rb +27 -2
- data/lib/isodoc/presentation_function/title.rb +107 -0
- data/lib/isodoc/presentation_function/xrefs.rb +17 -10
- data/lib/isodoc/presentation_xml_convert.rb +6 -2
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +8 -36
- data/lib/isodoc/word_function/footnotes.rb +1 -1
- data/lib/isodoc/word_function/lists.rb +12 -10
- data/lib/isodoc/word_function/postprocess_cover.rb +0 -2
- data/lib/isodoc/word_function/postprocess_table.rb +1 -1
- data/lib/isodoc/word_function/table.rb +2 -2
- data/lib/isodoc/xref/clause_order.rb +2 -2
- data/lib/isodoc/xref/xref_anchor.rb +31 -16
- data/lib/isodoc/xref/xref_counter_types.rb +3 -2
- data/lib/isodoc/xref/xref_gen.rb +57 -33
- data/lib/isodoc/xref/xref_gen_seq.rb +145 -56
- data/lib/isodoc/xref/xref_sect_gen.rb +64 -47
- data/lib/isodoc/xref/xref_util.rb +49 -1
- data/lib/isodoc/xref.rb +3 -0
- data/lib/isodoc-yaml/i18n-ar.yaml +9 -9
- data/lib/isodoc-yaml/i18n-de.yaml +9 -9
- data/lib/isodoc-yaml/i18n-en.yaml +9 -9
- data/lib/isodoc-yaml/i18n-es.yaml +9 -9
- data/lib/isodoc-yaml/i18n-fr.yaml +9 -9
- data/lib/isodoc-yaml/i18n-ja.yaml +10 -10
- data/lib/isodoc-yaml/i18n-ru.yaml +9 -9
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +9 -9
- data/lib/nokogiri/xml/node.rb +1 -0
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4eb3b494f63d18c01a41db1113867423729b62912dc89c002bccf7bd5b5e10e9
|
4
|
+
data.tar.gz: 665fa84ece67866381fa3c71c41a04e57f231de95143fee235f157ffbe61daf8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1837352724ea2d81646db5a1f499f19ec1f6c84eace5906cd7ae795e6be9fa156e6de43bfa7ecef4ecc4149e7ec4c30c052e64687b1d5f3d8b2ef1b0dfa292e
|
7
|
+
data.tar.gz: 5996acc46b47b24285d1d696d203a16255a69e67a8c25690213afa41d7fe65b02464e26e4db6516b5b3edf020a5222fc342691f0c13b1861d4a436390ea93655
|
data/isodoc.gemspec
CHANGED
@@ -34,10 +34,10 @@ 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
|
-
spec.add_dependency "relaton-render", "~> 0.
|
40
|
+
spec.add_dependency "relaton-render", "~> 0.8.0"
|
41
41
|
spec.add_dependency "roman-numerals"
|
42
42
|
spec.add_dependency "rouge", "~> 4.0"
|
43
43
|
spec.add_dependency "thread_safe"
|
data/lib/isodoc/convert.rb
CHANGED
@@ -115,31 +115,10 @@ module IsoDoc
|
|
115
115
|
metadata_init(@lang, @script, @locale, @i18n)
|
116
116
|
xref_init(@lang, @script, self, @i18n,
|
117
117
|
{ locale: @locale, bibrender: @bibrender })
|
118
|
-
docxml = preprocess_xslt(docxml)
|
119
118
|
toc_init(docxml)
|
120
119
|
[docxml, filename, dir]
|
121
120
|
end
|
122
121
|
|
123
|
-
def preprocess_xslt(docxml)
|
124
|
-
sheets = extract_preprocess_xslt(docxml)
|
125
|
-
sheets.each do |x|
|
126
|
-
docxml = Nokogiri::XSLT(x).transform(docxml)
|
127
|
-
end
|
128
|
-
docxml
|
129
|
-
rescue ::Error => e
|
130
|
-
require "debug"
|
131
|
-
binding.b
|
132
|
-
end
|
133
|
-
|
134
|
-
def extract_preprocess_xslt(docxml)
|
135
|
-
docxml.xpath(ns("//metanorma-extension/render/preprocess-xslt"))
|
136
|
-
.each_with_object([]) do |x, m|
|
137
|
-
formats = x["format"]&.split(",") || []
|
138
|
-
!formats.empty? && !formats.include?(@format.to_s) and next
|
139
|
-
m << x.children.to_xml
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
122
|
def convert_i18n_init(docxml)
|
144
123
|
convert_i18n_init1(docxml)
|
145
124
|
i18n_init(@lang, @script, @locale)
|
@@ -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,10 +25,9 @@ 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
|
-
|
38
|
-
parse(n, div) unless n.name == "name"
|
28
|
+
parse(n, div) unless n.name == "fmt-name"
|
39
29
|
end
|
40
|
-
figure_name_parse(node, div, node.at(ns("./name")))
|
30
|
+
figure_name_parse(node, div, node.at(ns("./fmt-name")))
|
41
31
|
end
|
42
32
|
end
|
43
33
|
|
@@ -47,17 +37,16 @@ module IsoDoc
|
|
47
37
|
|
48
38
|
def pseudocode_parse(node, out)
|
49
39
|
@in_figure = true
|
50
|
-
name = node.at(ns("./name"))
|
40
|
+
name = node.at(ns("./fmt-name"))
|
51
41
|
out.div **pseudocode_attrs(node) do |div|
|
52
|
-
node.children.each { |n| parse(n, div) unless n.name == "name" }
|
42
|
+
node.children.each { |n| parse(n, div) unless n.name == "fmt-name" }
|
53
43
|
sourcecode_name_parse(node, div, name)
|
54
44
|
end
|
55
45
|
@in_figure = false
|
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
|
@@ -68,7 +57,7 @@ module IsoDoc
|
|
68
57
|
end
|
69
58
|
|
70
59
|
def sourcecode_parse(node, out)
|
71
|
-
name = node.at(ns("./name"))
|
60
|
+
name = node.at(ns("./fmt-name"))
|
72
61
|
out.p **sourcecode_attrs(node) do |div|
|
73
62
|
sourcecode_parse1(node, div)
|
74
63
|
end
|
@@ -82,7 +71,7 @@ module IsoDoc
|
|
82
71
|
node.at("./ancestor::xmlns:table[@class = 'rouge-line-table']") and
|
83
72
|
@sourcecode = "table"
|
84
73
|
node.children.each do |n|
|
85
|
-
%w(name dl).include?(n.name) and next
|
74
|
+
%w(fmt-name dl).include?(n.name) and next
|
86
75
|
parse(n, div)
|
87
76
|
end
|
88
77
|
@sourcecode = false
|
@@ -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
|
|
@@ -106,9 +93,9 @@ module IsoDoc
|
|
106
93
|
out.div **attr_code(class: "formula") do |div|
|
107
94
|
div.p do |_p|
|
108
95
|
parse(node.at(ns("./stem")), div)
|
109
|
-
if lbl = node&.at(ns("./name"))&.text
|
96
|
+
if lbl = node&.at(ns("./fmt-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 fmt-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
|
@@ -20,9 +19,9 @@ module IsoDoc
|
|
20
19
|
# used if we are boxing examples
|
21
20
|
def example_div_parse(node, out)
|
22
21
|
out.div **example_div_attr(node) do |div|
|
23
|
-
example_label(node, div, node.at(ns("./name")))
|
22
|
+
example_label(node, div, node.at(ns("./fmt-name")))
|
24
23
|
node.children.each do |n|
|
25
|
-
parse(n, div) unless n.name == "name"
|
24
|
+
parse(n, div) unless n.name == "fmt-name"
|
26
25
|
end
|
27
26
|
end
|
28
27
|
end
|
@@ -40,10 +39,12 @@ module IsoDoc
|
|
40
39
|
out.table **example_table_attr(node) do |t|
|
41
40
|
t.tr do |tr|
|
42
41
|
tr.td **EXAMPLE_TBL_ATTR do |td|
|
43
|
-
example_label(node, td, node.at(ns("./name")))
|
42
|
+
example_label(node, td, node.at(ns("./fmt-name")))
|
44
43
|
end
|
45
44
|
tr.td **EXAMPLE_TD_ATTR do |td|
|
46
|
-
node.children.each
|
45
|
+
node.children.each do |n|
|
46
|
+
parse(n, td) unless n.name == "fmt-name"
|
47
|
+
end
|
47
48
|
end
|
48
49
|
end
|
49
50
|
end
|
@@ -53,32 +54,45 @@ module IsoDoc
|
|
53
54
|
example_div_parse(node, out)
|
54
55
|
end
|
55
56
|
|
56
|
-
def
|
57
|
-
|
57
|
+
def block_body_first_elem(node)
|
58
|
+
node.elements.each do |n|
|
59
|
+
%w(title fmt-title fmt-xref-label fmt-name name)
|
60
|
+
.include?(n.name) and next
|
61
|
+
return n
|
62
|
+
end
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
|
66
|
+
def starts_with_para?(node)
|
67
|
+
block_body_first_elem(node)&.name == "p"
|
68
|
+
end
|
69
|
+
|
70
|
+
def note_p_class
|
71
|
+
nil
|
58
72
|
end
|
59
73
|
|
60
74
|
def note_p_parse(node, div)
|
61
|
-
name = node.at(ns("./name"))
|
62
|
-
|
75
|
+
name = node.at(ns("./fmt-name"))
|
76
|
+
para = node.at(ns("./p"))
|
77
|
+
div.p **attr_code(class: note_p_class) do |p|
|
63
78
|
name and p.span class: "note_label" do |s|
|
64
79
|
name.children.each { |n| parse(n, s) }
|
65
|
-
s << note_delim
|
66
80
|
end
|
67
|
-
insert_tab(p, 1)
|
68
|
-
|
81
|
+
#insert_tab(p, 1) # TODO to Presentation XML
|
82
|
+
children_parse(para, p)
|
69
83
|
end
|
70
|
-
|
84
|
+
para.xpath("./following-sibling::*").each { |n| parse(n, div) }
|
71
85
|
end
|
72
86
|
|
73
87
|
def note_parse1(node, div)
|
74
|
-
name = node.at(ns("./name")) and
|
75
|
-
p
|
76
|
-
|
77
|
-
|
88
|
+
name = node.at(ns("./fmt-name")) and
|
89
|
+
div.p **attr_code(class: note_p_class) do |p|
|
90
|
+
p.span class: "note_label" do |s|
|
91
|
+
name.remove.children.each { |n| parse(n, s) }
|
92
|
+
end
|
93
|
+
#insert_tab(p, 1) # TODO to Presentation XML
|
78
94
|
end
|
79
|
-
|
80
|
-
end
|
81
|
-
node.children.each { |n| parse(n, div) }
|
95
|
+
children_parse(node, div)
|
82
96
|
end
|
83
97
|
|
84
98
|
def keep_style(node)
|
@@ -101,7 +115,7 @@ module IsoDoc
|
|
101
115
|
def note_parse(node, out)
|
102
116
|
@note = true
|
103
117
|
out.div **note_attrs(node) do |div|
|
104
|
-
if node
|
118
|
+
if starts_with_para?(node)
|
105
119
|
note_p_parse(node, div)
|
106
120
|
else
|
107
121
|
note_parse1(node, div)
|
@@ -112,7 +126,7 @@ module IsoDoc
|
|
112
126
|
|
113
127
|
def admonition_name_parse(_node, div, name)
|
114
128
|
div.p class: "AdmonitionTitle", style: "text-align:center;" do |p|
|
115
|
-
name
|
129
|
+
children_parse(name, p)
|
116
130
|
end
|
117
131
|
end
|
118
132
|
|
@@ -121,7 +135,7 @@ module IsoDoc
|
|
121
135
|
end
|
122
136
|
|
123
137
|
def admonition_name(node, _type)
|
124
|
-
node&.at(ns("./name"))
|
138
|
+
node&.at(ns("./fmt-name"))
|
125
139
|
end
|
126
140
|
|
127
141
|
def admonition_attrs(node)
|
@@ -130,12 +144,44 @@ module IsoDoc
|
|
130
144
|
end
|
131
145
|
|
132
146
|
def admonition_parse(node, out)
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
147
|
+
out.div **admonition_attrs(node) do |div|
|
148
|
+
if starts_with_para?(node)
|
149
|
+
admonition_p_parse(node, div)
|
150
|
+
else
|
151
|
+
admonition_parse1(node, div)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# code to allow name and first paragraph to be rendered in same block
|
157
|
+
def admonition_p_parse(node, div)
|
158
|
+
admonition_parse1(node, div)
|
159
|
+
end
|
160
|
+
|
161
|
+
# code to allow name and first paragraph to be rendered in same block
|
162
|
+
def admonition_name_in_first_para(node, div)
|
163
|
+
name = node.at(ns("./fmt-name"))
|
164
|
+
para = node.at(ns("./p"))
|
165
|
+
div.p do |p|
|
166
|
+
if name = admonition_name(node, node["type"])&.remove
|
167
|
+
name.children.each { |n| parse(n, p) }
|
168
|
+
admonition_name_para_delim(p) # TODO to Presentation XML
|
169
|
+
end
|
170
|
+
para.children.each { |n| parse(n, p) }
|
171
|
+
end
|
172
|
+
para.xpath("./following-sibling::*").each { |n| parse(n, div) }
|
173
|
+
end
|
174
|
+
|
175
|
+
def admonition_name_para_delim(para)
|
176
|
+
insert_tab(para, 1)
|
177
|
+
end
|
178
|
+
|
179
|
+
def admonition_parse1(node, div)
|
180
|
+
name = admonition_name(node, node["type"])
|
181
|
+
if name
|
182
|
+
admonition_name_parse(node, div, name)
|
138
183
|
end
|
184
|
+
node.children.each { |n| parse(n, div) unless n.name == "fmt-name" }
|
139
185
|
end
|
140
186
|
end
|
141
187
|
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
|
@@ -16,16 +17,24 @@ module IsoDoc
|
|
16
17
|
|
17
18
|
def location_parse(node, out); end
|
18
19
|
|
20
|
+
# Presentation XML classes which we need not pass on to HTML or DOC
|
21
|
+
SPAN_UNWRAP_CLASSES =
|
22
|
+
%w[fmt-caption-label fmt-label-delim fmt-caption-delim fmt-autonum-delim
|
23
|
+
fmt-element-name fmt-conn fmt-comma fmt-enum-comma fmt-obligation
|
24
|
+
fmt-xref-container].freeze
|
25
|
+
|
19
26
|
def span_parse(node, out)
|
20
|
-
|
27
|
+
klass = node["style"] || node["class"]
|
28
|
+
if klass && !SPAN_UNWRAP_CLASSES.include?(klass)
|
21
29
|
out.span **attr_code(style: node["style"],
|
22
30
|
class: node["class"]) do |s|
|
23
|
-
node
|
31
|
+
children_parse(node, s)
|
24
32
|
end
|
25
|
-
else node
|
33
|
+
else children_parse(node, out)
|
26
34
|
end
|
27
35
|
end
|
28
36
|
|
37
|
+
# todo PRESENTATION XML
|
29
38
|
def callout_parse(node, out)
|
30
39
|
out << " <#{node.text}>"
|
31
40
|
end
|
@@ -46,9 +55,8 @@ module IsoDoc
|
|
46
55
|
end
|
47
56
|
|
48
57
|
def suffix_url(url)
|
49
|
-
|
50
|
-
|
51
|
-
|
58
|
+
url.nil? || %r{^https?://|^#}.match?(url) and return url
|
59
|
+
File.extname(url).empty? or return url
|
52
60
|
url.sub(/#{File.extname(url)}$/, ".html")
|
53
61
|
end
|
54
62
|
|
@@ -64,6 +72,7 @@ module IsoDoc
|
|
64
72
|
end
|
65
73
|
end
|
66
74
|
|
75
|
+
# todo PRESENTATION XML
|
67
76
|
def termrefelem_parse(node, out)
|
68
77
|
if node.text.strip.empty?
|
69
78
|
out << "Termbase #{node['base']}, term ID #{node['target']}"
|
@@ -133,8 +142,7 @@ module IsoDoc
|
|
133
142
|
end
|
134
143
|
|
135
144
|
def text_parse(node, out)
|
136
|
-
|
137
|
-
|
145
|
+
node.nil? || node.text.nil? and return
|
138
146
|
text = node.to_s
|
139
147
|
@sourcecode == "pre" and
|
140
148
|
text = text.gsub("\n", "<br/>").gsub("<br/> ", "<br/> ")
|
@@ -179,6 +187,28 @@ module IsoDoc
|
|
179
187
|
node.children.each { |n| parse(n, e) }
|
180
188
|
end
|
181
189
|
end
|
190
|
+
|
191
|
+
def author_parse(node, out)
|
192
|
+
children_parse(node, out)
|
193
|
+
end
|
194
|
+
|
195
|
+
def semx_parse(node, out)
|
196
|
+
children_parse(node, out)
|
197
|
+
end
|
198
|
+
|
199
|
+
def children_parse(node, out)
|
200
|
+
node.children.each { |n| parse(n, out) }
|
201
|
+
end
|
202
|
+
|
203
|
+
def xref_label_parse(node, out); end
|
204
|
+
|
205
|
+
def name_parse(node, out); end
|
206
|
+
|
207
|
+
def floating_title_parse(node, out); end
|
208
|
+
|
209
|
+
def fmt_name_parse(node, out)
|
210
|
+
children_parse(node, out)
|
211
|
+
end
|
182
212
|
end
|
183
213
|
end
|
184
214
|
end
|
@@ -2,9 +2,9 @@ module IsoDoc
|
|
2
2
|
module Function
|
3
3
|
module Lists
|
4
4
|
def list_title_parse(node, out)
|
5
|
-
name = node.at(ns("./name")) or return
|
5
|
+
name = node.at(ns("./fmt-name")) or return
|
6
6
|
out.p class: "ListTitle" do |p|
|
7
|
-
name
|
7
|
+
name.children&.each { |n| parse(n, p) }
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -16,7 +16,7 @@ module IsoDoc
|
|
16
16
|
out.div **attr_code(class: "ul_wrap") do |div|
|
17
17
|
list_title_parse(node, div)
|
18
18
|
div.ul **attr_code(ul_attrs(node)) do |ul|
|
19
|
-
node.children.each { |n| n.name == "name" or parse(n, ul) }
|
19
|
+
node.children.each { |n| n.name == "fmt-name" or parse(n, ul) }
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -57,7 +57,7 @@ module IsoDoc
|
|
57
57
|
out.div **attr_code(class: "ol_wrap") do |div|
|
58
58
|
list_title_parse(node, div)
|
59
59
|
div.ol **attr_code(ol_attrs(node)) do |ol|
|
60
|
-
node.children.each { |n| n.name == "name" or parse(n, ol) }
|
60
|
+
node.children.each { |n| n.name == "fmt-name" or parse(n, ol) }
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -106,7 +106,7 @@ module IsoDoc
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def dl_parse_notes(node, out)
|
109
|
-
node.elements.reject { |n| dt_dd?(n) || n.name == "name" }
|
109
|
+
node.elements.reject { |n| dt_dd?(n) || n.name == "fmt-name" }
|
110
110
|
.each { |n| parse(n, out) }
|
111
111
|
end
|
112
112
|
|