isodoc 2.0.5.1 → 2.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|