isodoc 2.12.1 → 2.12.2
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/convert.rb +0 -21
- data/lib/isodoc/function/blocks.rb +8 -8
- data/lib/isodoc/function/blocks_example_note.rb +46 -23
- data/lib/isodoc/function/inline.rb +31 -8
- data/lib/isodoc/function/lists.rb +4 -4
- data/lib/isodoc/function/references.rb +5 -5
- data/lib/isodoc/function/reqt.rb +2 -2
- data/lib/isodoc/function/section.rb +25 -25
- data/lib/isodoc/function/section_titles.rb +15 -12
- data/lib/isodoc/function/table.rb +1 -1
- data/lib/isodoc/function/terms.rb +17 -14
- data/lib/isodoc/function/to_word_html.rb +5 -0
- data/lib/isodoc/html_function/footnotes.rb +2 -1
- data/lib/isodoc/html_function/html.rb +1 -5
- data/lib/isodoc/init.rb +14 -4
- 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 +48 -39
- data/lib/isodoc/presentation_function/docid.rb +0 -23
- data/lib/isodoc/presentation_function/erefs.rb +4 -2
- data/lib/isodoc/presentation_function/image.rb +21 -5
- data/lib/isodoc/presentation_function/inline.rb +1 -1
- data/lib/isodoc/presentation_function/reqt.rb +1 -1
- data/lib/isodoc/presentation_function/section.rb +46 -118
- data/lib/isodoc/presentation_function/sourcecode.rb +7 -4
- data/lib/isodoc/presentation_function/terms.rb +3 -4
- 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 +2 -1
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +7 -35
- 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/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 +60 -28
- data/lib/isodoc/xref/xref_util.rb +43 -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 +6 -4
@@ -1,26 +1,12 @@
|
|
1
1
|
require_relative "refs"
|
2
|
+
require_relative "title"
|
2
3
|
|
3
4
|
module IsoDoc
|
4
5
|
class PresentationXMLConvert < ::IsoDoc::Convert
|
5
|
-
def middle_title(docxml)
|
6
|
-
s = docxml.at(ns("//sections")) or return
|
7
|
-
t = @meta.get[:doctitle]
|
8
|
-
t.nil? || t.empty? and return
|
9
|
-
s.add_first_child "<p class='zzSTDTitle1'>#{t}</p>"
|
10
|
-
end
|
11
|
-
|
12
|
-
def missing_title(docxml)
|
13
|
-
docxml.xpath(ns("//definitions[not(./title)]")).each do |d|
|
14
|
-
# should only be happening for subclauses
|
15
|
-
d.add_first_child "<title>#{@i18n.symbols}</title>"
|
16
|
-
end
|
17
|
-
docxml.xpath(ns("//foreword[not(./title)]")).each do |d|
|
18
|
-
d.add_first_child "<title>#{@i18n.foreword}</title>"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
6
|
def clause(docxml)
|
23
|
-
docxml.xpath(ns("//clause | //terms | //definitions | //references"
|
7
|
+
docxml.xpath(ns("//clause | //terms | //definitions | //references | " \
|
8
|
+
"//introduction | //foreword | //preface/abstract | " \
|
9
|
+
"//acknowledgements | //colophon | //indexsect "))
|
24
10
|
.each do |f|
|
25
11
|
f.parent.name == "annex" &&
|
26
12
|
@xrefs.klass.single_term_clause?(f.parent) and next
|
@@ -34,32 +20,23 @@ module IsoDoc
|
|
34
20
|
elem.at("./ancestor::*[@unnumbered = 'true']")
|
35
21
|
end
|
36
22
|
|
23
|
+
def clausedelim
|
24
|
+
ret = super
|
25
|
+
ret && !ret.empty? or return ret
|
26
|
+
"<span class='fmt-autonum-delim'>#{ret}</span>"
|
27
|
+
end
|
28
|
+
|
37
29
|
def clause1(elem)
|
38
30
|
level = @xrefs.anchor(elem["id"], :level, false) ||
|
39
31
|
(elem.ancestors("clause, annex").size + 1)
|
40
|
-
|
41
|
-
unnumbered_clause?(elem)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
def floattitle(docxml)
|
48
|
-
p = "//clause | //annex | //appendix | //introduction | //foreword | " \
|
49
|
-
"//preface/abstract | //acknowledgements | //terms | " \
|
50
|
-
"//definitions | //references | //colophon | //indexsect"
|
51
|
-
docxml.xpath(ns(p)).each { |f| floattitle1(f) }
|
52
|
-
# top-level
|
53
|
-
docxml.xpath(ns("//sections | //preface | //colophon"))
|
54
|
-
.each { |f| floattitle1(f) }
|
55
|
-
end
|
56
|
-
|
57
|
-
# TODO not currently doing anything with the @depth attribute of floating-title
|
58
|
-
def floattitle1(elem)
|
59
|
-
elem.xpath(ns(".//floating-title")).each do |p|
|
60
|
-
p.name = "p"
|
61
|
-
p["type"] = "floating-title"
|
32
|
+
lbl = @xrefs.anchor(elem["id"], :label, elem.parent.name != "sections")
|
33
|
+
if unnumbered_clause?(elem) || !lbl
|
34
|
+
prefix_name(elem, {}, nil, "title")
|
35
|
+
else
|
36
|
+
prefix_name(elem, { caption: "<tab/>" }, "#{lbl}#{clausedelim}",
|
37
|
+
"title")
|
62
38
|
end
|
39
|
+
t = elem.at(ns("./fmt-title")) and t["depth"] = level
|
63
40
|
end
|
64
41
|
|
65
42
|
def annex(docxml)
|
@@ -73,10 +50,18 @@ module IsoDoc
|
|
73
50
|
|
74
51
|
def annex1(elem)
|
75
52
|
lbl = @xrefs.anchor(elem["id"], :label)
|
53
|
+
# TODO: do not alter title, alter semx/@element = title
|
76
54
|
t = elem.at(ns("./title")) and
|
77
55
|
t.children = "<strong>#{to_xml(t.children)}</strong>"
|
78
|
-
unnumbered_clause?(elem)
|
79
|
-
|
56
|
+
if unnumbered_clause?(elem)
|
57
|
+
prefix_name(elem, {}, nil, "title")
|
58
|
+
else
|
59
|
+
prefix_name(elem, { caption: annex_delim(elem) }, lbl, "title")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def annex_delim(_elem)
|
64
|
+
"<br/><br/>"
|
80
65
|
end
|
81
66
|
|
82
67
|
def single_term_clause_retitle(elem)
|
@@ -91,7 +76,7 @@ module IsoDoc
|
|
91
76
|
t = elem.at(ns("./terms | ./definitions | ./references"))
|
92
77
|
t.xpath(ns(".//clause | .//terms | .//definitions | .//references"))
|
93
78
|
.each do |c|
|
94
|
-
tit = c.at(ns("./title")) or
|
79
|
+
tit = c.at(ns("./fmt-title")) or next
|
95
80
|
tit["depth"] = tit["depth"].to_i - 1 unless tit["depth"] == "1"
|
96
81
|
end
|
97
82
|
end
|
@@ -100,8 +85,13 @@ module IsoDoc
|
|
100
85
|
docxml.xpath(ns("//index | //index-xref | //indexsect")).each(&:remove)
|
101
86
|
end
|
102
87
|
|
88
|
+
def skip_display_order?(node)
|
89
|
+
node.name == "floating-title"
|
90
|
+
end
|
91
|
+
|
103
92
|
def display_order_at(docxml, xpath, idx)
|
104
93
|
c = docxml.at(ns(xpath)) or return idx
|
94
|
+
skip_display_order?(c) and return idx
|
105
95
|
idx += 1
|
106
96
|
idx = preceding_floating_titles(c, idx)
|
107
97
|
c["displayorder"] = idx
|
@@ -110,6 +100,7 @@ module IsoDoc
|
|
110
100
|
|
111
101
|
def display_order_xpath(docxml, xpath, idx)
|
112
102
|
docxml.xpath(ns(xpath)).each do |c|
|
103
|
+
skip_display_order?(c) and next
|
113
104
|
idx += 1
|
114
105
|
idx = preceding_floating_titles(c, idx)
|
115
106
|
c["displayorder"] = idx
|
@@ -117,19 +108,6 @@ module IsoDoc
|
|
117
108
|
idx
|
118
109
|
end
|
119
110
|
|
120
|
-
def preceding_floating_titles(node, idx)
|
121
|
-
out = node.xpath("./preceding-sibling::*")
|
122
|
-
.reverse.each_with_object([]) do |p, m|
|
123
|
-
%w(note admonition p).include?(p.name) or break m
|
124
|
-
m << p
|
125
|
-
end
|
126
|
-
out.reject { |c| c["displayorder"] }.reverse_each do |c|
|
127
|
-
c["displayorder"] = idx
|
128
|
-
idx += 1
|
129
|
-
end
|
130
|
-
idx
|
131
|
-
end
|
132
|
-
|
133
111
|
def display_order(docxml)
|
134
112
|
i = 0
|
135
113
|
d = @xrefs.clause_order(docxml)
|
@@ -143,46 +121,26 @@ module IsoDoc
|
|
143
121
|
end
|
144
122
|
end
|
145
123
|
|
146
|
-
def clausetitle(docxml)
|
147
|
-
cjk_extended_title(docxml)
|
148
|
-
end
|
149
|
-
|
150
|
-
def cjk_search
|
151
|
-
lang = %w(zh ja ko).map { |x| "@language = '#{x}'" }.join(" or ")
|
152
|
-
%(Hans Hant Jpan Hang Kore).include?(@script) and
|
153
|
-
lang += " or not(@language)"
|
154
|
-
lang
|
155
|
-
end
|
156
|
-
|
157
|
-
def cjk_extended_title(docxml)
|
158
|
-
l = cjk_search
|
159
|
-
docxml.xpath(ns("//bibdata/title[#{l}] | //floating-title[#{l}] | " \
|
160
|
-
"//title[@depth = '1' or not(@depth)][#{l}]")).each do |t|
|
161
|
-
t.text.size < 4 or next
|
162
|
-
t.elements.empty? or next # can't be bothered
|
163
|
-
t.children = @i18n.cjk_extend(t.text)
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
124
|
def preface_rearrange(doc)
|
168
|
-
preface_move(doc.
|
125
|
+
preface_move(doc.xpath(ns("//preface/abstract")),
|
169
126
|
%w(foreword introduction clause acknowledgements), doc)
|
170
|
-
preface_move(doc.
|
127
|
+
preface_move(doc.xpath(ns("//preface/foreword")),
|
171
128
|
%w(introduction clause acknowledgements), doc)
|
172
|
-
preface_move(doc.
|
129
|
+
preface_move(doc.xpath(ns("//preface/introduction")),
|
173
130
|
%w(clause acknowledgements), doc)
|
174
|
-
preface_move(doc.
|
131
|
+
preface_move(doc.xpath(ns("//preface/acknowledgements")),
|
175
132
|
%w(), doc)
|
176
133
|
end
|
177
134
|
|
178
|
-
def preface_move(
|
179
|
-
|
180
|
-
preface =
|
135
|
+
def preface_move(clauses, after, _doc)
|
136
|
+
clauses.empty? and return
|
137
|
+
preface = clauses.first.parent
|
138
|
+
clauses.each do |clause|
|
181
139
|
float = preceding_floats(clause)
|
182
|
-
prev = nil
|
183
140
|
xpath = after.map { |n| "./self::xmlns:#{n}" }.join(" | ")
|
184
141
|
xpath.empty? and xpath = "./self::*[not(following-sibling::*)]"
|
185
|
-
preface_move1(clause, preface, float,
|
142
|
+
preface_move1(clause, preface, float, nil, xpath)
|
143
|
+
end
|
186
144
|
end
|
187
145
|
|
188
146
|
def preface_move1(clause, preface, float, prev, xpath)
|
@@ -192,47 +150,17 @@ module IsoDoc
|
|
192
150
|
x.at(xpath) or next
|
193
151
|
clause == prev and break
|
194
152
|
prev ||= preface.children.first
|
195
|
-
|
153
|
+
prev.next = clause
|
196
154
|
float.each { |n| prev.next = n }
|
197
155
|
break
|
198
156
|
end
|
199
157
|
end
|
200
158
|
|
201
|
-
def preceding_floats(clause)
|
202
|
-
ret = []
|
203
|
-
p = clause
|
204
|
-
while prev = p.previous_element
|
205
|
-
if prev.name == "floating-title"
|
206
|
-
ret << prev
|
207
|
-
p = prev
|
208
|
-
else break end
|
209
|
-
end
|
210
|
-
ret
|
211
|
-
end
|
212
|
-
|
213
159
|
def rearrange_clauses(docxml)
|
214
160
|
preface_rearrange(docxml) # feeds toc_title
|
215
161
|
toc_title(docxml)
|
216
162
|
end
|
217
163
|
|
218
|
-
def toc_title(docxml)
|
219
|
-
docxml.at(ns("//preface/clause[@type = 'toc']")) and return
|
220
|
-
ins = toc_title_insert_pt(docxml) or return
|
221
|
-
id = UUIDTools::UUID.random_create.to_s
|
222
|
-
ins.previous = <<~CLAUSE
|
223
|
-
<clause type = 'toc' id='_#{id}'><title depth='1'>#{@i18n.table_of_contents}</title></clause>
|
224
|
-
CLAUSE
|
225
|
-
end
|
226
|
-
|
227
|
-
def toc_title_insert_pt(docxml)
|
228
|
-
ins = docxml.at(ns("//preface")) ||
|
229
|
-
docxml.at(ns("//sections | //annex | //bibliography"))
|
230
|
-
&.before("<preface> </preface>")
|
231
|
-
&.previous_element or return nil
|
232
|
-
ins.children.empty? and ins << " "
|
233
|
-
ins.children.first
|
234
|
-
end
|
235
|
-
|
236
164
|
def toc(docxml)
|
237
165
|
toc_refs(docxml)
|
238
166
|
end
|
@@ -240,7 +168,7 @@ module IsoDoc
|
|
240
168
|
def toc_refs(docxml)
|
241
169
|
docxml.xpath(ns("//toc//xref[text()]")).each do |x|
|
242
170
|
lbl = @xrefs.anchor(x["target"], :label) or next
|
243
|
-
x.add_first_child "#{lbl}<tab
|
171
|
+
x.add_first_child "#{lbl}<span class='fmt-caption-delim'><tab/></span>"
|
244
172
|
end
|
245
173
|
end
|
246
174
|
end
|
@@ -150,10 +150,13 @@ module IsoDoc
|
|
150
150
|
end
|
151
151
|
|
152
152
|
def source_label(elem)
|
153
|
-
labelled_ancestor(elem)
|
154
|
-
|
155
|
-
|
156
|
-
|
153
|
+
if !labelled_ancestor(elem) && # do not number if labelled_ancestor
|
154
|
+
lbl = @xrefs.anchor(elem["id"], :label, false)
|
155
|
+
#a = autonum(elem["id"], lbl)
|
156
|
+
#s = "<span class='fmt-element-name'>#{lower2cap @i18n.figure}</span> #{a}"
|
157
|
+
s = labelled_autonum(lower2cap(@i18n.figure), elem["id"], lbl)&.strip
|
158
|
+
end
|
159
|
+
prefix_name(elem, { caption: block_delim }, s, "name")
|
157
160
|
end
|
158
161
|
end
|
159
162
|
end
|
@@ -115,12 +115,11 @@ module IsoDoc
|
|
115
115
|
|
116
116
|
def termnote1(elem)
|
117
117
|
lbl = termnote_label(elem)
|
118
|
-
prefix_name(elem,
|
118
|
+
prefix_name(elem, { label: termnote_delim(elem) }, lower2cap(lbl), "name")
|
119
119
|
end
|
120
120
|
|
121
121
|
def termnote_label(elem)
|
122
|
-
|
123
|
-
l10n "#{lbl}#{termnote_delim(elem)}"
|
122
|
+
@xrefs.anchor(elem["id"], :label) || "???"
|
124
123
|
end
|
125
124
|
|
126
125
|
def termdefinition(docxml)
|
@@ -200,7 +199,7 @@ module IsoDoc
|
|
200
199
|
|
201
200
|
def term1(elem)
|
202
201
|
lbl = @xrefs.anchor(elem["id"], :label) or return
|
203
|
-
prefix_name(elem,
|
202
|
+
prefix_name(elem, {}, "#{lbl}#{clausedelim}", "name")
|
204
203
|
end
|
205
204
|
end
|
206
205
|
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require_relative "refs"
|
2
|
+
|
3
|
+
module IsoDoc
|
4
|
+
class PresentationXMLConvert < ::IsoDoc::Convert
|
5
|
+
def middle_title(docxml)
|
6
|
+
s = docxml.at(ns("//sections")) or return
|
7
|
+
t = @meta.get[:doctitle]
|
8
|
+
t.nil? || t.empty? and return
|
9
|
+
s.add_first_child "<p class='zzSTDTitle1'>#{t}</p>"
|
10
|
+
end
|
11
|
+
|
12
|
+
def missing_title(docxml)
|
13
|
+
docxml.xpath(ns("//definitions[not(./title)]")).each do |d|
|
14
|
+
# should only be happening for subclauses
|
15
|
+
d.add_first_child "<title>#{@i18n.symbols}</title>"
|
16
|
+
end
|
17
|
+
docxml.xpath(ns("//foreword[not(./title)]")).each do |d|
|
18
|
+
d.add_first_child "<title>#{@i18n.foreword}</title>"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def floattitle(docxml)
|
23
|
+
docxml.xpath(ns(".//floating-title")).each { |f| floattitle1(f) }
|
24
|
+
end
|
25
|
+
|
26
|
+
# TODO not currently doing anything with the @depth attribute of floating-title
|
27
|
+
def floattitle1(elem)
|
28
|
+
elem["id"] ||= "_#{UUIDTools::UUID.random_create}"
|
29
|
+
p = elem.dup
|
30
|
+
p.children = "<semx element='floating-title' source='#{elem['id']}'>" \
|
31
|
+
"#{to_xml(p.children)}</semx>"
|
32
|
+
elem.next = p
|
33
|
+
p.name = "p"
|
34
|
+
p["type"] = "floating-title"
|
35
|
+
transfer_id(elem, p)
|
36
|
+
end
|
37
|
+
|
38
|
+
def preceding_floating_titles(node, idx)
|
39
|
+
out = node.xpath("./preceding-sibling::*")
|
40
|
+
.reverse.each_with_object([]) do |p, m|
|
41
|
+
%w(note admonition p floating-title).include?(p.name) or break m
|
42
|
+
m << p
|
43
|
+
end
|
44
|
+
#require 'debug'; out.empty? or binding.b
|
45
|
+
out.reject { |c| c["displayorder"] }.reverse_each do |c|
|
46
|
+
skip_display_order?(c) and next
|
47
|
+
c["displayorder"] = idx
|
48
|
+
idx += 1
|
49
|
+
end
|
50
|
+
idx
|
51
|
+
end
|
52
|
+
|
53
|
+
def clausetitle(docxml)
|
54
|
+
cjk_extended_title(docxml)
|
55
|
+
end
|
56
|
+
|
57
|
+
def cjk_search
|
58
|
+
lang = %w(zh ja ko).map { |x| "@language = '#{x}'" }.join(" or ")
|
59
|
+
%(Hans Hant Jpan Hang Kore).include?(@script) and
|
60
|
+
lang += " or not(@language)"
|
61
|
+
lang
|
62
|
+
end
|
63
|
+
|
64
|
+
def cjk_extended_title(doc)
|
65
|
+
l = cjk_search
|
66
|
+
doc.xpath(ns("//bibdata/title[#{l}] | //floating-title[#{l}] | " \
|
67
|
+
"//fmt-title[@depth = '1' or not(@depth)][#{l}]"))
|
68
|
+
.each do |t|
|
69
|
+
t.text.size < 4 or next
|
70
|
+
t.traverse do |n|
|
71
|
+
n.text? or next
|
72
|
+
n.replace(@i18n.cjk_extend(n.text))
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def preceding_floats(clause)
|
78
|
+
ret = []
|
79
|
+
p = clause
|
80
|
+
while prev = p.previous_element
|
81
|
+
if prev.name == "floating-title"
|
82
|
+
ret << prev
|
83
|
+
p = prev
|
84
|
+
else break end
|
85
|
+
end
|
86
|
+
ret
|
87
|
+
end
|
88
|
+
|
89
|
+
def toc_title(docxml)
|
90
|
+
docxml.at(ns("//preface/clause[@type = 'toc']")) and return
|
91
|
+
ins = toc_title_insert_pt(docxml) or return
|
92
|
+
id = UUIDTools::UUID.random_create.to_s
|
93
|
+
ins.previous = <<~CLAUSE
|
94
|
+
<clause type = 'toc' id='_#{id}'><fmt-title depth='1'>#{@i18n.table_of_contents}</fmt-title></clause>
|
95
|
+
CLAUSE
|
96
|
+
end
|
97
|
+
|
98
|
+
def toc_title_insert_pt(docxml)
|
99
|
+
ins = docxml.at(ns("//preface")) ||
|
100
|
+
docxml.at(ns("//sections | //annex | //bibliography"))
|
101
|
+
&.before("<preface> </preface>")
|
102
|
+
&.previous_element or return nil
|
103
|
+
ins.children.empty? and ins << " "
|
104
|
+
ins.children.first
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -7,13 +7,14 @@ module IsoDoc
|
|
7
7
|
prefix_container(container_container,
|
8
8
|
anchor_xref(node, container, container: true),
|
9
9
|
node, target)
|
10
|
-
l10n(@i18n.nested_xref
|
11
|
-
.sub("%
|
10
|
+
l10n(connectives_spans(@i18n.nested_xref
|
11
|
+
.sub("%1", "<span class='fmt-xref-container'>#{container_label}</span>")
|
12
|
+
.sub("%2", linkend)))
|
12
13
|
end
|
13
14
|
|
14
15
|
def anchor_value(id)
|
15
|
-
@xrefs.anchor(id, :bare_xref) || @xrefs.anchor(id, :
|
16
|
-
@xrefs.anchor(id, :
|
16
|
+
@xrefs.anchor(id, :bare_xref) || @xrefs.anchor(id, :label) ||
|
17
|
+
@xrefs.anchor(id, :value) || @xrefs.anchor(id, :xref)
|
17
18
|
end
|
18
19
|
|
19
20
|
def anchor_linkend(node, linkend)
|
@@ -55,14 +56,15 @@ module IsoDoc
|
|
55
56
|
|
56
57
|
def anchor_xref_short(node, target, container)
|
57
58
|
if (l = node["label"]) && !container
|
58
|
-
|
59
|
+
v = anchor_value(target)
|
60
|
+
@i18n.l10n(%[<span class="fmt-element-name">#{l}</span> #{v}])
|
59
61
|
else @xrefs.anchor(target, :xref)
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
63
65
|
def anchor_xref_full(num, title)
|
64
66
|
(!title.nil? && !title.empty?) or return nil
|
65
|
-
l10n("#{num}
|
67
|
+
l10n("#{num}<span class='fmt-comma'>,</span> #{title}")
|
66
68
|
end
|
67
69
|
|
68
70
|
def prefix_container?(container, node)
|
@@ -133,9 +135,13 @@ module IsoDoc
|
|
133
135
|
def combine_conn(list)
|
134
136
|
list.size == 1 and list.first[:label]
|
135
137
|
if list[1..].all? { |l| l[:conn] == "and" }
|
136
|
-
@i18n.boolean_conj(list.map
|
138
|
+
connectives_spans(@i18n.boolean_conj(list.map do |l|
|
139
|
+
loc2xref(l)
|
140
|
+
end, "and"))
|
137
141
|
elsif list[1..].all? { |l| l[:conn] == "or" }
|
138
|
-
@i18n.boolean_conj(list.map
|
142
|
+
connectives_spans(@i18n.boolean_conj(list.map do |l|
|
143
|
+
loc2xref(l)
|
144
|
+
end, "or"))
|
139
145
|
else
|
140
146
|
ret = loc2xref(list[0])
|
141
147
|
list[1..].each { |l| ret = i18n_chain_boolean(ret, l) }
|
@@ -144,8 +150,9 @@ module IsoDoc
|
|
144
150
|
end
|
145
151
|
|
146
152
|
def i18n_chain_boolean(value, entry)
|
147
|
-
@i18n.send("chain_#{entry[:conn]}")
|
148
|
-
.sub("%
|
153
|
+
connectives_spans(@i18n.send("chain_#{entry[:conn]}")
|
154
|
+
.sub("%1", value)
|
155
|
+
.sub("%2", loc2xref(entry)))
|
149
156
|
end
|
150
157
|
|
151
158
|
def can_conflate_xref_rendering?(locs)
|
@@ -62,9 +62,9 @@ module IsoDoc
|
|
62
62
|
annex docxml
|
63
63
|
clause docxml # feeds clausetitle
|
64
64
|
term docxml
|
65
|
-
index docxml
|
66
65
|
clausetitle docxml # feeds floattitle
|
67
66
|
floattitle docxml # feeds rearrange_clauses
|
67
|
+
index docxml # fed by strip_duplicate_ids
|
68
68
|
toc docxml
|
69
69
|
display_order docxml
|
70
70
|
end
|
@@ -79,6 +79,7 @@ module IsoDoc
|
|
79
79
|
note docxml
|
80
80
|
admonition docxml
|
81
81
|
source docxml
|
82
|
+
ul docxml
|
82
83
|
ol docxml
|
83
84
|
dl docxml
|
84
85
|
quote docxml
|
data/lib/isodoc/version.rb
CHANGED
@@ -102,40 +102,12 @@ module IsoDoc
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
-
def
|
106
|
-
|
107
|
-
div.p class: "Note" do |p|
|
108
|
-
p.span class: "note_label" do |s|
|
109
|
-
name&.children&.each { |n| parse(n, s) }
|
110
|
-
end
|
111
|
-
insert_tab(p, 1)
|
112
|
-
node.first_element_child.children.each { |n| parse(n, p) }
|
113
|
-
end
|
114
|
-
node.element_children[1..].each { |n| parse(n, div) }
|
105
|
+
def note_p_class
|
106
|
+
"Note"
|
115
107
|
end
|
116
108
|
|
117
|
-
def
|
118
|
-
|
119
|
-
div.p class: "Note" do |p|
|
120
|
-
p.span class: "note_label" do |s|
|
121
|
-
name&.children&.each { |n| parse(n, s) }
|
122
|
-
end
|
123
|
-
insert_tab(p, 1)
|
124
|
-
end
|
125
|
-
node.children.each { |n| parse(n, div) }
|
126
|
-
end
|
127
|
-
|
128
|
-
def termnote_parse(node, out)
|
129
|
-
name = node&.at(ns("./name"))&.remove
|
130
|
-
out.div **note_attrs(node) do |div|
|
131
|
-
div.p class: "Note" do |p|
|
132
|
-
if name
|
133
|
-
name.children.each { |n| parse(n, p) }
|
134
|
-
p << " "
|
135
|
-
end
|
136
|
-
para_then_remainder(node.first_element_child, node, p, div)
|
137
|
-
end
|
138
|
-
end
|
109
|
+
def termnote_p_class
|
110
|
+
"Note"
|
139
111
|
end
|
140
112
|
|
141
113
|
def para_attrs(node)
|
@@ -164,7 +136,7 @@ module IsoDoc
|
|
164
136
|
div.p do |_p|
|
165
137
|
parse(node.at(ns("./stem")), div)
|
166
138
|
insert_tab(div, 1)
|
167
|
-
if lbl = node&.at(ns("./name"))&.text
|
139
|
+
if lbl = node&.at(ns("./fmt-name"))&.text
|
168
140
|
div << lbl
|
169
141
|
end
|
170
142
|
end
|
@@ -185,10 +157,10 @@ module IsoDoc
|
|
185
157
|
page_break(out)
|
186
158
|
out.div **attr_code(preface_attrs(clause)) do |div|
|
187
159
|
div.p class: "zzContents" do |p|
|
188
|
-
clause.at(ns("./title"))&.children&.each { |c| parse(c, p) }
|
160
|
+
clause.at(ns("./fmt-title"))&.children&.each { |c| parse(c, p) }
|
189
161
|
end
|
190
162
|
clause.elements.each do |e|
|
191
|
-
parse(e, div) unless e.name == "title"
|
163
|
+
parse(e, div) unless e.name == "fmt-title"
|
192
164
|
end
|
193
165
|
end
|
194
166
|
end
|
@@ -83,7 +83,7 @@ module IsoDoc
|
|
83
83
|
|
84
84
|
def footnote_parse(node, out)
|
85
85
|
return table_footnote_parse(node, out) if (@in_table || @in_figure) &&
|
86
|
-
!node.ancestors.map(&:name).include?("name")
|
86
|
+
!node.ancestors.map(&:name).include?("fmt-name")
|
87
87
|
|
88
88
|
fn = node["reference"] || UUIDTools::UUID.random_create.to_s
|
89
89
|
return seen_footnote_parse(node, out, fn) if @seen_footnote.include?(fn)
|
@@ -25,13 +25,13 @@ module IsoDoc
|
|
25
25
|
|
26
26
|
def dl_parse_nontable(node, out)
|
27
27
|
out.div **attr_code(class: "figdl") do |div|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
node["id"] and bookmark_parse(node, div)
|
29
|
+
list_title_parse(node, div)
|
30
|
+
node.elements.select { |n| dt_dd?(n) }
|
31
|
+
.each_slice(2) do |dt, dd|
|
32
|
+
dl_parse_nontable1(div, dt, dd)
|
33
|
+
end
|
34
|
+
dl_parse_notes(node, div)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -58,13 +58,13 @@ module IsoDoc
|
|
58
58
|
|
59
59
|
def ddef_other_paras(out, ddef)
|
60
60
|
ddef.elements&.first&.name == "p" or return
|
61
|
-
ddef.children[1
|
61
|
+
ddef.children[1..].each { |n| parse(n, out) }
|
62
62
|
end
|
63
63
|
|
64
64
|
def dl_parse_table(node, out)
|
65
65
|
list_title_parse(node, out)
|
66
66
|
out.table **attr_code(id: node["id"],
|
67
|
-
class:
|
67
|
+
class: node["class"] || "dl") do |v|
|
68
68
|
node.elements.select { |n| dt_dd?(n) }
|
69
69
|
.each_slice(2) do |dt, dd|
|
70
70
|
dl_parse_table1(v, dt, dd)
|
@@ -85,7 +85,9 @@ module IsoDoc
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def dl_parse_table_notes(node, out)
|
88
|
-
remainder = node.elements.reject
|
88
|
+
remainder = node.elements.reject do |n|
|
89
|
+
dt_dd?(n) || n.name == "fmt-name"
|
90
|
+
end
|
89
91
|
remainder.empty? and return
|
90
92
|
out.tr do |tr|
|
91
93
|
tr.td colspan: 2 do |td|
|
@@ -22,7 +22,6 @@ module IsoDoc
|
|
22
22
|
cover = File.read(@wordcoverpage, encoding: "UTF-8")
|
23
23
|
cover = populate_template(cover, :word)
|
24
24
|
coverxml = to_word_xhtml_fragment(cover)
|
25
|
-
#ins.children.first.previous = coverxml.to_xml(encoding: "US-ASCII")
|
26
25
|
ins.add_first_child coverxml.to_xml(encoding: "US-ASCII")
|
27
26
|
end
|
28
27
|
|
@@ -32,7 +31,6 @@ module IsoDoc
|
|
32
31
|
docxml, level)
|
33
32
|
intro = populate_template(intro, :word)
|
34
33
|
introxml = to_word_xhtml_fragment(intro)
|
35
|
-
#ins.children.first.previous = introxml.to_xml(encoding: "US-ASCII")
|
36
34
|
ins.add_first_child introxml.to_xml(encoding: "US-ASCII")
|
37
35
|
end
|
38
36
|
|
@@ -34,7 +34,7 @@ module IsoDoc
|
|
34
34
|
def make_tr_attr_style(cell, row, rowmax, totalrows, opt)
|
35
35
|
top = row.zero? ? "#{SW1} 1.5pt;" : "none;"
|
36
36
|
bottom = "#{SW1} #{rowmax >= totalrows ? '1.5' : '1.0'}pt;"
|
37
|
-
ret = <<~STYLE.
|
37
|
+
ret = <<~STYLE.delete("\n")
|
38
38
|
border-top:#{top}mso-border-top-alt:#{top}
|
39
39
|
border-bottom:#{bottom}mso-border-bottom-alt:#{bottom}
|
40
40
|
STYLE
|
@@ -46,7 +46,7 @@ module IsoDoc
|
|
46
46
|
def keep_rows_together(_cell, rowmax, totalrows, opt)
|
47
47
|
opt[:header] and return true
|
48
48
|
@table_line_count > 15 and return false
|
49
|
-
|
49
|
+
totalrows <= 10 && rowmax < totalrows
|
50
50
|
end
|
51
51
|
|
52
52
|
def tbody_parse(node, table)
|