isodoc 2.0.5.2 → 2.0.6.1
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/function/to_word_html.rb +1 -1
- data/lib/isodoc/html_convert.rb +1 -1
- data/lib/isodoc/html_function/postprocess_footnotes.rb +1 -1
- data/lib/isodoc/metadata_contributor.rb +3 -4
- data/lib/isodoc/presentation_function/image.rb +1 -1
- 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/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: c32b98e8156bdafb3ad6549d179b6607cc7811bf67191cf0ee736b6c72d5360f
|
4
|
+
data.tar.gz: 63236257e5e7f511e6cfe2ea9ff5c7a12dd2059be3bc588c50f15c8946e4a01d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58a629b21dee494368d7ad6c9f25fc3ac01ccb5f70b82674843cefdcb0959c484f770174ccb9ce75e52f4d4f906918fe1f390405dafd91119c945bade6ff716b
|
7
|
+
data.tar.gz: 11332100db734b1fd700ecfe164fb80ae0fd4be9843c6e48ffac4ea2c0d2d1ef4c417cb9e78c1a5d9cbae68294acac7f98fcb8365c10808a38153fae1f1dd2dd
|
@@ -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
|
+
|
data/lib/isodoc/html_convert.rb
CHANGED
@@ -24,7 +24,7 @@ module IsoDoc
|
|
24
24
|
|
25
25
|
def convert(filename, file = nil, debug = false, output_filename = nil)
|
26
26
|
ret = super
|
27
|
-
Dir.
|
27
|
+
Dir.exist?(tmpimagedir) and Dir["#{tmpimagedir}/*"].empty? and
|
28
28
|
FileUtils.rm_r tmpimagedir
|
29
29
|
ret
|
30
30
|
end
|
@@ -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
|
@@ -64,7 +64,7 @@ module IsoDoc
|
|
64
64
|
def svg_to_emf(node)
|
65
65
|
uri = svg_to_emf_uri(node)
|
66
66
|
ret = svg_to_emf_filename(uri)
|
67
|
-
File.
|
67
|
+
File.exist?(ret) and return ret
|
68
68
|
exe = inkscape_installed? or raise "Inkscape missing in PATH, unable" \
|
69
69
|
"to convert EMF to SVG. Aborting."
|
70
70
|
uri = Metanorma::Utils::external_path uri
|
@@ -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
@@ -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">
|
@@ -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.1
|
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-22 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.
|