isodoc 2.0.5.3 → 2.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 127ed935ef3052a904bd3d13f513b6e4772faf36defe3035317f4ea0586ec249
4
- data.tar.gz: b2cb57af77963c233565bf0599d92f591b17167c80d76752473e83b768f1e260
3
+ metadata.gz: e038a4b4f203a16e86b716deffc9602d005c305312aebedbaf88231cfe263a60
4
+ data.tar.gz: 0f873f9ce5847c0a33296714a60917d3112a95ef04f3b2ea7052b18f0fcdab8c
5
5
  SHA512:
6
- metadata.gz: 143929b58729e90e51149b2db84c08fac0dbc5a4e358ab8759e8cdc2977e4c055ba556ca337173bfbd9fa4a3da118cb0c0b1aee9f9bbb61d8c1515621dc490fb
7
- data.tar.gz: 61d77e9f87e6d6358beabb8a730cad9c35f79848ae4e31938f2b725aefbe044fb54d1a54006d710b1d235c3353e4cab7c9109bcb5d0c044e22d358e8ddb22475
6
+ metadata.gz: 8c146a97d03c932fe72755edf96a9ad26806daf7c7de07814f8afd93714e1a88193b476e972bed1c17820eeca3f9216c6e07931d8fe56e6d036f857d9537339d
7
+ data.tar.gz: c081e93e7e29fd600f5968550a51a81c29f5663c6d5fb45c6f0a853978a3fdc1bc07d06a4b4e3161a4c67c78c3de7cd3ecc2e5b18999e25fec2d88ce010d9998
data/isodoc.gemspec CHANGED
@@ -31,6 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency "asciimath"
32
32
  spec.add_dependency "html2doc", "~> 1.3.0"
33
33
  spec.add_dependency "htmlentities", "~> 4.3.4"
34
+ spec.add_dependency "isodoc-i18n", "~> 1.0.0"
34
35
  spec.add_dependency "liquid", "~> 4"
35
36
  # spec.add_dependency "metanorma", ">= 1.2.0"
36
37
  spec.add_dependency "emf2svg", "~> 1"
