isodoc 2.0.5.1 → 2.0.6
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/.github/workflows/release.yml +24 -0
- data/lib/isodoc/html_function/postprocess_footnotes.rb +1 -1
- data/lib/isodoc/metadata_contributor.rb +3 -4
- data/lib/isodoc/presentation_function/inline.rb +9 -5
- data/lib/isodoc/presentation_xml_convert.rb +3 -3
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +1 -1
- data/lib/isodoc/word_function/postprocess.rb +2 -3
- data/lib/isodoc/xref/xref_gen.rb +39 -28
- data/lib/isodoc/xslfo_convert.rb +2 -2
- data/lib/metanorma/output/base.rb +1 -2
- data/spec/isodoc/blocks_spec.rb +43 -0
- data/spec/isodoc/inline_spec.rb +4 -4
- data/spec/isodoc/xslfo_convert_spec.rb +2 -3
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3633136f121834056746917a4af6b5c6b917365ffb941b0561a0941d16ccfb3a
|
4
|
+
data.tar.gz: d15461d2103ff7e43ee22c1afe80d4a4b4e0a240a76c3ee5afe11df47652ab72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 047f237237096490e9a6380675f96d46e1de721025f17eb60a3140face2cfe794d649fb31d992bca7a63e863c42c6d79cd42fa0810c77f6bc09518d905b55fbf
|
7
|
+
data.tar.gz: 7cde47764db6a87866b4fe618550dc8412b85c32c90ea2e60a903083849b6e16325574d723dbb83948a8524062fa63b4c0eb19a50590f0fb3d46164962dc0368
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
3
|
+
name: release
|
4
|
+
|
5
|
+
on:
|
6
|
+
workflow_dispatch:
|
7
|
+
inputs:
|
8
|
+
next_version:
|
9
|
+
description: |
|
10
|
+
Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
|
11
|
+
required: true
|
12
|
+
default: 'skip'
|
13
|
+
push:
|
14
|
+
tags: [ v* ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
release:
|
18
|
+
uses: metanorma/metanorma-build-scripts/.github/workflows/rubygems-release.yml@main
|
19
|
+
with:
|
20
|
+
next_version: ${{ github.event.inputs.next_version }}
|
21
|
+
event_name: ${{ github.event_name }}
|
22
|
+
secrets:
|
23
|
+
rubygems-api-key: ${{ secrets.METANORMA_CI_RUBYGEMS_API_KEY }}
|
24
|
+
|
@@ -36,7 +36,7 @@ module IsoDoc::HtmlFunction
|
|
36
36
|
def footnote_backlinks(docxml)
|
37
37
|
seen = {}
|
38
38
|
docxml.xpath('//a[@class = "FootnoteRef"]').each_with_index do |x, i|
|
39
|
-
seen[x["href"]] and next or seen[x["href"]] = true
|
39
|
+
(seen[x["href"]] and next) or seen[x["href"]] = true
|
40
40
|
fn = docxml.at(%<//*[@id = '#{x['href'].sub(/^#/, '')}']>) || next
|
41
41
|
footnote_backlinks1(x, fn)
|
42
42
|
x["id"] ||= "fnref:#{i + 1}"
|
@@ -5,10 +5,9 @@ module IsoDoc
|
|
5
5
|
if a.at(ns("./name/completename"))
|
6
6
|
ret << a.at(ns("./name/completename")).text
|
7
7
|
else
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
ret << "#{fn.join(' ')} #{surname}"
|
8
|
+
fn = a.xpath(ns("./name/forename"))
|
9
|
+
.each_with_object([]) { |f, m| m << f.text }
|
10
|
+
ret << "#{fn.join(' ')} #{a&.at(ns('./name/surname'))&.text}"
|
12
11
|
end
|
13
12
|
end
|
14
13
|
end
|
@@ -50,7 +50,7 @@ module IsoDoc
|
|
50
50
|
node["droploc"] = true
|
51
51
|
ret = resolve_eref_connectives(eref_locality_stacks(refs, target,
|
52
52
|
node))
|
53
|
-
node
|
53
|
+
node.delete("droploc") unless droploc
|
54
54
|
eref_localities1(target,
|
55
55
|
refs.first.at(ns("./locality/@type")).text,
|
56
56
|
l10n(ret[1..-1].join), nil, node, @lang)
|
@@ -114,14 +114,18 @@ module IsoDoc
|
|
114
114
|
added.each { |a| m << a }
|
115
115
|
next if i == refs.size - 1
|
116
116
|
|
117
|
-
m <<
|
118
|
-
r.next_element["connective"]
|
119
|
-
else locality_delimiter(r)
|
120
|
-
end
|
117
|
+
m << eref_locality_delimiter(r)
|
121
118
|
end
|
122
119
|
ret.empty? ? ret : [", "] + ret
|
123
120
|
end
|
124
121
|
|
122
|
+
def eref_locality_delimiter(ref)
|
123
|
+
if ref&.next_element&.name == "localityStack"
|
124
|
+
ref.next_element["connective"]
|
125
|
+
else locality_delimiter(ref)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
125
129
|
def eref_locality_stack(ref, idx, target, node)
|
126
130
|
ret = []
|
127
131
|
if ref.name == "localityStack"
|
@@ -13,7 +13,7 @@ module IsoDoc
|
|
13
13
|
super
|
14
14
|
end
|
15
15
|
|
16
|
-
def convert1(docxml,
|
16
|
+
def convert1(docxml, _filename, _dir)
|
17
17
|
@xrefs.parse docxml
|
18
18
|
info docxml, nil
|
19
19
|
conversions(docxml)
|
@@ -76,11 +76,11 @@ module IsoDoc
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def postprocess(result, filename, _dir)
|
79
|
-
|
79
|
+
to_xml(result, filename)
|
80
80
|
@files_to_delete.each { |f| FileUtils.rm_rf f }
|
81
81
|
end
|
82
82
|
|
83
|
-
def
|
83
|
+
def to_xml(result, filename)
|
84
84
|
File.open(filename, "w:UTF-8") { |f| f.write(result) }
|
85
85
|
end
|
86
86
|
end
|
data/lib/isodoc/version.rb
CHANGED
@@ -233,7 +233,7 @@ module IsoDoc
|
|
233
233
|
end
|
234
234
|
|
235
235
|
def suffix_url(url)
|
236
|
-
return url if url.nil? || %r{^https
|
236
|
+
return url if url.nil? || %r{^https?://|^#}.match?(url)
|
237
237
|
return url unless File.extname(url).empty?
|
238
238
|
|
239
239
|
url.sub(/#{File.extname(url)}$/, ".doc")
|
@@ -107,9 +107,8 @@ module IsoDoc
|
|
107
107
|
x += 1
|
108
108
|
end
|
109
109
|
(r..(r + rs - 1)).each do |y2|
|
110
|
-
|
111
|
-
|
112
|
-
end
|
110
|
+
cells2d[y2].nil? and next
|
111
|
+
(x..(x + cs - 1)).each { |x2| cells2d[y2][x2] = 1 }
|
113
112
|
end
|
114
113
|
width = (x..(x + cs - 1)).each_with_object({ width: 0 }) do |z, m|
|
115
114
|
m[:width] += w[z]
|
data/lib/isodoc/xref/xref_gen.rb
CHANGED
@@ -35,7 +35,7 @@ module IsoDoc
|
|
35
35
|
@labels["termnote"].gsub(/%/, note.to_s)
|
36
36
|
end
|
37
37
|
|
38
|
-
def increment_label(elems, node, counter, increment
|
38
|
+
def increment_label(elems, node, counter, increment: true)
|
39
39
|
return "" if elems.size == 1 && !node["number"]
|
40
40
|
|
41
41
|
counter.increment(node) if increment
|
@@ -62,10 +62,9 @@ module IsoDoc
|
|
62
62
|
c = Counter.new
|
63
63
|
examples.reject { |n| blank?(n["id"]) }.each do |n|
|
64
64
|
c.increment(n)
|
65
|
-
idx = increment_label(examples, n, c, false)
|
66
|
-
@anchors[n["id"]] =
|
67
|
-
|
68
|
-
n["unnumbered"])
|
65
|
+
idx = increment_label(examples, n, c, increment: false)
|
66
|
+
@anchors[n["id"]] = anchor_struct(idx, n, @labels["example_xref"],
|
67
|
+
"termexample", n["unnumbered"])
|
69
68
|
end
|
70
69
|
end
|
71
70
|
end
|
@@ -88,18 +87,23 @@ module IsoDoc
|
|
88
87
|
|
89
88
|
def note_anchor_names(sections)
|
90
89
|
sections.each do |s|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
@anchors[n["id"]] =
|
96
|
-
anchor_struct(increment_label(notes, n, c), n,
|
97
|
-
@labels["note_xref"], "note", false)
|
98
|
-
end
|
90
|
+
notes = s.xpath(CHILD_NOTES_XPATH) -
|
91
|
+
s.xpath(ns(".//figure//note | .//table//note"))
|
92
|
+
note_anchor_names1(notes, Counter.new)
|
99
93
|
note_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
|
100
94
|
end
|
101
95
|
end
|
102
96
|
|
97
|
+
def note_anchor_names1(notes, counter)
|
98
|
+
notes.each do |n|
|
99
|
+
next if @anchors[n["id"]] || blank?(n["id"])
|
100
|
+
|
101
|
+
@anchors[n["id"]] =
|
102
|
+
anchor_struct(increment_label(notes, n, counter), n,
|
103
|
+
@labels["note_xref"], "note", false)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
103
107
|
CHILD_EXAMPLES_XPATH =
|
104
108
|
"./*[not(self::xmlns:clause) and not(self::xmlns:appendix) and "\
|
105
109
|
"not(self::xmlns:terms) and not(self::xmlns:definitions)]//"\
|
@@ -110,18 +114,22 @@ module IsoDoc
|
|
110
114
|
|
111
115
|
def example_anchor_names(sections)
|
112
116
|
sections.each do |s|
|
113
|
-
|
114
|
-
(notes
|
115
|
-
next if @anchors[n["id"]] || n["id"].nil? || n["id"].empty?
|
116
|
-
|
117
|
-
@anchors[n["id"]] =
|
118
|
-
anchor_struct(increment_label(notes, n, c), n,
|
119
|
-
@labels["example_xref"], "example", n["unnumbered"])
|
120
|
-
end
|
117
|
+
notes = s.xpath(CHILD_EXAMPLES_XPATH)
|
118
|
+
example_anchor_names1(notes, Counter.new)
|
121
119
|
example_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
|
122
120
|
end
|
123
121
|
end
|
124
122
|
|
123
|
+
def example_anchor_names1(notes, counter)
|
124
|
+
notes.each do |n|
|
125
|
+
next if @anchors[n["id"]] || blank?(n["id"])
|
126
|
+
|
127
|
+
@anchors[n["id"]] =
|
128
|
+
anchor_struct(increment_label(notes, n, counter), n,
|
129
|
+
@labels["example_xref"], "example", n["unnumbered"])
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
125
133
|
def list_anchor_names(sections)
|
126
134
|
sections.each do |s|
|
127
135
|
notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//clause//ol")) -
|
@@ -155,17 +163,20 @@ module IsoDoc
|
|
155
163
|
sections.each do |s|
|
156
164
|
notes = s.xpath(ns(".//dl")) - s.xpath(ns(".//clause//dl")) -
|
157
165
|
s.xpath(ns(".//appendix//dl")) - s.xpath(ns(".//dl//dl"))
|
158
|
-
|
159
|
-
notes.reject { |n| blank?(n["id"]) }.each do |n|
|
160
|
-
@anchors[n["id"]] =
|
161
|
-
anchor_struct(increment_label(notes, n, c), n,
|
162
|
-
@labels["deflist"], "deflist", false)
|
163
|
-
deflist_term_anchor_names(n, @anchors[n["id"]])
|
164
|
-
end
|
166
|
+
deflist_anchor_names1(notes, Counter.new)
|
165
167
|
deflist_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
|
166
168
|
end
|
167
169
|
end
|
168
170
|
|
171
|
+
def deflist_anchor_names1(notes, counter)
|
172
|
+
notes.reject { |n| blank?(n["id"]) }.each do |n|
|
173
|
+
@anchors[n["id"]] =
|
174
|
+
anchor_struct(increment_label(notes, n, counter), n,
|
175
|
+
@labels["deflist"], "deflist", false)
|
176
|
+
deflist_term_anchor_names(n, @anchors[n["id"]])
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
169
180
|
def deflist_term_anchor_names(list, list_anchor)
|
170
181
|
list.xpath(ns("./dt")).each do |li|
|
171
182
|
label = l10n("#{list_anchor[:xref]}: #{dt2xreflabel(li)}")
|
data/lib/isodoc/xslfo_convert.rb
CHANGED
@@ -2,7 +2,7 @@ require "metanorma"
|
|
2
2
|
|
3
3
|
module IsoDoc
|
4
4
|
class XslfoPdfConvert < ::IsoDoc::Convert
|
5
|
-
|
5
|
+
MN_OPTIONS_KEY = :mn2pdf
|
6
6
|
MN2PDF_FONT_MANIFEST = :font_manifest
|
7
7
|
MN2PDF_OPTIONS = { pdfencryptionlength: "--encryption-length",
|
8
8
|
pdfownerpassword: "--owner-password",
|
@@ -43,7 +43,7 @@ module IsoDoc
|
|
43
43
|
|
44
44
|
def pdf_options(_docxml)
|
45
45
|
ret = {}
|
46
|
-
font_manifest = @options
|
46
|
+
font_manifest = @options.dig(MN_OPTIONS_KEY, MN2PDF_FONT_MANIFEST) and
|
47
47
|
ret[MN2PDF_FONT_MANIFEST] = font_manifest
|
48
48
|
@aligncrosselements && !@aligncrosselements.empty? and
|
49
49
|
ret["--param align-cross-elements="] =
|
data/spec/isodoc/blocks_spec.rb
CHANGED
@@ -558,6 +558,49 @@ RSpec.describe IsoDoc do
|
|
558
558
|
.convert("test", input, true)))).to be_equivalent_to xmlpp(doc)
|
559
559
|
end
|
560
560
|
|
561
|
+
it "numbers notes in tables and figures separately from notes outside them" do
|
562
|
+
input = <<~INPUT
|
563
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
564
|
+
<preface><foreword>
|
565
|
+
<figure id="F"><note id="FB"><p>XYZ</p></note></figure>
|
566
|
+
<table id="T"><note id="TB"><p>XYZ</p></note></table>
|
567
|
+
<p id="A">ABC <note id="B"><p id="C">XYZ</p></note>
|
568
|
+
</foreword></preface>
|
569
|
+
</iso-standard>
|
570
|
+
INPUT
|
571
|
+
output = <<~OUTPUT
|
572
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
|
573
|
+
<preface>
|
574
|
+
<foreword displayorder='1'>
|
575
|
+
<figure id='F'>
|
576
|
+
<name>Figure 1</name>
|
577
|
+
<note id='FB'>
|
578
|
+
<name>NOTE</name>
|
579
|
+
<p>XYZ</p>
|
580
|
+
</note>
|
581
|
+
</figure>
|
582
|
+
<table id='T'>
|
583
|
+
<name>Table 1</name>
|
584
|
+
<note id='TB'>
|
585
|
+
<name>NOTE</name>
|
586
|
+
<p>XYZ</p>
|
587
|
+
</note>
|
588
|
+
</table>
|
589
|
+
<p id='A'>
|
590
|
+
ABC
|
591
|
+
<note id='B'>
|
592
|
+
<name>NOTE</name>
|
593
|
+
<p id='C'>XYZ</p>
|
594
|
+
</note>
|
595
|
+
</p>
|
596
|
+
</foreword>
|
597
|
+
</preface>
|
598
|
+
</iso-standard>
|
599
|
+
OUTPUT
|
600
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
601
|
+
.convert("test", input, true))).to be_equivalent_to xmlpp(output)
|
602
|
+
end
|
603
|
+
|
561
604
|
it "processes figures" do
|
562
605
|
input = <<~INPUT
|
563
606
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
data/spec/isodoc/inline_spec.rb
CHANGED
@@ -2208,7 +2208,7 @@ RSpec.describe IsoDoc do
|
|
2208
2208
|
output = <<~OUTPUT
|
2209
2209
|
<itu-standard xmlns='https://www.calconnect.org/standards/itu' type='presentation'>
|
2210
2210
|
<p id='_'>
|
2211
|
-
<eref type='inline' bibitemid='ref1' citeas='XYZ'
|
2211
|
+
<eref type='inline' bibitemid='ref1' citeas='XYZ'>
|
2212
2212
|
<localityStack connective='from'>
|
2213
2213
|
<locality type='clause'>
|
2214
2214
|
<referenceFrom>3</referenceFrom>
|
@@ -2239,7 +2239,7 @@ RSpec.describe IsoDoc do
|
|
2239
2239
|
</eref>
|
2240
2240
|
text
|
2241
2241
|
</p>
|
2242
|
-
<eref type='inline' bibitemid='ref1' citeas='XYZ'
|
2242
|
+
<eref type='inline' bibitemid='ref1' citeas='XYZ'>
|
2243
2243
|
<localityStack connective='and'>
|
2244
2244
|
<locality type='clause'>
|
2245
2245
|
<referenceFrom>3</referenceFrom>
|
@@ -2252,7 +2252,7 @@ RSpec.describe IsoDoc do
|
|
2252
2252
|
</localityStack>
|
2253
2253
|
XYZ, Clause 3 and 5
|
2254
2254
|
</eref>
|
2255
|
-
<eref type='inline' bibitemid='ref1' citeas='XYZ'
|
2255
|
+
<eref type='inline' bibitemid='ref1' citeas='XYZ'>
|
2256
2256
|
<localityStack connective='and'>
|
2257
2257
|
<locality type='clause'>
|
2258
2258
|
<referenceFrom>3</referenceFrom>
|
@@ -2296,7 +2296,7 @@ RSpec.describe IsoDoc do
|
|
2296
2296
|
</localityStack>
|
2297
2297
|
text
|
2298
2298
|
</eref>
|
2299
|
-
<eref type='inline' bibitemid='ref1' citeas='XYZ'
|
2299
|
+
<eref type='inline' bibitemid='ref1' citeas='XYZ'>
|
2300
2300
|
<localityStack connective='from'>
|
2301
2301
|
<locality type='clause'>
|
2302
2302
|
<referenceFrom>3</referenceFrom>
|
@@ -15,7 +15,7 @@ RSpec.describe IsoDoc do
|
|
15
15
|
convert = IsoDoc::XslfoPdfConvert.new(
|
16
16
|
{
|
17
17
|
datauriimage: false,
|
18
|
-
IsoDoc::XslfoPdfConvert::
|
18
|
+
IsoDoc::XslfoPdfConvert::MN_OPTIONS_KEY => {
|
19
19
|
IsoDoc::XslfoPdfConvert::MN2PDF_FONT_MANIFEST => nil,
|
20
20
|
},
|
21
21
|
},
|
@@ -32,8 +32,7 @@ RSpec.describe IsoDoc do
|
|
32
32
|
convert = IsoDoc::XslfoPdfConvert.new(
|
33
33
|
{
|
34
34
|
datauriimage: false,
|
35
|
-
IsoDoc::XslfoPdfConvert::
|
36
|
-
font_manifest: "/tmp/manifest.yml",
|
35
|
+
IsoDoc::XslfoPdfConvert::MN_OPTIONS_KEY => mn2pdf_opts,
|
37
36
|
},
|
38
37
|
)
|
39
38
|
|
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: 2.0.
|
4
|
+
version: 2.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciimath
|
@@ -372,6 +372,7 @@ extensions: []
|
|
372
372
|
extra_rdoc_files: []
|
373
373
|
files:
|
374
374
|
- ".github/workflows/rake.yml"
|
375
|
+
- ".github/workflows/release.yml"
|
375
376
|
- ".hound.yml"
|
376
377
|
- ".oss-guides.rubocop.yml"
|
377
378
|
- ".rubocop.yml"
|
@@ -534,7 +535,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
534
535
|
- !ruby/object:Gem::Version
|
535
536
|
version: '0'
|
536
537
|
requirements: []
|
537
|
-
rubygems_version: 3.
|
538
|
+
rubygems_version: 3.3.9
|
538
539
|
signing_key:
|
539
540
|
specification_version: 4
|
540
541
|
summary: Convert documents in IsoDoc into Word and HTML in AsciiDoc.
|