isodoc 3.5.2 → 3.6.0
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/Gemfile +16 -1
- data/isodoc.gemspec +2 -16
- data/lib/isodoc/function/cleanup.rb +5 -51
- data/lib/isodoc/function/table.rb +52 -7
- data/lib/isodoc/metadata.rb +3 -3
- data/lib/isodoc/metadata_date.rb +1 -1
- data/lib/isodoc/spec_helpers/canon_html_input_guard.rb +93 -0
- data/lib/isodoc/version.rb +1 -1
- metadata +7 -202
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a7090dc22f60e48ff426569497b98e6269308ad72b4a7198fbe08ee42a579944
|
|
4
|
+
data.tar.gz: b5843c03c85e957088107f0a6b30351f67c46117b2bc461c6a95739471077eb3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d0dac37b3d8c895bd2879f877231604b1ed71a350efc3c45bcc514dab06e3360b8d4c5df044412d90a82984639d02413cb9db15b1e3168e42a28d8a48300f4ab
|
|
7
|
+
data.tar.gz: 3f83a6ad5fe77b8fd81d644f8edc56a0dd5a9d24c19202a561ece45c7c3d1d2109a6da4e427a45c3a6d22bb36836d248662765775e605f83a84e2e93e4ed47f6
|
data/Gemfile
CHANGED
|
@@ -4,6 +4,21 @@ Encoding.default_internal = Encoding::UTF_8
|
|
|
4
4
|
source "https://rubygems.org"
|
|
5
5
|
git_source(:github) { |repo| "https://github.com/#{repo}" }
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
gem "benchmark"
|
|
8
|
+
gem "canon"
|
|
9
|
+
gem "debug"
|
|
10
|
+
gem "equivalent-xml", "~> 0.6"
|
|
11
|
+
gem "guard", "~> 2.14"
|
|
12
|
+
gem "guard-rspec", "~> 4.7"
|
|
13
|
+
gem "rake"
|
|
14
|
+
gem "rspec", "~> 3.6"
|
|
15
|
+
gem "rubocop", "~> 1"
|
|
16
|
+
gem "rubocop-performance"
|
|
17
|
+
gem "sassc-embedded", "~> 1"
|
|
18
|
+
gem "simplecov", "~> 0.15"
|
|
19
|
+
gem "timecop", "~> 0.9"
|
|
8
20
|
|
|
9
21
|
eval_gemfile("Gemfile.devel") rescue nil
|
|
22
|
+
|
|
23
|
+
gemspec
|
|
24
|
+
|
data/isodoc.gemspec
CHANGED
|
@@ -30,32 +30,18 @@ Gem::Specification.new do |spec|
|
|
|
30
30
|
|
|
31
31
|
spec.add_dependency "base64"
|
|
32
32
|
spec.add_dependency "bigdecimal"
|
|
33
|
-
spec.add_dependency "html2doc", "~> 1.
|
|
33
|
+
spec.add_dependency "html2doc", "~> 1.11.0"
|
|
34
34
|
# spec.add_dependency "isodoc-i18n", "~> 1.1.0" # already in relaton-render and mn-requirements
|
|
35
35
|
# spec.add_dependency "relaton-cli"
|
|
36
36
|
# spec.add_dependency "metanorma-utils", "~> 1.5.0" # already in isodoc-i18n
|
|
37
37
|
spec.add_dependency "mn2pdf", ">= 2.13"
|
|
38
38
|
spec.add_dependency "mn-requirements", "~> 0.5.0"
|
|
39
|
-
spec.add_dependency "
|
|
40
|
-
spec.add_dependency "relaton-render", "~> 1.1.0"
|
|
39
|
+
spec.add_dependency "relaton-render", "~> 1.2.0"
|
|
41
40
|
spec.add_dependency "roman-numerals"
|
|
42
41
|
spec.add_dependency "rouge", "~> 4.0"
|
|
43
42
|
spec.add_dependency "thread_safe"
|
|
44
43
|
spec.add_dependency "twitter_cldr", ">= 6.6.0"
|
|
45
44
|
spec.add_dependency "uuidtools"
|
|
46
45
|
|
|
47
|
-
spec.add_development_dependency "benchmark"
|
|
48
|
-
spec.add_development_dependency "bigdecimal"
|
|
49
|
-
spec.add_development_dependency "canon", "= 0.2.3"
|
|
50
|
-
spec.add_development_dependency "debug"
|
|
51
|
-
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
|
52
|
-
spec.add_development_dependency "guard", "~> 2.14"
|
|
53
|
-
spec.add_development_dependency "guard-rspec", "~> 4.7"
|
|
54
|
-
spec.add_development_dependency "rspec", "~> 3.6"
|
|
55
|
-
spec.add_development_dependency "rubocop", "~> 1"
|
|
56
|
-
spec.add_development_dependency "rubocop-performance"
|
|
57
|
-
spec.add_development_dependency "sassc-embedded", "~> 1"
|
|
58
|
-
spec.add_development_dependency "simplecov", "~> 0.15"
|
|
59
|
-
spec.add_development_dependency "timecop", "~> 0.9"
|
|
60
46
|
# spec.metadata["rubygems_mfa_required"] = "true"
|
|
61
47
|
end
|
|
@@ -60,17 +60,17 @@ module IsoDoc
|
|
|
60
60
|
def merge_fnref_into_fn_text(elem)
|
|
61
61
|
fn = elem.at('.//span[@class="TableFootnoteRef"]/..') or return
|
|
62
62
|
n = fn.next_element
|
|
63
|
-
n
|
|
63
|
+
n or return
|
|
64
|
+
n.children.first.add_previous_sibling(fn.remove)
|
|
64
65
|
end
|
|
65
66
|
|
|
66
67
|
# preempt html2doc putting MsoNormal under TableFootnote class
|
|
67
68
|
def table_footnote_cleanup(docxml)
|
|
68
|
-
docxml.xpath("//
|
|
69
|
+
docxml.xpath("//tfoot[descendant::aside]").each do |t|
|
|
69
70
|
t.xpath(".//aside").each do |a|
|
|
70
71
|
merge_fnref_into_fn_text(a)
|
|
71
72
|
a.name = "div"
|
|
72
73
|
a["class"] = "TableFootnote"
|
|
73
|
-
t << a.remove # this is redundant
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
table_footnote_cleanup_propagate(docxml)
|
|
@@ -83,55 +83,8 @@ module IsoDoc
|
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
|
|
86
|
-
def remove_bottom_border(cell)
|
|
87
|
-
# [^;]* (not +): the preceding property name is the unambiguous
|
|
88
|
-
# delimiter, so zero-or-more is equivalent and avoids polynomial
|
|
89
|
-
# backtracking on the value portion.
|
|
90
|
-
cell["style"] =
|
|
91
|
-
cell["style"].gsub(/border-bottom:[^;]*;/, "border-bottom:0pt;")
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def table_get_or_make_tfoot(table)
|
|
95
|
-
tfoot = table.at(".//tfoot")
|
|
96
|
-
if tfoot.nil?
|
|
97
|
-
table.add_child("<tfoot></tfoot>")
|
|
98
|
-
tfoot = table.at(".//tfoot")
|
|
99
|
-
else
|
|
100
|
-
tfoot.xpath(".//td | .//th").each { |td| remove_bottom_border(td) }
|
|
101
|
-
end
|
|
102
|
-
tfoot
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def new_fullcolspan_row(table, tfoot)
|
|
106
|
-
# how many columns in the table?
|
|
107
|
-
cols = 0
|
|
108
|
-
table.at(".//tr").xpath("./td | ./th").each do |td|
|
|
109
|
-
cols += (td["colspan"] ? td["colspan"].to_i : 1)
|
|
110
|
-
end
|
|
111
|
-
table["class"].nil? or # = plain table
|
|
112
|
-
s = "style='border-top:0pt;border-bottom:#{IsoDoc::Function::Table::SW} 1.5pt;'"
|
|
113
|
-
tfoot.add_child("<tr><td colspan='#{cols}' #{s}/></tr>")
|
|
114
|
-
tfoot.xpath(".//td").last
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
TABLENOTE_CSS = "div[@class = 'Note' or @class = 'BlockSource' " \
|
|
118
|
-
"or @class = 'TableFootnote' or @class = 'figdl' or @class = 'key']"
|
|
119
|
-
.freeze
|
|
120
|
-
|
|
121
|
-
def table_note_cleanup(docxml)
|
|
122
|
-
docxml.xpath("//table[dl or #{TABLENOTE_CSS}]").each do |t|
|
|
123
|
-
tfoot = table_get_or_make_tfoot(t)
|
|
124
|
-
insert_here = new_fullcolspan_row(t, tfoot)
|
|
125
|
-
t.xpath("dl | p[@class = 'ListTitle'] | #{TABLENOTE_CSS}")
|
|
126
|
-
.each do |d|
|
|
127
|
-
d.parent = insert_here
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
|
|
132
86
|
def table_cleanup(docxml)
|
|
133
87
|
table_footnote_cleanup(docxml)
|
|
134
|
-
table_note_cleanup(docxml)
|
|
135
88
|
docxml
|
|
136
89
|
end
|
|
137
90
|
|
|
@@ -141,9 +94,10 @@ module IsoDoc
|
|
|
141
94
|
# characters. Quoted alternatives listed first so `/` inside
|
|
142
95
|
# attribute values (e.g. URLs in href="...") is consumed as part
|
|
143
96
|
# of the quoted string, not rejected by [^>/].
|
|
97
|
+
# Includes Word HTML tags
|
|
144
98
|
def empty_tags(html)
|
|
145
99
|
void_elements = %w[area base br col embed hr img input link meta
|
|
146
|
-
source track wbr]
|
|
100
|
+
source track wbr wrapblock]
|
|
147
101
|
html.gsub(%r{<([\w:]+)((?>"[^"]*"|'[^']*'|[^>/])*)\s*/>}) do
|
|
148
102
|
if void_elements.include?($1)
|
|
149
103
|
$&
|
|
@@ -89,12 +89,26 @@ module IsoDoc
|
|
|
89
89
|
@in_table = false
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
+
def table_parse_tail_elems
|
|
93
|
+
["./key", "./fmt-source", "./note",
|
|
94
|
+
"./fmt-footnote-container/fmt-fn-body"]
|
|
95
|
+
end
|
|
96
|
+
|
|
92
97
|
def table_parse_tail(node, out)
|
|
93
|
-
(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
+
table_parse_tail?(node) or return
|
|
99
|
+
tfoot = table_get_or_make_tfoot(out.parent)
|
|
100
|
+
ins = new_fullcolspan_row(out.parent, tfoot)
|
|
101
|
+
b = Nokogiri::XML::Builder.with(ins)
|
|
102
|
+
table_parse_tail_elems.each do |k|
|
|
103
|
+
node.xpath(ns(k)).each { |n| parse(n, b) }
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def table_parse_tail?(node)
|
|
108
|
+
table_parse_tail_elems.each do |k|
|
|
109
|
+
!node.xpath(ns(k)).empty? and return true
|
|
110
|
+
end
|
|
111
|
+
false
|
|
98
112
|
end
|
|
99
113
|
|
|
100
114
|
def table_parse_core(node, out)
|
|
@@ -139,16 +153,47 @@ module IsoDoc
|
|
|
139
153
|
end
|
|
140
154
|
|
|
141
155
|
def tr_parse(node, out, ord, totalrows, header)
|
|
142
|
-
bordered = table_bordered?(node)
|
|
143
156
|
out.tr(**attr_code(style: node["style"])) do |r|
|
|
144
157
|
node.elements.each do |td|
|
|
145
|
-
attrs = make_tr_attr(td, ord, totalrows - 1, header,
|
|
158
|
+
attrs = make_tr_attr(td, ord, totalrows - 1, header,
|
|
159
|
+
table_bordered?(node))
|
|
146
160
|
r.send td.name, **attr_code(attrs) do |entry|
|
|
147
161
|
td.children.each { |n| parse(n, entry) }
|
|
148
162
|
end
|
|
149
163
|
end
|
|
150
164
|
end
|
|
151
165
|
end
|
|
166
|
+
|
|
167
|
+
def remove_bottom_border(cell)
|
|
168
|
+
# [^;]* (not +): the preceding property name is the unambiguous
|
|
169
|
+
# delimiter, so zero-or-more is equivalent and avoids polynomial
|
|
170
|
+
# backtracking on the value portion.
|
|
171
|
+
cell["style"] &&=
|
|
172
|
+
cell["style"].gsub(/border-bottom:[^;]*;/, "border-bottom:0pt;")
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def table_get_or_make_tfoot(table)
|
|
176
|
+
tfoot = table.at(".//tfoot")
|
|
177
|
+
if tfoot.nil?
|
|
178
|
+
table.add_child("<tfoot></tfoot>")
|
|
179
|
+
tfoot = table.at(".//tfoot")
|
|
180
|
+
else
|
|
181
|
+
tfoot.xpath(".//td | .//th").each { |td| remove_bottom_border(td) }
|
|
182
|
+
end
|
|
183
|
+
tfoot
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def new_fullcolspan_row(table, tfoot)
|
|
187
|
+
# how many columns in the table?
|
|
188
|
+
cols = 0
|
|
189
|
+
table.at(".//tr").xpath("./td | ./th").each do |td|
|
|
190
|
+
cols += (td["colspan"] ? td["colspan"].to_i : 1)
|
|
191
|
+
end
|
|
192
|
+
table["class"].nil? or # = plain table
|
|
193
|
+
s = "style='border-top:0pt;border-bottom:#{SW} 1.5pt;'"
|
|
194
|
+
tfoot.add_child("<tr><td colspan='#{cols}' #{s}/></tr>")
|
|
195
|
+
tfoot.xpath(".//td").last
|
|
196
|
+
end
|
|
152
197
|
end
|
|
153
198
|
end
|
|
154
199
|
end
|
data/lib/isodoc/metadata.rb
CHANGED
|
@@ -116,7 +116,7 @@ module IsoDoc
|
|
|
116
116
|
return "" unless draft
|
|
117
117
|
|
|
118
118
|
draftinfo = " (#{@labels['draft_label']} <esc>#{draft}</esc>"
|
|
119
|
-
draftinfo += ", #{revdate}" if revdate
|
|
119
|
+
draftinfo += ", #{revdate}" if revdate && revdate != draft
|
|
120
120
|
draftinfo += ")"
|
|
121
121
|
l10n(draftinfo, @lang, @script)
|
|
122
122
|
end
|
|
@@ -126,8 +126,8 @@ module IsoDoc
|
|
|
126
126
|
set(:edition_display,
|
|
127
127
|
isoxml.at(ns("//bibdata/edition#{currlang}"))&.text)
|
|
128
128
|
set(:docyear, isoxml.at(ns("//bibdata/copyright/from"))&.text)
|
|
129
|
-
set(:draft, isoxml.at(ns("//bibdata/version
|
|
130
|
-
revdate = isoxml.at(ns("//bibdata/
|
|
129
|
+
set(:draft, isoxml.at(ns("//bibdata/version"))&.text)
|
|
130
|
+
revdate = isoxml.at(ns("//bibdata/date[@type='updated']/on"))&.text
|
|
131
131
|
set(:revdate, revdate)
|
|
132
132
|
set(:revdate_monthyear, monthyr(revdate))
|
|
133
133
|
set(:draftinfo,
|
data/lib/isodoc/metadata_date.rb
CHANGED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "canon"
|
|
4
|
+
|
|
5
|
+
# Guard against leading "<?xml ?>" processing instructions in HTML
|
|
6
|
+
# input strings passed to Canon's be_html_equivalent_to /
|
|
7
|
+
# be_html4_equivalent_to / be_html5_equivalent_to matchers.
|
|
8
|
+
#
|
|
9
|
+
# WHY: Nokogiri::HTML5.fragment parses a leading "<?xml ?>" as a bogus
|
|
10
|
+
# Nokogiri::XML::Comment at index 0 of the fragment. In Canon's
|
|
11
|
+
# verbose mode (used by the matchers) comments are intentionally not
|
|
12
|
+
# filtered, so the bogus comment shifts fragment child indices and
|
|
13
|
+
# causes Canon's diff report to blame elements at the tail of the
|
|
14
|
+
# document for an offence at the head — an "uninterpretable report"
|
|
15
|
+
# remote from the actual cause. Canon's maintainer has chosen not to
|
|
16
|
+
# normalise this at the input boundary (closed PR lutaml/canon#124);
|
|
17
|
+
# this guard is the local defence.
|
|
18
|
+
#
|
|
19
|
+
# WHEN: required for the side effect. Requiring this file installs a
|
|
20
|
+
# Module#prepend on Canon::RSpecMatchers::SerializationMatcher's
|
|
21
|
+
# matches? method that raises IsoDoc::SpecHelpers::CanonGuardError if
|
|
22
|
+
# either side of an HTML-format comparison begins with an XML PI.
|
|
23
|
+
#
|
|
24
|
+
# REUSE: downstream gems that build on isodoc's spec idioms (metanorma
|
|
25
|
+
# family, mn2pdf, etc.) can opt in by adding a single line to their
|
|
26
|
+
# own spec_helper:
|
|
27
|
+
#
|
|
28
|
+
# require "isodoc/spec_helpers/canon_html_input_guard"
|
|
29
|
+
#
|
|
30
|
+
# No further setup is needed — the module installs on require.
|
|
31
|
+
|
|
32
|
+
module IsoDoc
|
|
33
|
+
module SpecHelpers
|
|
34
|
+
class CanonGuardError < StandardError; end
|
|
35
|
+
|
|
36
|
+
# Prepended onto Canon::RSpecMatchers::SerializationMatcher to
|
|
37
|
+
# intercept matches? before Canon's own implementation runs.
|
|
38
|
+
module CanonHtmlInputGuard
|
|
39
|
+
ILLEGAL_HTML_PREFIX = /\A\s*<\?xml\b/i.freeze
|
|
40
|
+
|
|
41
|
+
def matches?(target)
|
|
42
|
+
if html_format? &&
|
|
43
|
+
(illegal_prefix?(@expected) || illegal_prefix?(target))
|
|
44
|
+
side = illegal_prefix?(@expected) ? "expected" : "received"
|
|
45
|
+
raise CanonGuardError, build_message(side)
|
|
46
|
+
end
|
|
47
|
+
super
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
def html_format?
|
|
53
|
+
%i[html html4 html5].include?(@format)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def illegal_prefix?(value)
|
|
57
|
+
value.is_a?(String) && value.match?(ILLEGAL_HTML_PREFIX)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def matcher_label
|
|
61
|
+
case @format
|
|
62
|
+
when :html4 then "be_html4_equivalent_to"
|
|
63
|
+
when :html5 then "be_html5_equivalent_to"
|
|
64
|
+
else "be_html_equivalent_to"
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def build_message(side)
|
|
69
|
+
<<~MSG
|
|
70
|
+
#{matcher_label}: the #{side} side begins with an XML
|
|
71
|
+
processing instruction (<?xml ?>).
|
|
72
|
+
|
|
73
|
+
Nokogiri::HTML5.fragment parses this as a bogus comment node,
|
|
74
|
+
which shifts fragment child indices and causes Canon's diff
|
|
75
|
+
report to blame elements remote from the actual offending
|
|
76
|
+
node.
|
|
77
|
+
|
|
78
|
+
Strip the PI before comparing — e.g. use
|
|
79
|
+
Nokogiri::HTML(...).to_xhtml in place of
|
|
80
|
+
Nokogiri::XML(...).to_xml, or sub it away explicitly.
|
|
81
|
+
|
|
82
|
+
This guard is enforced by
|
|
83
|
+
isodoc/spec_helpers/canon_html_input_guard because Canon
|
|
84
|
+
does not surface this condition (see closed PR
|
|
85
|
+
lutaml/canon#124).
|
|
86
|
+
MSG
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
Canon::RSpecMatchers::SerializationMatcher
|
|
93
|
+
.prepend(IsoDoc::SpecHelpers::CanonHtmlInputGuard)
|
data/lib/isodoc/version.rb
CHANGED
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: 3.
|
|
4
|
+
version: 3.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-05-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: base64
|
|
@@ -44,14 +44,14 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.
|
|
47
|
+
version: 1.11.0
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.
|
|
54
|
+
version: 1.11.0
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: mn2pdf
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -80,34 +80,20 @@ dependencies:
|
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: 0.5.0
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: rake
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '13.0'
|
|
90
|
-
type: :runtime
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '13.0'
|
|
97
83
|
- !ruby/object:Gem::Dependency
|
|
98
84
|
name: relaton-render
|
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
|
100
86
|
requirements:
|
|
101
87
|
- - "~>"
|
|
102
88
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: 1.
|
|
89
|
+
version: 1.2.0
|
|
104
90
|
type: :runtime
|
|
105
91
|
prerelease: false
|
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
93
|
requirements:
|
|
108
94
|
- - "~>"
|
|
109
95
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: 1.
|
|
96
|
+
version: 1.2.0
|
|
111
97
|
- !ruby/object:Gem::Dependency
|
|
112
98
|
name: roman-numerals
|
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -178,188 +164,6 @@ dependencies:
|
|
|
178
164
|
- - ">="
|
|
179
165
|
- !ruby/object:Gem::Version
|
|
180
166
|
version: '0'
|
|
181
|
-
- !ruby/object:Gem::Dependency
|
|
182
|
-
name: benchmark
|
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
|
184
|
-
requirements:
|
|
185
|
-
- - ">="
|
|
186
|
-
- !ruby/object:Gem::Version
|
|
187
|
-
version: '0'
|
|
188
|
-
type: :development
|
|
189
|
-
prerelease: false
|
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
-
requirements:
|
|
192
|
-
- - ">="
|
|
193
|
-
- !ruby/object:Gem::Version
|
|
194
|
-
version: '0'
|
|
195
|
-
- !ruby/object:Gem::Dependency
|
|
196
|
-
name: bigdecimal
|
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
|
198
|
-
requirements:
|
|
199
|
-
- - ">="
|
|
200
|
-
- !ruby/object:Gem::Version
|
|
201
|
-
version: '0'
|
|
202
|
-
type: :development
|
|
203
|
-
prerelease: false
|
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
-
requirements:
|
|
206
|
-
- - ">="
|
|
207
|
-
- !ruby/object:Gem::Version
|
|
208
|
-
version: '0'
|
|
209
|
-
- !ruby/object:Gem::Dependency
|
|
210
|
-
name: canon
|
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
|
212
|
-
requirements:
|
|
213
|
-
- - '='
|
|
214
|
-
- !ruby/object:Gem::Version
|
|
215
|
-
version: 0.2.3
|
|
216
|
-
type: :development
|
|
217
|
-
prerelease: false
|
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
-
requirements:
|
|
220
|
-
- - '='
|
|
221
|
-
- !ruby/object:Gem::Version
|
|
222
|
-
version: 0.2.3
|
|
223
|
-
- !ruby/object:Gem::Dependency
|
|
224
|
-
name: debug
|
|
225
|
-
requirement: !ruby/object:Gem::Requirement
|
|
226
|
-
requirements:
|
|
227
|
-
- - ">="
|
|
228
|
-
- !ruby/object:Gem::Version
|
|
229
|
-
version: '0'
|
|
230
|
-
type: :development
|
|
231
|
-
prerelease: false
|
|
232
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
233
|
-
requirements:
|
|
234
|
-
- - ">="
|
|
235
|
-
- !ruby/object:Gem::Version
|
|
236
|
-
version: '0'
|
|
237
|
-
- !ruby/object:Gem::Dependency
|
|
238
|
-
name: equivalent-xml
|
|
239
|
-
requirement: !ruby/object:Gem::Requirement
|
|
240
|
-
requirements:
|
|
241
|
-
- - "~>"
|
|
242
|
-
- !ruby/object:Gem::Version
|
|
243
|
-
version: '0.6'
|
|
244
|
-
type: :development
|
|
245
|
-
prerelease: false
|
|
246
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
247
|
-
requirements:
|
|
248
|
-
- - "~>"
|
|
249
|
-
- !ruby/object:Gem::Version
|
|
250
|
-
version: '0.6'
|
|
251
|
-
- !ruby/object:Gem::Dependency
|
|
252
|
-
name: guard
|
|
253
|
-
requirement: !ruby/object:Gem::Requirement
|
|
254
|
-
requirements:
|
|
255
|
-
- - "~>"
|
|
256
|
-
- !ruby/object:Gem::Version
|
|
257
|
-
version: '2.14'
|
|
258
|
-
type: :development
|
|
259
|
-
prerelease: false
|
|
260
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
261
|
-
requirements:
|
|
262
|
-
- - "~>"
|
|
263
|
-
- !ruby/object:Gem::Version
|
|
264
|
-
version: '2.14'
|
|
265
|
-
- !ruby/object:Gem::Dependency
|
|
266
|
-
name: guard-rspec
|
|
267
|
-
requirement: !ruby/object:Gem::Requirement
|
|
268
|
-
requirements:
|
|
269
|
-
- - "~>"
|
|
270
|
-
- !ruby/object:Gem::Version
|
|
271
|
-
version: '4.7'
|
|
272
|
-
type: :development
|
|
273
|
-
prerelease: false
|
|
274
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
275
|
-
requirements:
|
|
276
|
-
- - "~>"
|
|
277
|
-
- !ruby/object:Gem::Version
|
|
278
|
-
version: '4.7'
|
|
279
|
-
- !ruby/object:Gem::Dependency
|
|
280
|
-
name: rspec
|
|
281
|
-
requirement: !ruby/object:Gem::Requirement
|
|
282
|
-
requirements:
|
|
283
|
-
- - "~>"
|
|
284
|
-
- !ruby/object:Gem::Version
|
|
285
|
-
version: '3.6'
|
|
286
|
-
type: :development
|
|
287
|
-
prerelease: false
|
|
288
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
289
|
-
requirements:
|
|
290
|
-
- - "~>"
|
|
291
|
-
- !ruby/object:Gem::Version
|
|
292
|
-
version: '3.6'
|
|
293
|
-
- !ruby/object:Gem::Dependency
|
|
294
|
-
name: rubocop
|
|
295
|
-
requirement: !ruby/object:Gem::Requirement
|
|
296
|
-
requirements:
|
|
297
|
-
- - "~>"
|
|
298
|
-
- !ruby/object:Gem::Version
|
|
299
|
-
version: '1'
|
|
300
|
-
type: :development
|
|
301
|
-
prerelease: false
|
|
302
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
303
|
-
requirements:
|
|
304
|
-
- - "~>"
|
|
305
|
-
- !ruby/object:Gem::Version
|
|
306
|
-
version: '1'
|
|
307
|
-
- !ruby/object:Gem::Dependency
|
|
308
|
-
name: rubocop-performance
|
|
309
|
-
requirement: !ruby/object:Gem::Requirement
|
|
310
|
-
requirements:
|
|
311
|
-
- - ">="
|
|
312
|
-
- !ruby/object:Gem::Version
|
|
313
|
-
version: '0'
|
|
314
|
-
type: :development
|
|
315
|
-
prerelease: false
|
|
316
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
317
|
-
requirements:
|
|
318
|
-
- - ">="
|
|
319
|
-
- !ruby/object:Gem::Version
|
|
320
|
-
version: '0'
|
|
321
|
-
- !ruby/object:Gem::Dependency
|
|
322
|
-
name: sassc-embedded
|
|
323
|
-
requirement: !ruby/object:Gem::Requirement
|
|
324
|
-
requirements:
|
|
325
|
-
- - "~>"
|
|
326
|
-
- !ruby/object:Gem::Version
|
|
327
|
-
version: '1'
|
|
328
|
-
type: :development
|
|
329
|
-
prerelease: false
|
|
330
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
331
|
-
requirements:
|
|
332
|
-
- - "~>"
|
|
333
|
-
- !ruby/object:Gem::Version
|
|
334
|
-
version: '1'
|
|
335
|
-
- !ruby/object:Gem::Dependency
|
|
336
|
-
name: simplecov
|
|
337
|
-
requirement: !ruby/object:Gem::Requirement
|
|
338
|
-
requirements:
|
|
339
|
-
- - "~>"
|
|
340
|
-
- !ruby/object:Gem::Version
|
|
341
|
-
version: '0.15'
|
|
342
|
-
type: :development
|
|
343
|
-
prerelease: false
|
|
344
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
345
|
-
requirements:
|
|
346
|
-
- - "~>"
|
|
347
|
-
- !ruby/object:Gem::Version
|
|
348
|
-
version: '0.15'
|
|
349
|
-
- !ruby/object:Gem::Dependency
|
|
350
|
-
name: timecop
|
|
351
|
-
requirement: !ruby/object:Gem::Requirement
|
|
352
|
-
requirements:
|
|
353
|
-
- - "~>"
|
|
354
|
-
- !ruby/object:Gem::Version
|
|
355
|
-
version: '0.9'
|
|
356
|
-
type: :development
|
|
357
|
-
prerelease: false
|
|
358
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
359
|
-
requirements:
|
|
360
|
-
- - "~>"
|
|
361
|
-
- !ruby/object:Gem::Version
|
|
362
|
-
version: '0.9'
|
|
363
167
|
description: |
|
|
364
168
|
isodoc converts documents in the IsoDoc document model into
|
|
365
169
|
Microsoft Word and HTML.
|
|
@@ -482,6 +286,7 @@ files:
|
|
|
482
286
|
- lib/isodoc/presentation_function/xrefs.rb
|
|
483
287
|
- lib/isodoc/presentation_xml_convert.rb
|
|
484
288
|
- lib/isodoc/sassc_importer.rb
|
|
289
|
+
- lib/isodoc/spec_helpers/canon_html_input_guard.rb
|
|
485
290
|
- lib/isodoc/version.rb
|
|
486
291
|
- lib/isodoc/word_convert.rb
|
|
487
292
|
- lib/isodoc/word_function.rb
|