isodoc 1.0.29 → 1.1.0
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.rb +2 -0
- data/lib/isodoc/common.rb +0 -4
- data/lib/isodoc/convert.rb +18 -8
- data/lib/isodoc/function/blocks.rb +3 -3
- data/lib/isodoc/function/blocks_example_note.rb +2 -2
- data/lib/isodoc/function/inline.rb +5 -5
- data/lib/isodoc/function/references.rb +1 -17
- data/lib/isodoc/function/reqt.rb +1 -1
- data/lib/isodoc/function/section.rb +7 -11
- data/lib/isodoc/function/table.rb +1 -1
- data/lib/isodoc/function/terms.rb +2 -2
- data/lib/isodoc/headlesshtml_convert.rb +7 -6
- data/lib/isodoc/html_convert.rb +2 -1
- data/lib/isodoc/html_function/html.rb +1 -1
- data/lib/isodoc/html_function/postprocess.rb +1 -1
- data/lib/isodoc/pdf_convert.rb +8 -6
- data/lib/isodoc/presentation_xml_convert.rb +29 -0
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_convert.rb +2 -1
- data/lib/isodoc/word_function/body.rb +1 -1
- data/lib/isodoc/word_function/postprocess.rb +1 -0
- data/lib/isodoc/xref.rb +59 -0
- data/lib/isodoc/{function → xref}/xref_anchor.rb +10 -21
- data/lib/isodoc/xref/xref_counter.rb +74 -0
- data/lib/isodoc/{function → xref}/xref_gen.rb +9 -22
- data/lib/isodoc/{function → xref}/xref_gen_seq.rb +34 -26
- data/lib/isodoc/{function → xref}/xref_sect_gen.rb +32 -18
- data/lib/isodoc/xslfo_convert.rb +16 -4
- data/spec/isodoc/presentation_xml_spec.rb +20 -0
- metadata +16 -14
- data/lib/isodoc/function/xref_counter.rb +0 -84
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b5e9597107793ecac111d5706640c399dcdec0411fdf49489c7058cf342bac2
|
4
|
+
data.tar.gz: 0b488bc57ff9c36a418f0012a49d68111a2e5f519a0a5d6191d201db99356526
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26660b7ac5d08b63f0846c5d8a3caea1f58eed0491c1fcfe83ee3d3b9b3d73da9eaf57636fc48ed84370f12a1dd25e6043b5372750b03d6fc20547be0c6f22f0
|
7
|
+
data.tar.gz: 99fe284cd22c1c19dc3f4528ae057857194b0354f55cf31414b1dbc1d54f9c564b1b45101faaad426c69fb2fb15dd3ae2186d0532a95a1675f5b92f7658d7546
|
data/isodoc.gemspec
CHANGED
@@ -37,7 +37,7 @@ Gem::Specification.new do |spec|
|
|
37
37
|
spec.add_dependency "liquid"
|
38
38
|
spec.add_dependency "roman-numerals"
|
39
39
|
spec.add_dependency "sassc", "~> 2.4.0"
|
40
|
-
spec.add_dependency "metanorma", "~> 1.
|
40
|
+
spec.add_dependency "metanorma", "~> 1.1.0"
|
41
41
|
spec.add_dependency "rake", "~> 12.0"
|
42
42
|
|
43
43
|
spec.add_development_dependency "byebug", "~> 9.1"
|
data/lib/isodoc.rb
CHANGED
data/lib/isodoc/common.rb
CHANGED
@@ -9,8 +9,6 @@ require_relative "./function/table"
|
|
9
9
|
require_relative "./function/terms"
|
10
10
|
require_relative "./function/to_word_html"
|
11
11
|
require_relative "./function/utils"
|
12
|
-
require_relative "./function/xref_gen"
|
13
|
-
require_relative "./function/xref_sect_gen"
|
14
12
|
require_relative "./function/reqt"
|
15
13
|
require_relative "./class_utils"
|
16
14
|
|
@@ -27,8 +25,6 @@ module IsoDoc
|
|
27
25
|
include Function::Terms
|
28
26
|
include Function::ToWordHtml
|
29
27
|
include Function::Utils
|
30
|
-
include Function::XrefGen
|
31
|
-
include Function::XrefSectGen
|
32
28
|
|
33
29
|
extend ::IsoDoc::ClassUtils
|
34
30
|
end
|
data/lib/isodoc/convert.rb
CHANGED
@@ -53,7 +53,6 @@ module IsoDoc
|
|
53
53
|
@termexample = false
|
54
54
|
@note = false
|
55
55
|
@sourcecode = false
|
56
|
-
@anchors = {}
|
57
56
|
@footnotes = []
|
58
57
|
@comments = []
|
59
58
|
@in_footnote = false
|
@@ -142,7 +141,7 @@ module IsoDoc
|
|
142
141
|
end
|
143
142
|
|
144
143
|
def convert1(docxml, filename, dir)
|
145
|
-
|
144
|
+
@xrefs.parse docxml
|
146
145
|
noko do |xml|
|
147
146
|
xml.html **{ lang: "#{@lang}" } do |html|
|
148
147
|
html.parent.add_namespace("epub", "http://www.idpf.org/2007/ops")
|
@@ -158,25 +157,36 @@ module IsoDoc
|
|
158
157
|
@meta = Metadata.new(lang, script, labels)
|
159
158
|
end
|
160
159
|
|
161
|
-
def
|
160
|
+
def xref_init(lang, script, klass, labels, options)
|
161
|
+
@xrefs = Xref.new(lang, script, klass, labels, options)
|
162
|
+
end
|
163
|
+
|
164
|
+
def convert_init(file, input_filename, debug)
|
162
165
|
docxml = Nokogiri::XML(file)
|
163
|
-
filename, dir = init_file(
|
166
|
+
filename, dir = init_file(input_filename, debug)
|
164
167
|
docxml.root.default_namespace = ""
|
165
168
|
lang = docxml&.at(ns("//bibdata/language"))&.text || @lang
|
166
169
|
script = docxml&.at(ns("//bibdata/script"))&.text || @script
|
167
170
|
i18n_init(lang, script)
|
168
171
|
metadata_init(lang, script, @labels)
|
172
|
+
xref_init(lang, script, self, @labels, {})
|
169
173
|
[docxml, filename, dir]
|
170
174
|
end
|
171
175
|
|
172
|
-
def convert(
|
173
|
-
file = File.read(
|
176
|
+
def convert(input_filename, file = nil, debug = false, output_filename = nil)
|
177
|
+
file = File.read(input_filename, encoding: "utf-8") if file.nil?
|
174
178
|
@openmathdelim, @closemathdelim = extract_delims(file)
|
175
|
-
docxml, filename, dir = convert_init(file,
|
179
|
+
docxml, filename, dir = convert_init(file, input_filename, debug)
|
176
180
|
result = convert1(docxml, filename, dir)
|
177
181
|
return result if debug
|
178
|
-
|
182
|
+
output_filename ||= "#{filename}.#{@suffix}"
|
183
|
+
postprocess(result, output_filename, dir)
|
179
184
|
FileUtils.rm_rf dir
|
180
185
|
end
|
186
|
+
|
187
|
+
def middle_clause
|
188
|
+
"//clause[parent::sections][not(xmlns:title = 'Scope')]"\
|
189
|
+
"[not(descendant::terms)]".freeze
|
190
|
+
end
|
181
191
|
end
|
182
192
|
end
|
@@ -6,7 +6,7 @@ module IsoDoc::Function
|
|
6
6
|
|
7
7
|
def figure_name_parse(node, div, name)
|
8
8
|
return if name.nil? && node.at(ns("./figure"))
|
9
|
-
lbl = anchor(node['id'], :label, false)
|
9
|
+
lbl = @xrefs.anchor(node['id'], :label, false)
|
10
10
|
lbl = nil if labelled_ancestor(node) && node.ancestors("figure").empty?
|
11
11
|
return if lbl.nil? && name.nil?
|
12
12
|
div.p **{ class: "FigureTitle", style: "text-align:center;" } do |p|
|
@@ -55,7 +55,7 @@ module IsoDoc::Function
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def sourcecode_name_parse(node, div, name)
|
58
|
-
lbl = anchor(node['id'], :label, false)
|
58
|
+
lbl = @xrefs.anchor(node['id'], :label, false)
|
59
59
|
lbl = nil if labelled_ancestor(node)
|
60
60
|
return if lbl.nil? && name.nil?
|
61
61
|
div.p **{ class: "SourceTitle", style: "text-align:center;" } do |p|
|
@@ -141,7 +141,7 @@ module IsoDoc::Function
|
|
141
141
|
out.div **attr_code(class: "formula") do |div|
|
142
142
|
div.p do |p|
|
143
143
|
parse(node.at(ns("./stem")), div)
|
144
|
-
lbl = anchor(node['id'], :label, false)
|
144
|
+
lbl = @xrefs.anchor(node['id'], :label, false)
|
145
145
|
unless lbl.nil?
|
146
146
|
insert_tab(div, 1)
|
147
147
|
div << "(#{lbl})"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module IsoDoc::Function
|
2
2
|
module Blocks
|
3
3
|
def example_label(node, div, name)
|
4
|
-
n =
|
4
|
+
n = @xrefs.get[node["id"]]
|
5
5
|
div.p **{ class: "example-title" } do |p|
|
6
6
|
lbl = (n.nil? || n[:label].nil? || n[:label].empty?) ? @example_lbl :
|
7
7
|
l10n("#{@example_lbl} #{n[:label]}")
|
@@ -56,7 +56,7 @@ module IsoDoc::Function
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def note_label(node)
|
59
|
-
n =
|
59
|
+
n = @xrefs.get[node["id"]]
|
60
60
|
return @note_lbl if n.nil? || n[:label].nil? || n[:label].empty?
|
61
61
|
l10n("#{@note_lbl} #{n[:label]}")
|
62
62
|
end
|
@@ -17,17 +17,17 @@ module IsoDoc::Function
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def prefix_container(container, linkend, _target)
|
20
|
-
l10n(anchor(container, :xref) + ", " + linkend)
|
20
|
+
l10n(@xrefs.anchor(container, :xref) + ", " + linkend)
|
21
21
|
end
|
22
22
|
|
23
23
|
def anchor_linkend(node, linkend)
|
24
24
|
if node["citeas"].nil? && node["bibitemid"]
|
25
|
-
return anchor(node["bibitemid"] ,:xref) || "???"
|
25
|
+
return @xrefs.anchor(node["bibitemid"] ,:xref) || "???"
|
26
26
|
elsif node["target"] && !/.#./.match(node["target"])
|
27
|
-
linkend = anchor(node["target"], :xref)
|
28
|
-
container = anchor(node["target"], :container, false)
|
27
|
+
linkend = @xrefs.anchor(node["target"], :xref)
|
28
|
+
container = @xrefs.anchor(node["target"], :container, false)
|
29
29
|
(container && get_note_container_id(node) != container &&
|
30
|
-
@
|
30
|
+
@xrefs.get[node["target"]]) &&
|
31
31
|
linkend = prefix_container(container, linkend, node["target"])
|
32
32
|
linkend = capitalise_xref(node, linkend)
|
33
33
|
end
|
@@ -129,12 +129,6 @@ module IsoDoc::Function
|
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
|
-
ISO_PUBLISHER_XPATH =
|
133
|
-
"./contributor[xmlns:role/@type = 'publisher']/"\
|
134
|
-
"organization[abbreviation = 'ISO' or xmlns:abbreviation = 'IEC' or "\
|
135
|
-
"xmlns:name = 'International Organization for Standardization' or "\
|
136
|
-
"xmlns:name = 'International Electrotechnical Commission']".freeze
|
137
|
-
|
138
132
|
def is_standard(b)
|
139
133
|
ret = false
|
140
134
|
b.xpath(ns("./docidentifier")).each do |id|
|
@@ -185,7 +179,7 @@ module IsoDoc::Function
|
|
185
179
|
def bibliography_parse(node, out)
|
186
180
|
title = node&.at(ns("./title"))&.text || ""
|
187
181
|
out.div do |div|
|
188
|
-
anchor(node['id'], :label, false) and
|
182
|
+
@xrefs.anchor(node['id'], :label, false) and
|
189
183
|
clause_parse_title(node, div, node.at(ns("./title")), out) or
|
190
184
|
div.h2 title, **{ class: "Section3" }
|
191
185
|
biblio_list(node, div, true)
|
@@ -199,16 +193,6 @@ module IsoDoc::Function
|
|
199
193
|
ref
|
200
194
|
end
|
201
195
|
|
202
|
-
def reference_names(ref)
|
203
|
-
isopub = ref.at(ns(ISO_PUBLISHER_XPATH))
|
204
|
-
ids = bibitem_ref_code(ref)
|
205
|
-
identifiers = render_identifier(ids)
|
206
|
-
date = ref.at(ns("./date[@type = 'published']"))
|
207
|
-
allparts = ref.at(ns("./extent[@type='part'][referenceFrom='all']"))
|
208
|
-
reference = docid_l10n(identifiers[0] || identifiers[1])
|
209
|
-
@anchors[ref["id"]] = { xref: reference }
|
210
|
-
end
|
211
|
-
|
212
196
|
# def ref_names(ref)
|
213
197
|
# linkend = ref.text
|
214
198
|
# linkend.gsub!(/[\[\]]/, "") unless /^\[\d+\]$/.match linkend
|
data/lib/isodoc/function/reqt.rb
CHANGED
@@ -11,8 +11,8 @@ module IsoDoc::Function
|
|
11
11
|
def inline_header_title(out, node, c1)
|
12
12
|
out.span **{ class: "zzMoveToFollowing" } do |s|
|
13
13
|
s.b do |b|
|
14
|
-
if anchor(node['id'], :label, false) && !@suppressheadingnumbers
|
15
|
-
b << "#{anchor(node['id'], :label)}#{clausedelim}"
|
14
|
+
if @xrefs.anchor(node['id'], :label, false) && !@suppressheadingnumbers
|
15
|
+
b << "#{@xrefs.anchor(node['id'], :label)}#{clausedelim}"
|
16
16
|
clausedelimspace(out)
|
17
17
|
end
|
18
18
|
c1&.children&.each { |c2| parse(c2, b) }
|
@@ -26,8 +26,8 @@ module IsoDoc::Function
|
|
26
26
|
if node["inline-header"] == "true"
|
27
27
|
inline_header_title(out, node, c1)
|
28
28
|
else
|
29
|
-
div.send "h#{anchor(node['id'], :level, false) || '1'}" do |h|
|
30
|
-
lbl = anchor(node['id'], :label, false)
|
29
|
+
div.send "h#{@xrefs.anchor(node['id'], :level, false) || '1'}" do |h|
|
30
|
+
lbl = @xrefs.anchor(node['id'], :label, false)
|
31
31
|
h << "#{lbl}#{clausedelim}" if lbl && !@suppressheadingnumbers
|
32
32
|
clausedelimspace(out) if lbl && !@suppressheadingnumbers
|
33
33
|
c1&.children&.each { |c2| parse(c2, h) }
|
@@ -58,14 +58,10 @@ module IsoDoc::Function
|
|
58
58
|
div.parent.at(".//h1")
|
59
59
|
end
|
60
60
|
|
61
|
-
MIDDLE_CLAUSE =
|
62
|
-
"//clause[parent::sections][not(xmlns:title = 'Scope')]"\
|
63
|
-
"[not(descendant::terms)]".freeze
|
64
|
-
|
65
61
|
def clause(isoxml, out)
|
66
|
-
isoxml.xpath(ns(
|
62
|
+
isoxml.xpath(ns(middle_clause)).each do |c|
|
67
63
|
out.div **attr_code(id: c["id"]) do |s|
|
68
|
-
clause_name(anchor(c['id'], :label),
|
64
|
+
clause_name(@xrefs.anchor(c['id'], :label),
|
69
65
|
c&.at(ns("./title")), s, nil)
|
70
66
|
c.elements.reject { |c1| c1.name == "title" }.each do |c1|
|
71
67
|
parse(c1, s)
|
@@ -76,7 +72,7 @@ module IsoDoc::Function
|
|
76
72
|
|
77
73
|
def annex_name(annex, name, div)
|
78
74
|
div.h1 **{ class: "Annex" } do |t|
|
79
|
-
t << "#{anchor(annex['id'], :label)}<br/><br/>"
|
75
|
+
t << "#{@xrefs.anchor(annex['id'], :label)}<br/><br/>"
|
80
76
|
t.b do |b|
|
81
77
|
name&.children&.each { |c2| parse(c2, b) }
|
82
78
|
end
|
@@ -3,7 +3,7 @@ module IsoDoc::Function
|
|
3
3
|
|
4
4
|
def table_title_parse(node, out)
|
5
5
|
name = node.at(ns("./name"))
|
6
|
-
lbl = anchor(node['id'], :label, false)
|
6
|
+
lbl = @xrefs.anchor(node['id'], :label, false)
|
7
7
|
lbl = nil if labelled_ancestor(node)
|
8
8
|
return if name.nil? && lbl.nil?
|
9
9
|
out.p **{ class: "TableTitle", style: "text-align:center;" } do |p|
|
@@ -43,7 +43,7 @@ module IsoDoc::Function
|
|
43
43
|
out.div **note_attrs(node) do |div|
|
44
44
|
first = node.first_element_child
|
45
45
|
div.p do |p|
|
46
|
-
p << "#{anchor(node['id'], :label) || '???'}: "
|
46
|
+
p << "#{@xrefs.anchor(node['id'], :label) || '???'}: "
|
47
47
|
para_then_remainder(first, node, p, div)
|
48
48
|
end
|
49
49
|
end
|
@@ -59,7 +59,7 @@ module IsoDoc::Function
|
|
59
59
|
|
60
60
|
def termdef_parse(node, out)
|
61
61
|
out.p **{ class: "TermNum", id: node["id"] } do |p|
|
62
|
-
p << "#{
|
62
|
+
p << "#{@xrefs.get[node["id"]][:label]}#{clausedelim}"
|
63
63
|
end
|
64
64
|
set_termdomain("")
|
65
65
|
node.children.each { |n| parse(n, out) }
|
@@ -16,18 +16,19 @@ module IsoDoc
|
|
16
16
|
|
17
17
|
def initialize(options)
|
18
18
|
@format = :html
|
19
|
+
@suffix = "headless.html"
|
19
20
|
super
|
20
21
|
end
|
21
22
|
|
22
|
-
def convert(
|
23
|
-
file = File.read(
|
23
|
+
def convert(input_filename, file = nil, debug = false, output_filename = nil)
|
24
|
+
file = File.read(input_filename, encoding: "utf-8") if file.nil?
|
24
25
|
@openmathdelim, @closemathdelim = extract_delims(file)
|
25
|
-
docxml,
|
26
|
-
result = convert1(docxml,
|
26
|
+
docxml, filename, dir = convert_init(file, input_filename, debug)
|
27
|
+
result = convert1(docxml, filename, dir)
|
27
28
|
return result if debug
|
28
|
-
postprocess(result, filename + ".tmp", dir)
|
29
|
+
postprocess(result, filename + ".tmp.html", dir)
|
29
30
|
FileUtils.rm_rf dir
|
30
|
-
strip_head(filename + ".tmp.html",
|
31
|
+
strip_head(filename + ".tmp.html", output_filename || "#{filename}.#{@suffix}")
|
31
32
|
FileUtils.rm_rf ["#{filename}.tmp.html", tmpimagedir]
|
32
33
|
end
|
33
34
|
|
data/lib/isodoc/html_convert.rb
CHANGED
@@ -16,10 +16,11 @@ module IsoDoc
|
|
16
16
|
|
17
17
|
def initialize(options)
|
18
18
|
@format = :html
|
19
|
+
@suffix = "html"
|
19
20
|
super
|
20
21
|
end
|
21
22
|
|
22
|
-
def convert(filename, file = nil, debug = false)
|
23
|
+
def convert(filename, file = nil, debug = false, output_filename = nil)
|
23
24
|
ret = super
|
24
25
|
Dir.exists?(tmpimagedir) and Dir["#{tmpimagedir}/*"].empty? and
|
25
26
|
FileUtils.rm_r tmpimagedir
|
@@ -18,7 +18,7 @@ module IsoDoc::HtmlFunction
|
|
18
18
|
#result = populate_template(result, :html)
|
19
19
|
result = from_xhtml(move_images(to_xhtml(result)))
|
20
20
|
result = html5(script_cdata(inject_script(result)))
|
21
|
-
File.open(
|
21
|
+
File.open(filename, "w:UTF-8") { |f| f.write(result) }
|
22
22
|
end
|
23
23
|
|
24
24
|
def html5(doc)
|
data/lib/isodoc/pdf_convert.rb
CHANGED
@@ -24,19 +24,21 @@ module IsoDoc
|
|
24
24
|
|
25
25
|
def initialize(options)
|
26
26
|
@format = :pdf
|
27
|
+
@suffix = "pdf"
|
27
28
|
super
|
28
29
|
end
|
29
30
|
|
30
|
-
def convert(
|
31
|
-
file = File.read(
|
31
|
+
def convert(input_filename, file = nil, debug = false, output_filename = nil)
|
32
|
+
file = File.read(input_filename, encoding: "utf-8") if file.nil?
|
32
33
|
@openmathdelim, @closemathdelim = extract_delims(file)
|
33
|
-
docxml,
|
34
|
+
docxml, filename, dir = convert_init(file, input_filename, debug)
|
34
35
|
result = convert1(docxml, filename, dir)
|
35
36
|
return result if debug
|
36
|
-
postprocess(result, filename, dir)
|
37
|
+
postprocess(result, filename + ".tmp.html", dir)
|
37
38
|
FileUtils.rm_rf dir
|
38
|
-
::Metanorma::Output::Pdf.new.convert("#{filename}.html",
|
39
|
-
|
39
|
+
::Metanorma::Output::Pdf.new.convert("#{filename}.tmp.html",
|
40
|
+
output_filename || "#{filename}.#{@suffix}")
|
41
|
+
FileUtils.rm_rf ["#{filename}.tmp.html", tmpimagedir]
|
40
42
|
end
|
41
43
|
|
42
44
|
def xref_parse(node, out)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
class PresentationXMLConvert < ::IsoDoc::Convert
|
3
|
+
def initialize(options)
|
4
|
+
@format = :presentation
|
5
|
+
@suffix = "presentation.xml"
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def convert1(docxml, filename, dir)
|
10
|
+
@xrefs.parse docxml
|
11
|
+
info docxml, nil
|
12
|
+
docxml.to_xml
|
13
|
+
end
|
14
|
+
|
15
|
+
def postprocess(result, filename, dir)
|
16
|
+
#result = from_xhtml(cleanup(to_xhtml(textcleanup(result))))
|
17
|
+
toXML(result, filename)
|
18
|
+
@files_to_delete.each { |f| FileUtils.rm_rf f }
|
19
|
+
end
|
20
|
+
|
21
|
+
def toXML(result, filename)
|
22
|
+
#result = (from_xhtml(html_cleanup(to_xhtml(result))))
|
23
|
+
#result = from_xhtml(move_images(to_xhtml(result)))
|
24
|
+
#result = html5(script_cdata(inject_script(result)))
|
25
|
+
File.open(filename, "w:UTF-8") { |f| f.write(result) }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
data/lib/isodoc/version.rb
CHANGED
data/lib/isodoc/word_convert.rb
CHANGED
@@ -32,10 +32,11 @@ module IsoDoc
|
|
32
32
|
|
33
33
|
def initialize(options)
|
34
34
|
@format = :doc
|
35
|
+
@suffix = "doc"
|
35
36
|
super
|
36
37
|
end
|
37
38
|
|
38
|
-
def convert(filename, file = nil, debug = false)
|
39
|
+
def convert(filename, file = nil, debug = false, output_filename = nil)
|
39
40
|
ret = super
|
40
41
|
FileUtils.rm_rf tmpimagedir
|
41
42
|
ret
|
@@ -156,7 +156,7 @@ module IsoDoc::WordFunction
|
|
156
156
|
out.div **note_attrs(node) do |div|
|
157
157
|
first = node.first_element_child
|
158
158
|
div.p **{ class: "Note" } do |p|
|
159
|
-
anchor =
|
159
|
+
anchor = @xrefs.get[node['id']]
|
160
160
|
p << "#{anchor&.dig(:label) || '???'}: "
|
161
161
|
para_then_remainder(first, node, p, div)
|
162
162
|
end
|
@@ -32,6 +32,7 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def postprocess(result, filename, dir)
|
35
|
+
filename = filename.sub(/\.doc$/, "")
|
35
36
|
header = generate_header(filename, dir)
|
36
37
|
result = from_xhtml(cleanup(to_xhtml(textcleanup(result))))
|
37
38
|
toWord(result, filename, dir, header)
|
data/lib/isodoc/xref.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative "xref/xref_anchor"
|
2
|
+
require_relative "xref/xref_counter"
|
3
|
+
require_relative "xref/xref_gen_seq"
|
4
|
+
require_relative "xref/xref_gen"
|
5
|
+
require_relative "xref/xref_sect_gen"
|
6
|
+
require_relative "class_utils"
|
7
|
+
|
8
|
+
module IsoDoc
|
9
|
+
class Xref
|
10
|
+
include XrefGen::Anchor
|
11
|
+
include XrefGen::Blocks
|
12
|
+
include XrefGen::Sections
|
13
|
+
|
14
|
+
def initialize(lang, script, klass, labels, options = {})
|
15
|
+
@anchors = {}
|
16
|
+
@lang = lang
|
17
|
+
@script = script
|
18
|
+
@klass = klass
|
19
|
+
@labels = labels
|
20
|
+
@options = options
|
21
|
+
end
|
22
|
+
|
23
|
+
def get
|
24
|
+
@anchors
|
25
|
+
end
|
26
|
+
|
27
|
+
def anchor(id, lbl, warning = true)
|
28
|
+
return nil if id.nil? || id.empty?
|
29
|
+
unless @anchors[id]
|
30
|
+
if warning
|
31
|
+
@seen ||= Seen_Anchor.instance
|
32
|
+
@seen.seen(id) or warn "No label has been processed for ID #{id}"
|
33
|
+
@seen.add(id)
|
34
|
+
return "[#{id}]"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
@anchors.dig(id, lbl)
|
38
|
+
end
|
39
|
+
|
40
|
+
# extract names for all anchors, xref and label
|
41
|
+
def parse(docxml)
|
42
|
+
initial_anchor_names(docxml)
|
43
|
+
back_anchor_names(docxml)
|
44
|
+
# preempt clause notes with all other types of note (ISO default)
|
45
|
+
note_anchor_names(docxml.xpath(ns("//table | //figure")))
|
46
|
+
note_anchor_names(docxml.xpath(ns(SECTIONS_XPATH)))
|
47
|
+
example_anchor_names(docxml.xpath(ns(SECTIONS_XPATH)))
|
48
|
+
list_anchor_names(docxml.xpath(ns(SECTIONS_XPATH)))
|
49
|
+
end
|
50
|
+
|
51
|
+
def ns(xpath)
|
52
|
+
Common::ns(xpath)
|
53
|
+
end
|
54
|
+
|
55
|
+
def l10n(a, lang = @lang, script = @script)
|
56
|
+
IsoDoc::Function::I18n::l10n(a, lang, script)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require "singleton"
|
2
2
|
|
3
|
-
module IsoDoc::
|
4
|
-
module
|
3
|
+
module IsoDoc::XrefGen
|
4
|
+
module Anchor
|
5
5
|
class Seen_Anchor
|
6
6
|
include Singleton
|
7
7
|
|
@@ -12,34 +12,23 @@ module IsoDoc::Function
|
|
12
12
|
def seen(x)
|
13
13
|
@seen.has_key?(x)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def add(x)
|
17
17
|
@seen[x] = true
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
def initialize()
|
22
|
+
@anchors = {}
|
23
|
+
end
|
22
24
|
|
23
25
|
def get_anchors
|
24
26
|
@anchors
|
25
27
|
end
|
26
28
|
|
27
|
-
def anchor(id, lbl, warning = true)
|
28
|
-
return nil if id.nil? || id.empty?
|
29
|
-
unless @anchors[id]
|
30
|
-
if warning
|
31
|
-
@seen ||= Seen_Anchor.instance
|
32
|
-
@seen.seen(id) or warn "No label has been processed for ID #{id}"
|
33
|
-
@seen.add(id)
|
34
|
-
return "[#{id}]"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
@anchors.dig(id, lbl)
|
38
|
-
end
|
39
|
-
|
40
29
|
def anchor_struct_label(lbl, elem)
|
41
30
|
case elem
|
42
|
-
when @
|
31
|
+
when @labels["appendix"] then l10n("#{elem} #{lbl}")
|
43
32
|
else
|
44
33
|
lbl.to_s
|
45
34
|
end
|
@@ -47,8 +36,8 @@ module IsoDoc::Function
|
|
47
36
|
|
48
37
|
def anchor_struct_xref(lbl, elem)
|
49
38
|
case elem
|
50
|
-
when @
|
51
|
-
when @
|
39
|
+
when @labels["formula"] then l10n("#{elem} (#{lbl})")
|
40
|
+
when @labels["inequality"] then l10n("#{elem} (#{lbl})")
|
52
41
|
else
|
53
42
|
l10n("#{elem} #{lbl}")
|
54
43
|
end
|
@@ -59,7 +48,7 @@ module IsoDoc::Function
|
|
59
48
|
ret[:label] = unnumbered == "true" ? nil : anchor_struct_label(lbl, elem)
|
60
49
|
ret[:xref] = anchor_struct_xref(unnumbered == "true" ? "(??)" : lbl, elem)
|
61
50
|
ret[:xref].gsub!(/ $/, "")
|
62
|
-
ret[:container] = get_clause_id(container) unless container.nil?
|
51
|
+
ret[:container] = @klass.get_clause_id(container) unless container.nil?
|
63
52
|
ret[:type] = type
|
64
53
|
ret
|
65
54
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "roman-numerals"
|
2
|
+
|
3
|
+
module IsoDoc::XrefGen
|
4
|
+
class Counter
|
5
|
+
def initialize
|
6
|
+
@num = 0
|
7
|
+
@letter = ""
|
8
|
+
@subseq = ""
|
9
|
+
@letter_override = nil
|
10
|
+
@number_override = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def new_subseq_increment(node)
|
14
|
+
@subseq = node["subsequence"]
|
15
|
+
@num += 1
|
16
|
+
@letter = node["subsequence"] ? "a" : ""
|
17
|
+
if node["number"]
|
18
|
+
/^(?<n>\d*)(?<a>[a-z]*)$/ =~ node["number"]
|
19
|
+
if n || a
|
20
|
+
@letter_override = @letter = a if a
|
21
|
+
@number_override = @num = n.to_i if n
|
22
|
+
else
|
23
|
+
@letter_override = node["number"]
|
24
|
+
@letter = @letter_override if /^[a-z]$/.match(@letter_override)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def sequence_increment(node)
|
30
|
+
if node["number"]
|
31
|
+
@number_override = node["number"]
|
32
|
+
@num = @number_override.to_i if /^\d+$/.match(@number_override)
|
33
|
+
else
|
34
|
+
@num += 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def subsequence_increment(node)
|
39
|
+
if node["number"]
|
40
|
+
@letter_override = node["number"]
|
41
|
+
@letter = @letter_override if /^[a-z]$/.match(@letter_override)
|
42
|
+
else
|
43
|
+
@letter = (@letter.ord + 1).chr.to_s
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def increment(node)
|
48
|
+
return self if node["unnumbered"]
|
49
|
+
@letter_override = nil
|
50
|
+
@number_override = nil
|
51
|
+
if node["subsequence"] != @subseq
|
52
|
+
new_subseq_increment(node)
|
53
|
+
elsif @letter.empty?
|
54
|
+
sequence_increment(node)
|
55
|
+
else
|
56
|
+
subsequence_increment(node)
|
57
|
+
end
|
58
|
+
self
|
59
|
+
end
|
60
|
+
|
61
|
+
def print
|
62
|
+
"#{@number_override || @num}#{@letter_override || @letter}"
|
63
|
+
end
|
64
|
+
|
65
|
+
def listlabel(depth)
|
66
|
+
return @num.to_s if [2, 7].include? depth
|
67
|
+
return (96 + @num).chr.to_s if [1, 6].include? depth
|
68
|
+
return (64 + @num).chr.to_s if [4, 9].include? depth
|
69
|
+
return RomanNumerals.to_roman(@num).downcase if [3, 8].include? depth
|
70
|
+
return RomanNumerals.to_roman(@num).upcase if [5, 10].include? depth
|
71
|
+
return @num.to_s
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -1,11 +1,9 @@
|
|
1
|
-
require_relative "
|
2
|
-
require_relative "xref_anchor"
|
3
|
-
require_relative "xref_gen_seq"
|
1
|
+
require_relative "xref_gen_seq.rb"
|
4
2
|
|
5
|
-
module IsoDoc::
|
6
|
-
module
|
3
|
+
module IsoDoc::XrefGen
|
4
|
+
module Blocks
|
7
5
|
def termnote_label(n)
|
8
|
-
@
|
6
|
+
@labels["termnote"].gsub(/%/, n.to_s)
|
9
7
|
end
|
10
8
|
|
11
9
|
def termnote_anchor_names(docxml)
|
@@ -17,7 +15,7 @@ module IsoDoc::Function
|
|
17
15
|
@anchors[n["id"]] =
|
18
16
|
{ label: termnote_label(c.print), type: "termnote",
|
19
17
|
xref: l10n("#{anchor(t['id'], :xref)}, "\
|
20
|
-
"#{@
|
18
|
+
"#{@labels["note_xref"]} #{c.print}") }
|
21
19
|
end
|
22
20
|
end
|
23
21
|
end
|
@@ -33,7 +31,7 @@ module IsoDoc::Function
|
|
33
31
|
@anchors[n["id"]] = {
|
34
32
|
type: "termexample", label: idx,
|
35
33
|
xref: l10n("#{anchor(t['id'], :xref)}, "\
|
36
|
-
"#{@
|
34
|
+
"#{@labels["example_xref"]} #{c.print}") }
|
37
35
|
end
|
38
36
|
end
|
39
37
|
end
|
@@ -57,7 +55,7 @@ module IsoDoc::Function
|
|
57
55
|
notes.each do |n|
|
58
56
|
next if @anchors[n["id"]] || n["id"].nil? || n["id"].empty?
|
59
57
|
idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
|
60
|
-
@anchors[n["id"]] = anchor_struct(idx, n, @
|
58
|
+
@anchors[n["id"]] = anchor_struct(idx, n, @labels["note_xref"],
|
61
59
|
"note", false)
|
62
60
|
end
|
63
61
|
note_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
|
@@ -79,7 +77,7 @@ module IsoDoc::Function
|
|
79
77
|
next if @anchors[n["id"]]
|
80
78
|
next if n["id"].nil? || n["id"].empty?
|
81
79
|
idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
|
82
|
-
@anchors[n["id"]] = anchor_struct(idx, n, @
|
80
|
+
@anchors[n["id"]] = anchor_struct(idx, n, @labels["example_xref"],
|
83
81
|
"example", n["unnumbered"])
|
84
82
|
end
|
85
83
|
example_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
|
@@ -94,7 +92,7 @@ module IsoDoc::Function
|
|
94
92
|
notes.each do |n|
|
95
93
|
next if n["id"].nil? || n["id"].empty?
|
96
94
|
idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
|
97
|
-
@anchors[n["id"]] = anchor_struct(idx, n, @
|
95
|
+
@anchors[n["id"]] = anchor_struct(idx, n, @labels["list"], "list", false)
|
98
96
|
list_item_anchor_names(n, @anchors[n["id"]], 1, "", notes.size != 1)
|
99
97
|
end
|
100
98
|
list_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
|
@@ -115,16 +113,5 @@ module IsoDoc::Function
|
|
115
113
|
end
|
116
114
|
end
|
117
115
|
end
|
118
|
-
|
119
|
-
# extract names for all anchors, xref and label
|
120
|
-
def anchor_names(docxml)
|
121
|
-
initial_anchor_names(docxml)
|
122
|
-
back_anchor_names(docxml)
|
123
|
-
# preempt clause notes with all other types of note (ISO default)
|
124
|
-
note_anchor_names(docxml.xpath(ns("//table | //figure")))
|
125
|
-
note_anchor_names(docxml.xpath(ns(SECTIONS_XPATH)))
|
126
|
-
example_anchor_names(docxml.xpath(ns(SECTIONS_XPATH)))
|
127
|
-
list_anchor_names(docxml.xpath(ns(SECTIONS_XPATH)))
|
128
|
-
end
|
129
116
|
end
|
130
117
|
end
|
@@ -1,11 +1,19 @@
|
|
1
|
-
module IsoDoc::
|
2
|
-
module
|
1
|
+
module IsoDoc::XrefGen
|
2
|
+
module Blocks
|
3
|
+
def hiersep
|
4
|
+
"."
|
5
|
+
end
|
6
|
+
|
7
|
+
def hierfigsep
|
8
|
+
"-"
|
9
|
+
end
|
10
|
+
|
3
11
|
def subfigure_increment(j, c, t)
|
4
12
|
if t.parent.name == "figure" then j += 1
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
13
|
+
else
|
14
|
+
j = 0
|
15
|
+
c.increment(t)
|
16
|
+
end
|
9
17
|
j
|
10
18
|
end
|
11
19
|
|
@@ -18,7 +26,7 @@ module IsoDoc::Function
|
|
18
26
|
label = c.print + (j.zero? ? "" : "-#{j}")
|
19
27
|
next if t["id"].nil? || t["id"].empty?
|
20
28
|
@anchors[t["id"]] =
|
21
|
-
anchor_struct(label, nil, @
|
29
|
+
anchor_struct(label, nil, @labels["figure"], "figure", t["unnumbered"])
|
22
30
|
end
|
23
31
|
end
|
24
32
|
|
@@ -27,7 +35,7 @@ module IsoDoc::Function
|
|
27
35
|
clause.xpath(ns(".//table")).each do |t|
|
28
36
|
next if t["id"].nil? || t["id"].empty?
|
29
37
|
@anchors[t["id"]] = anchor_struct(c.increment(t).print, nil,
|
30
|
-
@
|
38
|
+
@labels["table"], "table", t["unnumbered"])
|
31
39
|
end
|
32
40
|
end
|
33
41
|
|
@@ -37,7 +45,7 @@ module IsoDoc::Function
|
|
37
45
|
next if t["id"].nil? || t["id"].empty?
|
38
46
|
@anchors[t["id"]] =
|
39
47
|
anchor_struct(c.increment(t).print, t,
|
40
|
-
t["inequality"] ? @
|
48
|
+
t["inequality"] ? @labels["inequality"] : @labels["formula"],
|
41
49
|
"formula", t["unnumbered"])
|
42
50
|
end
|
43
51
|
end
|
@@ -56,9 +64,9 @@ module IsoDoc::Function
|
|
56
64
|
end
|
57
65
|
|
58
66
|
def sequential_permission_names2(t, id)
|
59
|
-
sequential_permission_names1(t, id, "permission", @
|
60
|
-
sequential_permission_names1(t, id, "requirement", @
|
61
|
-
sequential_permission_names1(t, id, "recommendation", @
|
67
|
+
sequential_permission_names1(t, id, "permission", @labels["permission"])
|
68
|
+
sequential_permission_names1(t, id, "requirement", @labels["requirement"])
|
69
|
+
sequential_permission_names1(t, id, "recommendation", @labels["recommendation"])
|
62
70
|
end
|
63
71
|
|
64
72
|
def sequential_permission_names1(block, lbl, klass, label)
|
@@ -75,9 +83,9 @@ module IsoDoc::Function
|
|
75
83
|
sequential_table_names(clause)
|
76
84
|
sequential_figure_names(clause)
|
77
85
|
sequential_formula_names(clause)
|
78
|
-
sequential_permission_names(clause, "permission", @
|
79
|
-
sequential_permission_names(clause, "requirement", @
|
80
|
-
sequential_permission_names(clause, "recommendation", @
|
86
|
+
sequential_permission_names(clause, "permission", @labels["permission"])
|
87
|
+
sequential_permission_names(clause, "requirement", @labels["requirement"])
|
88
|
+
sequential_permission_names(clause, "recommendation", @labels["recommendation"])
|
81
89
|
end
|
82
90
|
|
83
91
|
def hierarchical_figure_names(clause, num)
|
@@ -89,7 +97,7 @@ module IsoDoc::Function
|
|
89
97
|
label = "#{num}#{hiersep}#{c.print}" +
|
90
98
|
(j.zero? ? "" : "#{hierfigsep}#{j}")
|
91
99
|
next if t["id"].nil? || t["id"].empty?
|
92
|
-
@anchors[t["id"]] = anchor_struct(label, nil, @
|
100
|
+
@anchors[t["id"]] = anchor_struct(label, nil, @labels["figure"], "figure",
|
93
101
|
t["unnumbered"])
|
94
102
|
end
|
95
103
|
end
|
@@ -100,7 +108,7 @@ module IsoDoc::Function
|
|
100
108
|
next if t["id"].nil? || t["id"].empty?
|
101
109
|
@anchors[t["id"]] =
|
102
110
|
anchor_struct("#{num}#{hiersep}#{c.increment(t).print}",
|
103
|
-
nil, @
|
111
|
+
nil, @labels["table"], "table", t["unnumbered"])
|
104
112
|
end
|
105
113
|
end
|
106
114
|
|
@@ -108,11 +116,11 @@ module IsoDoc::Function
|
|
108
116
|
hierarchical_table_names(clause, num)
|
109
117
|
hierarchical_figure_names(clause, num)
|
110
118
|
hierarchical_formula_names(clause, num)
|
111
|
-
hierarchical_permission_names(clause, num, "permission", @
|
119
|
+
hierarchical_permission_names(clause, num, "permission", @labels["permission"])
|
112
120
|
hierarchical_permission_names(clause, num, "requirement",
|
113
|
-
@
|
121
|
+
@labels["requirement"])
|
114
122
|
hierarchical_permission_names(clause, num, "recommendation",
|
115
|
-
@
|
123
|
+
@labels["recommendation"])
|
116
124
|
end
|
117
125
|
|
118
126
|
def hierarchical_formula_names(clause, num)
|
@@ -121,7 +129,7 @@ module IsoDoc::Function
|
|
121
129
|
next if t["id"].nil? || t["id"].empty?
|
122
130
|
@anchors[t["id"]] =
|
123
131
|
anchor_struct("#{num}#{hiersep}#{c.increment(t).print}", nil,
|
124
|
-
t["inequality"] ? @
|
132
|
+
t["inequality"] ? @labels["inequality"] : @labels["formula"],
|
125
133
|
"formula", t["unnumbered"])
|
126
134
|
end
|
127
135
|
end
|
@@ -136,13 +144,13 @@ module IsoDoc::Function
|
|
136
144
|
end
|
137
145
|
end
|
138
146
|
|
139
|
-
|
140
|
-
hierarchical_permission_names1(t, id, "permission", @
|
141
|
-
hierarchical_permission_names1(t, id, "requirement", @
|
142
|
-
hierarchical_permission_names1(t, id, "recommendation", @
|
147
|
+
def hierarchical_permission_names2(t, id)
|
148
|
+
hierarchical_permission_names1(t, id, "permission", @labels["permission"])
|
149
|
+
hierarchical_permission_names1(t, id, "requirement", @labels["requirement"])
|
150
|
+
hierarchical_permission_names1(t, id, "recommendation", @labels["recommendation"])
|
143
151
|
end
|
144
152
|
|
145
|
-
|
153
|
+
def hierarchical_permission_names1(block, lbl, klass, label)
|
146
154
|
c = Counter.new
|
147
155
|
block.xpath(ns("./#{klass}")).each do |t|
|
148
156
|
next if t["id"].nil? || t["id"].empty?
|
@@ -1,18 +1,18 @@
|
|
1
|
-
module IsoDoc::
|
2
|
-
module
|
1
|
+
module IsoDoc::XrefGen
|
2
|
+
module Sections
|
3
3
|
def back_anchor_names(docxml)
|
4
4
|
docxml.xpath(ns("//annex")).each_with_index do |c, i|
|
5
5
|
annex_names(c, (65 + i).chr.to_s)
|
6
6
|
end
|
7
7
|
docxml.xpath(
|
8
|
-
|
8
|
+
ns("//bibliography/clause[.//references[@normative = 'false']] | "\
|
9
9
|
"//bibliography/references[@normative = 'false']"
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
)).each do |b|
|
11
|
+
preface_names(b)
|
12
|
+
end
|
13
|
+
docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
|
14
|
+
reference_names(ref)
|
15
|
+
end
|
16
16
|
end
|
17
17
|
|
18
18
|
def initial_anchor_names(d)
|
@@ -72,8 +72,7 @@ module IsoDoc::Function
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def clause_names(docxml, sect_num)
|
75
|
-
|
76
|
-
docxml.xpath(ns(q)).each_with_index do |c, i|
|
75
|
+
docxml.xpath(ns(@klass.middle_clause)).each_with_index do |c, i|
|
77
76
|
section_names(c, (i + sect_num), 1)
|
78
77
|
end
|
79
78
|
end
|
@@ -82,7 +81,7 @@ module IsoDoc::Function
|
|
82
81
|
return num if clause.nil?
|
83
82
|
num = num + 1
|
84
83
|
@anchors[clause["id"]] =
|
85
|
-
{ label: num.to_s, xref: l10n("#{@
|
84
|
+
{ label: num.to_s, xref: l10n("#{@labels["clause"]} #{num}"), level: lvl,
|
86
85
|
type: "clause" }
|
87
86
|
clause.xpath(ns(SUBCLAUSES)).
|
88
87
|
each_with_index do |c, i|
|
@@ -93,7 +92,7 @@ module IsoDoc::Function
|
|
93
92
|
|
94
93
|
def section_names1(clause, num, level)
|
95
94
|
@anchors[clause["id"]] =
|
96
|
-
{ label: num, level: level, xref: l10n("#{@
|
95
|
+
{ label: num, level: level, xref: l10n("#{@labels["clause"]} #{num}"),
|
97
96
|
type: "clause" }
|
98
97
|
clause.xpath(ns(SUBCLAUSES)).
|
99
98
|
each_with_index do |c, i|
|
@@ -102,9 +101,9 @@ module IsoDoc::Function
|
|
102
101
|
end
|
103
102
|
|
104
103
|
def annex_name_lbl(clause, num)
|
105
|
-
obl = l10n("(#{@
|
106
|
-
obl = l10n("(#{@
|
107
|
-
l10n("<b>#{@
|
104
|
+
obl = l10n("(#{@labels["inform_annex"]})")
|
105
|
+
obl = l10n("(#{@labels["norm_annex"]})") if clause["obligation"] == "normative"
|
106
|
+
l10n("<b>#{@labels["annex"]} #{num}</b><br/>#{obl}")
|
108
107
|
end
|
109
108
|
|
110
109
|
def single_annex_special_section(clause)
|
@@ -119,7 +118,7 @@ module IsoDoc::Function
|
|
119
118
|
def annex_names(clause, num)
|
120
119
|
@anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
|
121
120
|
type: "clause",
|
122
|
-
xref: "#{@
|
121
|
+
xref: "#{@labels["annex"]} #{num}", level: 1 }
|
123
122
|
if a = single_annex_special_section(clause)
|
124
123
|
annex_names1(a, "#{num}", 1)
|
125
124
|
else
|
@@ -131,11 +130,26 @@ module IsoDoc::Function
|
|
131
130
|
end
|
132
131
|
|
133
132
|
def annex_names1(clause, num, level)
|
134
|
-
@anchors[clause["id"]] = { label: num, xref: "#{@
|
133
|
+
@anchors[clause["id"]] = { label: num, xref: "#{@labels["annex"]} #{num}",
|
135
134
|
level: level, type: "clause" }
|
136
135
|
clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
|
137
136
|
annex_names1(c, "#{num}.#{i + 1}", level + 1)
|
138
137
|
end
|
139
138
|
end
|
139
|
+
|
140
|
+
ISO_PUBLISHER_XPATH =
|
141
|
+
"./contributor[xmlns:role/@type = 'publisher']/"\
|
142
|
+
"organization[abbreviation = 'ISO' or xmlns:abbreviation = 'IEC' or "\
|
143
|
+
"xmlns:name = 'International Organization for Standardization' or "\
|
144
|
+
"xmlns:name = 'International Electrotechnical Commission']".freeze
|
145
|
+
|
146
|
+
def reference_names(ref)
|
147
|
+
isopub = ref.at(ns(ISO_PUBLISHER_XPATH))
|
148
|
+
ids = @klass.bibitem_ref_code(ref)
|
149
|
+
identifiers = @klass.render_identifier(ids)
|
150
|
+
date = ref.at(ns("./date[@type = 'published']"))
|
151
|
+
reference = @klass.docid_l10n(identifiers[0] || identifiers[1])
|
152
|
+
@anchors[ref["id"]] = { xref: reference }
|
153
|
+
end
|
140
154
|
end
|
141
155
|
end
|
data/lib/isodoc/xslfo_convert.rb
CHANGED
@@ -15,14 +15,26 @@ module IsoDoc
|
|
15
15
|
|
16
16
|
def initialize(options)
|
17
17
|
@format = :pdf
|
18
|
+
@suffix = "pdf"
|
18
19
|
super
|
19
20
|
end
|
20
21
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
22
|
+
def pdf_stylesheet(docxml)
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def convert(input_filename, file = nil, debug = false, output_filename = nil)
|
27
|
+
file = File.read(input_filename, encoding: "utf-8") if file.nil?
|
28
|
+
docxml, filename, dir = convert_init(file, input_filename, debug)
|
29
|
+
/\.xml$/.match(input_filename) or
|
30
|
+
input_filename = Tempfile.open([filename, ".xml"], encoding: "utf-8") do |f|
|
31
|
+
f.write file
|
32
|
+
f.path
|
33
|
+
end
|
24
34
|
FileUtils.rm_rf dir
|
25
|
-
::Metanorma::Output::XslfoPdf.new.convert(
|
35
|
+
::Metanorma::Output::XslfoPdf.new.convert(input_filename,
|
36
|
+
output_filename || "#{filename}.#{@suffix}",
|
37
|
+
File.join(@libdir, pdf_stylesheet(docxml)))
|
26
38
|
end
|
27
39
|
|
28
40
|
def xref_parse(node, out)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe IsoDoc do
|
4
|
+
it "generates file based on string input" do
|
5
|
+
FileUtils.rm_f "test.presentation.xml"
|
6
|
+
IsoDoc::PresentationXMLConvert.new({filename: "test"}).convert("test", <<~"INPUT", false)
|
7
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
8
|
+
<bibdata>
|
9
|
+
<title language="en">test</title>
|
10
|
+
</bibdata>
|
11
|
+
<preface><foreword>
|
12
|
+
<note>
|
13
|
+
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
|
14
|
+
</note>
|
15
|
+
</foreword></preface>
|
16
|
+
</iso-standard>
|
17
|
+
INPUT
|
18
|
+
expect(File.exist?("test.presentation.xml")).to be true
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isodoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciimath
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 1.
|
145
|
+
version: 1.1.0
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 1.
|
152
|
+
version: 1.1.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: rake
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -333,11 +333,6 @@ files:
|
|
333
333
|
- lib/isodoc/function/terms.rb
|
334
334
|
- lib/isodoc/function/to_word_html.rb
|
335
335
|
- lib/isodoc/function/utils.rb
|
336
|
-
- lib/isodoc/function/xref_anchor.rb
|
337
|
-
- lib/isodoc/function/xref_counter.rb
|
338
|
-
- lib/isodoc/function/xref_gen.rb
|
339
|
-
- lib/isodoc/function/xref_gen_seq.rb
|
340
|
-
- lib/isodoc/function/xref_sect_gen.rb
|
341
336
|
- lib/isodoc/headlesshtml_convert.rb
|
342
337
|
- lib/isodoc/html_convert.rb
|
343
338
|
- lib/isodoc/html_function.rb
|
@@ -348,6 +343,7 @@ files:
|
|
348
343
|
- lib/isodoc/metadata.rb
|
349
344
|
- lib/isodoc/metadata_date.rb
|
350
345
|
- lib/isodoc/pdf_convert.rb
|
346
|
+
- lib/isodoc/presentation_xml_convert.rb
|
351
347
|
- lib/isodoc/version.rb
|
352
348
|
- lib/isodoc/word_convert.rb
|
353
349
|
- lib/isodoc/word_function.rb
|
@@ -358,6 +354,12 @@ files:
|
|
358
354
|
- lib/isodoc/word_function/postprocess.rb
|
359
355
|
- lib/isodoc/word_function/postprocess_cover.rb
|
360
356
|
- lib/isodoc/word_function/table.rb
|
357
|
+
- lib/isodoc/xref.rb
|
358
|
+
- lib/isodoc/xref/xref_anchor.rb
|
359
|
+
- lib/isodoc/xref/xref_counter.rb
|
360
|
+
- lib/isodoc/xref/xref_gen.rb
|
361
|
+
- lib/isodoc/xref/xref_gen_seq.rb
|
362
|
+
- lib/isodoc/xref/xref_sect_gen.rb
|
361
363
|
- lib/isodoc/xslfo_convert.rb
|
362
364
|
- spec/assets/header.html
|
363
365
|
- spec/assets/html.css
|
@@ -383,6 +385,7 @@ files:
|
|
383
385
|
- spec/isodoc/lists_spec.rb
|
384
386
|
- spec/isodoc/metadata_spec.rb
|
385
387
|
- spec/isodoc/postproc_spec.rb
|
388
|
+
- spec/isodoc/presentation_xml_spec.rb
|
386
389
|
- spec/isodoc/ref_spec.rb
|
387
390
|
- spec/isodoc/section_spec.rb
|
388
391
|
- spec/isodoc/table_spec.rb
|
@@ -393,7 +396,7 @@ homepage: https://github.com/metanorma/isodoc
|
|
393
396
|
licenses:
|
394
397
|
- BSD-2-Clause
|
395
398
|
metadata: {}
|
396
|
-
post_install_message:
|
399
|
+
post_install_message:
|
397
400
|
rdoc_options: []
|
398
401
|
require_paths:
|
399
402
|
- lib
|
@@ -408,9 +411,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
408
411
|
- !ruby/object:Gem::Version
|
409
412
|
version: '0'
|
410
413
|
requirements: []
|
411
|
-
|
412
|
-
|
413
|
-
signing_key:
|
414
|
+
rubygems_version: 3.0.3
|
415
|
+
signing_key:
|
414
416
|
specification_version: 4
|
415
417
|
summary: Convert documents in IsoDoc into Word and HTML in AsciiDoc.
|
416
418
|
test_files: []
|
@@ -1,84 +0,0 @@
|
|
1
|
-
require "roman-numerals"
|
2
|
-
|
3
|
-
module IsoDoc::Function
|
4
|
-
module XrefGen
|
5
|
-
def hiersep
|
6
|
-
"."
|
7
|
-
end
|
8
|
-
|
9
|
-
def hierfigsep
|
10
|
-
"-"
|
11
|
-
end
|
12
|
-
|
13
|
-
class Counter
|
14
|
-
def initialize
|
15
|
-
@num = 0
|
16
|
-
@letter = ""
|
17
|
-
@subseq = ""
|
18
|
-
@letter_override = nil
|
19
|
-
@number_override = nil
|
20
|
-
end
|
21
|
-
|
22
|
-
def new_subseq_increment(node)
|
23
|
-
@subseq = node["subsequence"]
|
24
|
-
@num += 1
|
25
|
-
@letter = node["subsequence"] ? "a" : ""
|
26
|
-
if node["number"]
|
27
|
-
/^(?<n>\d*)(?<a>[a-z]*)$/ =~ node["number"]
|
28
|
-
if n || a
|
29
|
-
@letter_override = @letter = a if a
|
30
|
-
@number_override = @num = n.to_i if n
|
31
|
-
else
|
32
|
-
@letter_override = node["number"]
|
33
|
-
@letter = @letter_override if /^[a-z]$/.match(@letter_override)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def sequence_increment(node)
|
39
|
-
if node["number"]
|
40
|
-
@number_override = node["number"]
|
41
|
-
@num = @number_override.to_i if /^\d+$/.match(@number_override)
|
42
|
-
else
|
43
|
-
@num += 1
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def subsequence_increment(node)
|
48
|
-
if node["number"]
|
49
|
-
@letter_override = node["number"]
|
50
|
-
@letter = @letter_override if /^[a-z]$/.match(@letter_override)
|
51
|
-
else
|
52
|
-
@letter = (@letter.ord + 1).chr.to_s
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def increment(node)
|
57
|
-
return self if node["unnumbered"]
|
58
|
-
@letter_override = nil
|
59
|
-
@number_override = nil
|
60
|
-
if node["subsequence"] != @subseq
|
61
|
-
new_subseq_increment(node)
|
62
|
-
elsif @letter.empty?
|
63
|
-
sequence_increment(node)
|
64
|
-
else
|
65
|
-
subsequence_increment(node)
|
66
|
-
end
|
67
|
-
self
|
68
|
-
end
|
69
|
-
|
70
|
-
def print
|
71
|
-
"#{@number_override || @num}#{@letter_override || @letter}"
|
72
|
-
end
|
73
|
-
|
74
|
-
def listlabel(depth)
|
75
|
-
return @num.to_s if [2, 7].include? depth
|
76
|
-
return (96 + @num).chr.to_s if [1, 6].include? depth
|
77
|
-
return (64 + @num).chr.to_s if [4, 9].include? depth
|
78
|
-
return RomanNumerals.to_roman(@num).downcase if [3, 8].include? depth
|
79
|
-
return RomanNumerals.to_roman(@num).upcase if [5, 10].include? depth
|
80
|
-
return @num.to_s
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|