@@ -0,0 +1,227 @@
1
+ html, body, div, span, applet, object, iframe,
2
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
3
+ a, abbr, acronym, address, big, cite, code,
4
+ del, dfn, em, img, ins, kbd, q, s, samp,
5
+ small, strike, strong, sub, sup, tt, var,
6
+ b, u, i, center,
7
+ ol, ul, li,
8
+ fieldset, form, label, legend,
9
+ table, caption, tbody, tfoot, thead, tr, th, td,
10
+ article, aside, canvas, details, embed,
11
+ figure, figcaption, footer, header, hgroup,
12
+ menu, output, ruby, section, summary,
13
+ time, mark, audio, video {
14
+ margin: 0;
15
+ padding: 0; }
16
+
17
+ html, body, div, span, applet, object, iframe,
18
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
19
+ a, abbr, acronym, address, big, cite, code,
20
+ del, dfn, em, img, ins, kbd, q, s, samp,
21
+ small, strike, strong, sub, sup, tt, var,
22
+ b, u, i, center,
23
+ dl, dt, dd, ol, ul, li,
24
+ fieldset, form, label, legend,
25
+ table, caption, tbody, tfoot, thead, tr, th, td,
26
+ article, aside, canvas, details, embed,
27
+ figure, figcaption, footer, header, hgroup,
28
+ menu, nav, output, ruby, section, summary,
29
+ time, mark, audio, video {
30
+ border: 0;
31
+ font-size: 100%; }
32
+
33
+ html, body, div, span, applet, object, iframe,
34
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
35
+ a, abbr, acronym, address, big, cite, code,
36
+ del, dfn, em, img, ins, kbd, q, s, samp,
37
+ small, strike, strong, tt, var,
38
+ b, u, i, center,
39
+ dl, dd, ol, ul, li,
40
+ fieldset, form, label, legend,
41
+ table, caption, tbody, tfoot, thead, tr, th, td,
42
+ article, aside, canvas, details, embed,
43
+ figure, figcaption, footer, header, hgroup,
44
+ menu, nav, output, ruby, section, summary,
45
+ time, mark, audio, video {
46
+ vertical-align: baseline; }
47
+
48
+ html, body, div, span, applet, object, iframe,
49
+ p, blockquote,
50
+ a, abbr, acronym, address, big, cite,
51
+ del, dfn, em, img, ins, q, s,
52
+ small, strike, strong, sub, sup, var,
53
+ b, u, i, center,
54
+ dl, dt, dd, ol, ul, li,
55
+ fieldset, form, label, legend,
56
+ table, caption, tbody, tfoot, thead, tr, th, td,
57
+ article, aside, canvas, details, embed,
58
+ figure, figcaption, footer, header, hgroup,
59
+ menu, nav, output, ruby, section, summary,
60
+ time, mark, audio, video {
61
+ font-family: {{bodyfont}}; }
62
+
63
+ code, pre, tt, kbd, samp {
64
+ font-family: {{monospacefont}};
65
+ font-variant-ligatures: none; }
66
+
67
+ code *, pre *, tt *, kbd *, samp * {
68
+ font-family: {{monospacefont}} !important;
69
+ font-variant-ligatures: none; }
70
+
71
+ p code, dt code, li code, label code, legend code, caption code, th code, td code,
72
+ p tt, dt tt, li tt, label tt, legend tt, caption tt, th tt, td tt,
73
+ p kbd, dt kbd, li kbd, label kbd, legend kbd, caption kbd, th kbd, td kbd,
74
+ p samp, dt samp, li samp, label samp, legend samp, caption samp, th samp, td samp {
75
+ font-size: {{monospacefontsize}}; }
76
+
77
+ article, aside, details, figcaption, figure,
78
+ footer, header, hgroup, menu, nav, section {
79
+ display: block; }
80
+
81
+ table {
82
+ border-collapse: collapse;
83
+ border-spacing: 0; }
84
+
85
+ h1, h2, h3, h4, h5, h6 {
86
+ font-family: {{headerfont}}; }
87
+
88
+ .h1, .h2, .h3, .h4, .h5, .h6 {
89
+ font-family: {{headerfont}}; }
90
+
91
+ blockquote, q {
92
+ quotes: none; }
93
+ blockquote:before, blockquote:after, q:before, q:after {
94
+ content: '';
95
+ content: none; }
96
+
97
+ .h2Annex {
98
+ font-family: {{headerfont}}; }
99
+
100
+ dl {
101
+ display: grid;
102
+ grid-template-columns: max-content auto; }
103
+ dl dt p, dl dd p {
104
+ margin-top: 0; }
105
+ dl dt {
106
+ grid-column-start: 1; }
107
+ dl dd {
108
+ grid-column-start: 2; }
109
+
110
+ b, strong {
111
+ font-weight: bold; }
112
+
113
+ div.document-stage-band, div.document-type-band {
114
+ background-color: #333333; }
115
+
116
+ a.FootnoteRef + a.FootnoteRef:before {
117
+ content: ", ";
118
+ vertical-align: super; }
119
+
120
+ .addition {
121
+ color: blue; }
122
+
123
+ .deletion {
124
+ color: red;
125
+ text-decoration: line-through; }
126
+
127
+ #standard-band {
128
+ background-color: #0AC442; }
129
+
130
+ #standard {
131
+ border-bottom: solid 3px #0AC442; }
132
+
133
+ #directive-band {
134
+ background-color: #540D6E; }
135
+
136
+ #directive {
137
+ border-bottom: solid 3px #540D6E; }
138
+
139
+ #guide-band {
140
+ background-color: #D183C9; }
141
+
142
+ #guide {
143
+ border-bottom: solid 3px #D183C9; }
144
+
145
+ #specification-band {
146
+ background-color: #65AFFF; }
147
+
148
+ #specification {
149
+ border-bottom: solid 3px #65AFFF; }
150
+
151
+ #report-band {
152
+ background-color: #3A405A; }
153
+
154
+ #report {
155
+ border-bottom: solid 3px #3A405A; }
156
+
157
+ #amendment-band {
158
+ background-color: #F26430; }
159
+
160
+ #amendment {
161
+ border-bottom: solid 3px #F26430; }
162
+
163
+ #corrigendum-band {
164
+ background-color: #C84630; }
165
+
166
+ #corrigendum {
167
+ border-bottom: solid 3px #C84630; }
168
+
169
+ #administrative-band {
170
+ background-color: #BFAE48; }
171
+
172
+ #administrative {
173
+ border-bottom: solid 3px #BFAE48; }
174
+
175
+ #advisory-band {
176
+ background-color: #BD9391; }
177
+
178
+ #advisory {
179
+ border-bottom: solid 3px #BD9391; }
180
+
181
+ #proposal-band {
182
+ background-color: #39A0ED; }
183
+
184
+ #proposal {
185
+ border-bottom: solid 3px #39A0ED; }
186
+
187
+ #working-draft-band {
188
+ background-color: #2D7393; }
189
+
190
+ #working-draft {
191
+ border-bottom: solid 3px #2D7393; }
192
+
193
+ #committee-draft-band {
194
+ background-color: #2A6B7C; }
195
+
196
+ #committee-draft {
197
+ border-bottom: solid 3px #2A6B7C; }
198
+
199
+ #draft-standard-band {
200
+ background-color: #1C7F7A; }
201
+
202
+ #draft-standard {
203
+ border-bottom: solid 3px #1C7F7A; }
204
+
205
+ #final-draft-band {
206
+ background-color: #53C170; }
207
+
208
+ #final-draft {
209
+ border-bottom: solid 3px #53C170; }
210
+
211
+ #published-band {
212
+ background-color: #069E2D; }
213
+
214
+ #published {
215
+ border-bottom: solid 3px #069E2D; }
216
+
217
+ #withdrawn-band {
218
+ background-color: #004E64; }
219
+
220
+ #withdrawn {
221
+ border-bottom: solid 3px #004E64; }
222
+
223
+ #cancelled-band {
224
+ background-color: #2E382E; }
225
+
226
+ #cancelled {
227
+ border-bottom: solid 3px #2E382E; }
File without changes
File without changes
File without changes
@@ -0,0 +1,47 @@
1
+ div.table_container {
2
+ margin-bottom: 14pt; }
3
+
4
+ ol {
5
+ margin-bottom: 0cm; }
6
+
7
+ ul {
8
+ margin-bottom: 0cm; }
9
+
10
+ table.MsoISOTable tr {
11
+ page-break-inside: avoid; }
12
+
13
+ td {
14
+ page-break-inside: avoid; }
15
+
16
+ tr {
17
+ page-break-after: avoid; }
18
+
19
+ table.MsoISOTableBig tr {
20
+ page-break-inside: auto; }
21
+
22
+ table.MsoISOTableBig td {
23
+ page-break-inside: auto; }
24
+
25
+ span.stem {
26
+ font-family: "Cambria Math",serif;
27
+ mso-ascii-font-family: "Cambria Math";
28
+ font-style: italic; }
29
+
30
+ dt {
31
+ page-break-inside: avoid;
32
+ page-break-after: avoid; }
33
+
34
+ br.section {
35
+ page-break-before: always;
36
+ mso-break-type: section-break; }
37
+
38
+ br.pagebreak {
39
+ page-break-before: always;
40
+ mso-special-character: line-break; }
41
+
42
+ span.addition {
43
+ color: blue; }
44
+
45
+ span.deletion {
46
+ color: red;
47
+ text-decoration: line-through; }
File without changes
@@ -0,0 +1,125 @@
1
+ html, body, div, span, applet, object, iframe,
2
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
3
+ a, abbr, acronym, address, big, cite, code,
4
+ del, dfn, em, img, ins, kbd, q, s, samp,
5
+ small, strike, strong, sub, sup, tt, var,
6
+ b, u, i, center,
7
+ ol, ul, li,
8
+ fieldset, form, label, legend,
9
+ table, caption, tbody, tfoot, thead, tr, th, td,
10
+ article, aside, canvas, details, embed,
11
+ figure, figcaption, footer, header, hgroup,
12
+ menu, output, ruby, section, summary,
13
+ time, mark, audio, video {
14
+ margin: 0;
15
+ padding: 0; }
16
+
17
+ html, body, div, span, applet, object, iframe,
18
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
19
+ a, abbr, acronym, address, big, cite, code,
20
+ del, dfn, em, img, ins, kbd, q, s, samp,
21
+ small, strike, strong, sub, sup, tt, var,
22
+ b, u, i, center,
23
+ dl, dt, dd, ol, ul, li,
24
+ fieldset, form, label, legend,
25
+ table, caption, tbody, tfoot, thead, tr, th, td,
26
+ article, aside, canvas, details, embed,
27
+ figure, figcaption, footer, header, hgroup,
28
+ menu, nav, output, ruby, section, summary,
29
+ time, mark, audio, video {
30
+ border: 0;
31
+ font-size: 100%; }
32
+
33
+ html, body, div, span, applet, object, iframe,
34
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
35
+ a, abbr, acronym, address, big, cite, code,
36
+ del, dfn, em, img, ins, kbd, q, s, samp,
37
+ small, strike, strong, tt, var,
38
+ b, u, i, center,
39
+ dl, dd, ol, ul, li,
40
+ fieldset, form, label, legend,
41
+ table, caption, tbody, tfoot, thead, tr, th, td,
42
+ article, aside, canvas, details, embed,
43
+ figure, figcaption, footer, header, hgroup,
44
+ menu, nav, output, ruby, section, summary,
45
+ time, mark, audio, video {
46
+ vertical-align: baseline; }
47
+
48
+ html, body, div, span, applet, object, iframe,
49
+ p, blockquote,
50
+ a, abbr, acronym, address, big, cite,
51
+ del, dfn, em, img, ins, q, s,
52
+ small, strike, strong, sub, sup, var,
53
+ b, u, i, center,
54
+ dl, dt, dd, ol, ul, li,
55
+ fieldset, form, label, legend,
56
+ table, caption, tbody, tfoot, thead, tr, th, td,
57
+ article, aside, canvas, details, embed,
58
+ figure, figcaption, footer, header, hgroup,
59
+ menu, nav, output, ruby, section, summary,
60
+ time, mark, audio, video {
61
+ font-family: {{bodyfont}}; }
62
+
63
+ code, pre, tt, kbd, samp {
64
+ font-family: {{monospacefont}};
65
+ font-variant-ligatures: none; }
66
+
67
+ code *, pre *, tt *, kbd *, samp * {
68
+ font-family: {{monospacefont}} !important;
69
+ font-variant-ligatures: none; }
70
+
71
+ p code, dt code, li code, label code, legend code, caption code, th code, td code,
72
+ p tt, dt tt, li tt, label tt, legend tt, caption tt, th tt, td tt,
73
+ p kbd, dt kbd, li kbd, label kbd, legend kbd, caption kbd, th kbd, td kbd,
74
+ p samp, dt samp, li samp, label samp, legend samp, caption samp, th samp, td samp {
75
+ font-size: {{monospacefontsize}}; }
76
+
77
+ article, aside, details, figcaption, figure,
78
+ footer, header, hgroup, menu, nav, section {
79
+ display: block; }
80
+
81
+ table {
82
+ border-collapse: collapse;
83
+ border-spacing: 0; }
84
+
85
+ h1, h2, h3, h4, h5, h6 {
86
+ font-family: {{headerfont}}; }
87
+
88
+ .h1, .h2, .h3, .h4, .h5, .h6 {
89
+ font-family: {{headerfont}}; }
90
+
91
+ blockquote, q {
92
+ quotes: none; }
93
+ blockquote:before, blockquote:after, q:before, q:after {
94
+ content: '';
95
+ content: none; }
96
+
97
+ .h2Annex {
98
+ font-family: {{headerfont}}; }
99
+
100
+ dl {
101
+ display: grid;
102
+ grid-template-columns: max-content auto; }
103
+ dl dt p, dl dd p {
104
+ margin-top: 0; }
105
+ dl dt {
106
+ grid-column-start: 1; }
107
+ dl dd {
108
+ grid-column-start: 2; }
109
+
110
+ b, strong {
111
+ font-weight: bold; }
112
+
113
+ div.document-stage-band, div.document-type-band {
114
+ background-color: #333333; }
115
+
116
+ a.FootnoteRef + a.FootnoteRef:before {
117
+ content: ", ";
118
+ vertical-align: super; }
119
+
120
+ .addition {
121
+ color: blue; }
122
+
123
+ .deletion {
124
+ color: red;
125
+ text-decoration: line-through; }
File without changes
@@ -32,7 +32,7 @@ module IsoDoc
32
32
  def init_dir(filename, debug)
33
33
  dir = "#{filename}#{@tmpfilesdir_suffix}"
34
34
  unless debug
35
- Dir.mkdir(dir, 0o777) unless File.exists?(dir)
35
+ Dir.mkdir(dir, 0o777) unless File.exist?(dir)
36
36
  FileUtils.rm_rf "#{dir}/*"
37
37
  end
38
38
  dir
@@ -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.exists?(tmpimagedir) and Dir["#{tmpimagedir}/*"].empty? and
27
+ Dir.exist?(tmpimagedir) and Dir["#{tmpimagedir}/*"].empty? and
28
28
  FileUtils.rm_r tmpimagedir
29
29
  ret
30
30
  end
data/lib/isodoc/i18n.rb CHANGED
@@ -1,28 +1,9 @@
1
1
  require "yaml"
2
+ require "isodoc-i18n"
2
3
  require_relative "function/utils"
3
4
 
4
5
  module IsoDoc
5
6
  class I18n
6
- def load_yaml(lang, script, i18nyaml = nil)
7
- ret = load_yaml1(lang, script)
8
- return normalise_hash(ret.merge(YAML.load_file(i18nyaml))) if i18nyaml
9
-
10
- normalise_hash(ret)
11
- end
12
-
13
- def normalise_hash(ret)
14
- case ret
15
- when Hash
16
- ret.each do |k, v|
17
- ret[k] = normalise_hash(v)
18
- end
19
- ret
20
- when Array then ret.map { |n| normalise_hash(n) }
21
- when String then cleanup_entities(ret.unicode_normalize(:nfc))
22
- else ret
23
- end
24
- end
25
-
26
7
  def load_yaml1(lang, script)
27
8
  case lang
28
9
  when "en", "fr", "ru", "de", "es", "ar"
@@ -40,93 +21,5 @@ module IsoDoc
40
21
  YAML.load_file(File.join(File.dirname(__FILE__),
41
22
  "../isodoc-yaml/i18n-#{str}.yaml"))
42
23
  end
43
-
44
- def get
45
- @labels
46
- end
47
-
48
- def set(key, val)
49
- @labels[key] = val
50
- end
51
-
52
- def initialize(lang, script, i18nyaml = nil)
53
- @lang = lang
54
- @script = script
55
- y = load_yaml(lang, script, i18nyaml)
56
- @labels = y
57
- @labels["language"] = @lang
58
- @labels["script"] = @script
59
- @labels.each do |k, _v|
60
- self.class.send(:define_method, k.downcase) { get[k] }
61
- end
62
- end
63
-
64
- def self.l10n(text, lang = @lang, script = @script)
65
- l10n(text, lang, script)
66
- end
67
-
68
- # TODO: move to localization file
69
- # function localising spaces and punctuation.
70
- # Not clear if period needs to be localised for zh
71
- def l10n(text, lang = @lang, script = @script)
72
- if lang == "zh" && script == "Hans" then l10n_zh(text)
73
- else bidiwrap(text, lang, script)
74
- end
75
- end
76
-
77
- def bidiwrap(text, lang, script)
78
- my_script, my_rtl, outer_rtl = bidiwrap_vars(lang, script)
79
- if my_rtl && !outer_rtl
80
- mark = %w(Arab Aran).include?(my_script) ? "؜" : "‏"
81
- "#{mark}#{text}#{mark}"
82
- elsif !my_rtl && outer_rtl then "‎#{text}‎"
83
- else text
84
- end
85
- end
86
-
87
- def bidiwrap_vars(lang, script)
88
- my_script = script || Metanorma::Utils.default_script(lang)
89
- [my_script,
90
- Metanorma::Utils.rtl_script?(my_script),
91
- Metanorma::Utils.rtl_script?(@script || Metanorma::Utils
92
- .default_script(@lang))]
93
- end
94
-
95
- def l10n_zh(text)
96
- xml = Nokogiri::HTML::DocumentFragment.parse(text)
97
- xml.traverse do |n|
98
- next unless n.text?
99
-
100
- n.replace(cleanup_entities(n.text.gsub(/ /, "").gsub(/:/, ":")
101
- .gsub(/,/, "、").gsub(/\(/, "(").gsub(/\)/, ")")
102
- .gsub(/\[/, "【").gsub(/\]/, "】"), is_xml: false))
103
- end
104
- xml.to_xml.gsub(/<b>/, "").gsub("</b>", "").gsub(/<\?[^>]+>/, "")
105
- end
106
-
107
- def boolean_conj(list, conn)
108
- case list.size
109
- when 0 then ""
110
- when 1 then list.first
111
- when 2 then @labels["binary_#{conn}"].sub(/%1/, list[0])
112
- .sub(/%2/, list[1])
113
- else
114
- @labels["multiple_#{conn}"]
115
- .sub(/%1/, l10n(list[0..-2].join(", "), @lang, @script))
116
- .sub(/%2/, list[-1])
117
- end
118
- end
119
-
120
- # def multiple_and(names, andword)
121
- # return "" if names.empty?
122
- # return names[0] if names.length == 1
123
- #
124
- # (names.length == 2) &&
125
- # (return l10n("#{names[0]} #{andword} #{names[1]}", @lang, @script))
126
- # l10n(names[0..-2].join(", ") + " #{andword} #{names[-1]}", @lang, @script)
127
- # end
128
-
129
- include Function::Utils
130
- # module_function :l10n
131
24
  end
132
25
  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.exists?(ret) and return ret
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
@@ -76,16 +76,25 @@ module IsoDoc
76
76
  def bibliography_bibitem_number(docxml)
77
77
  i = 0
78
78
  docxml.xpath(ns("//references[@normative = 'false']/bibitem")).each do |b|
79
- next if bibliography_bibitem_number_skip(b)
80
-
81
- i += 1
82
- id = b.at(ns(".//docidentifier"))
83
- id.previous =
84
- "<docidentifier type='metanorma-ordinal'>[#{i}]</docidentifier>"
79
+ i = bibliography_bibitem_number1(b, i)
85
80
  end
86
81
  @xrefs.references docxml
87
82
  end
88
83
 
84
+ def bibliography_bibitem_number1(bibitem, idx)
85
+ if mn = bibitem.at(ns(".//docidentifier[@type = 'metanorma']"))
86
+ /^\[?\d\]?$/.match?(mn&.text) and
87
+ idx = mn.text.sub(/^\[/, "").sub(/\]$/, "").to_i
88
+ end
89
+ unless bibliography_bibitem_number_skip(bibitem)
90
+
91
+ idx += 1
92
+ bibitem.at(ns(".//docidentifier")).previous =
93
+ "<docidentifier type='metanorma-ordinal'>[#{idx}]</docidentifier>"
94
+ end
95
+ idx
96
+ end
97
+
89
98
  def docid_prefixes(docxml)
90
99
  docxml.xpath(ns("//references/bibitem/docidentifier")).each do |i|
91
100
  i.children = @xrefs.klass.docid_prefix(i["type"], i.text)
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "2.0.5.3".freeze
2
+ VERSION = "2.0.7".freeze
3
3
  end
@@ -206,7 +206,7 @@ module IsoDoc
206
206
 
207
207
  out.p { |p| p << @i18n.where }
208
208
  parse(deflist, out)
209
- out.parent.at("./table")["class"] = "formula_dl"
209
+ t = out.parent.at("./table") and t["class"] = "formula_dl"
210
210
  end
211
211
 
212
212
  def formula_parse1(node, out)
@@ -87,18 +87,23 @@ module IsoDoc
87
87
 
88
88
  def note_anchor_names(sections)
89
89
  sections.each do |s|
90
- c = Counter.new
91
- (notes = s.xpath(CHILD_NOTES_XPATH)).each do |n|
92
- next if @anchors[n["id"]] || n["id"].nil? || n["id"].empty?
93
-
94
- @anchors[n["id"]] =
95
- anchor_struct(increment_label(notes, n, c), n,
96
- @labels["note_xref"], "note", false)
97
- end
90
+ notes = s.xpath(CHILD_NOTES_XPATH) -
91
+ s.xpath(ns(".//figure//note | .//table//note"))
92
+ note_anchor_names1(notes, Counter.new)
98
93
  note_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
99
94
  end
100
95
  end
101
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
+
102
107
  CHILD_EXAMPLES_XPATH =
103
108
  "./*[not(self::xmlns:clause) and not(self::xmlns:appendix) and "\
104
109
  "not(self::xmlns:terms) and not(self::xmlns:definitions)]//"\
@@ -109,18 +114,22 @@ module IsoDoc
109
114
 
110
115
  def example_anchor_names(sections)
111
116
  sections.each do |s|
112
- c = Counter.new
113
- (notes = s.xpath(CHILD_EXAMPLES_XPATH)).each do |n|
114
- next if @anchors[n["id"]] || n["id"].nil? || n["id"].empty?
115
-
116
- @anchors[n["id"]] =
117
- anchor_struct(increment_label(notes, n, c), n,
118
- @labels["example_xref"], "example", n["unnumbered"])
119
- end
117
+ notes = s.xpath(CHILD_EXAMPLES_XPATH)
118
+ example_anchor_names1(notes, Counter.new)
120
119
  example_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
121
120
  end
122
121
  end
123
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
+
124
133
  def list_anchor_names(sections)
125
134
  sections.each do |s|
126
135
  notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//clause//ol")) -
@@ -154,17 +163,20 @@ module IsoDoc
154
163
  sections.each do |s|
155
164
  notes = s.xpath(ns(".//dl")) - s.xpath(ns(".//clause//dl")) -
156
165
  s.xpath(ns(".//appendix//dl")) - s.xpath(ns(".//dl//dl"))
157
- c = Counter.new
158
- notes.reject { |n| blank?(n["id"]) }.each do |n|
159
- @anchors[n["id"]] =
160
- anchor_struct(increment_label(notes, n, c), n,
161
- @labels["deflist"], "deflist", false)
162
- deflist_term_anchor_names(n, @anchors[n["id"]])
163
- end
166
+ deflist_anchor_names1(notes, Counter.new)
164
167
  deflist_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
165
168
  end
166
169
  end
167
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
+
168
180
  def deflist_term_anchor_names(list, list_anchor)
169
181
  list.xpath(ns("./dt")).each do |li|
170
182
  label = l10n("#{list_anchor[:xref]}: #{dt2xreflabel(li)}")
@@ -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">
@@ -854,4 +854,52 @@ RSpec.describe IsoDoc do
854
854
  .to be_equivalent_to xmlpp(presxml)
855
855
  end
856
856
 
857
+ it "enforces consistent metanorma-ordinal numbering" do
858
+ input = <<~INPUT
859
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
860
+ <bibdata>
861
+ <language>en</language>
862
+ </bibdata>
863
+ <bibliography><references id="_normative_references" obligation="informative" normative="false"><title>Bibliography</title>
864
+ <bibitem id="ref1" type="standard">
865
+ <title format="text/plain">Cereals or cereal products</title>
866
+ <docidentifier type="IEC">IEC 217</docidentifier>
867
+ </bibitem>
868
+ <bibitem id="ref2" type="standard">
869
+ <title format="text/plain">Cereals or cereal products</title>
870
+ <docidentifier type="metanorma">[3]</docidentifier>
871
+ </bibitem>
872
+ <bibitem id="ref3" type="standard">
873
+ <title format="text/plain">Cereals or cereal products</title>
874
+ <docidentifier>ABC</docidentifier>
875
+ </bibitem>
876
+ </references></bibliography></iso-standard>
877
+ INPUT
878
+ presxml = <<~PRESXML
879
+ <bibliography>
880
+ <references id='_normative_references' obligation='informative' normative='false' displayorder='1'>
881
+ <title depth='1'>Bibliography</title>
882
+ <bibitem id='ref1' type='standard'>
883
+ <title format='text/plain'>Cereals or cereal products</title>
884
+ <docidentifier type='metanorma-ordinal'>[1]</docidentifier>
885
+ <docidentifier type='IEC'>IEC 217</docidentifier>
886
+ </bibitem>
887
+ <bibitem id='ref2' type='standard'>
888
+ <title format='text/plain'>Cereals or cereal products</title>
889
+ <docidentifier type='metanorma'>[3]</docidentifier>
890
+ </bibitem>
891
+ <bibitem id='ref3' type='standard'>
892
+ <title format='text/plain'>Cereals or cereal products</title>
893
+ <docidentifier type='metanorma-ordinal'>[4]</docidentifier>
894
+ <docidentifier>ABC</docidentifier>
895
+ </bibitem>
896
+ </references>
897
+ </bibliography>
898
+ PRESXML
899
+ expect(xmlpp(Nokogiri::XML(
900
+ IsoDoc::PresentationXMLConvert.new({})
901
+ .convert("test", input, true),
902
+ ).at("//xmlns:bibliography").to_xml))
903
+ .to be_equivalent_to xmlpp(presxml)
904
+ end
857
905
  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: 2.0.5.3
4
+ version: 2.0.7
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: 2022-03-15 00:00:00.000000000 Z
11
+ date: 2022-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciimath
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 4.3.4
55
+ - !ruby/object:Gem::Dependency
56
+ name: isodoc-i18n
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.0.0
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: liquid
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -391,15 +405,23 @@ files:
391
405
  - lib/isodoc-yaml/i18n-ru.yaml
392
406
  - lib/isodoc-yaml/i18n-zh-Hans.yaml
393
407
  - lib/isodoc.rb
408
+ - lib/isodoc/base_style/all.css
394
409
  - lib/isodoc/base_style/all.scss
395
410
  - lib/isodoc/base_style/bands.scss
411
+ - lib/isodoc/base_style/blocks.css
396
412
  - lib/isodoc/base_style/blocks.scss
413
+ - lib/isodoc/base_style/coverpage.css
397
414
  - lib/isodoc/base_style/coverpage.scss
415
+ - lib/isodoc/base_style/defaults.css
398
416
  - lib/isodoc/base_style/defaults.scss
417
+ - lib/isodoc/base_style/metanorma_word.css
399
418
  - lib/isodoc/base_style/metanorma_word.scss
419
+ - lib/isodoc/base_style/nav.css
400
420
  - lib/isodoc/base_style/nav.scss
421
+ - lib/isodoc/base_style/reset.css
401
422
  - lib/isodoc/base_style/reset.scss
402
423
  - lib/isodoc/base_style/scripts.html
424
+ - lib/isodoc/base_style/typography.css
403
425
  - lib/isodoc/base_style/typography.scss
404
426
  - lib/isodoc/class_utils.rb
405
427
  - lib/isodoc/common.rb
@@ -512,7 +534,7 @@ homepage: https://github.com/metanorma/isodoc
512
534
  licenses:
513
535
  - BSD-2-Clause
514
536
  metadata: {}
515
- post_install_message:
537
+ post_install_message:
516
538
  rdoc_options: []
517
539
  require_paths:
518
540
  - lib
@@ -527,8 +549,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
527
549
  - !ruby/object:Gem::Version
528
550
  version: '0'
529
551
  requirements: []
530
- rubygems_version: 3.1.6
531
- signing_key:
552
+ rubygems_version: 3.3.9
553
+ signing_key:
532
554
  specification_version: 4
533
555
  summary: Convert documents in IsoDoc into Word and HTML in AsciiDoc.
534
556
  test_files: []