metanorma-iso 1.10.1 → 1.10.5

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ubuntu.yml +1 -1
  3. data/Gemfile +1 -1
  4. data/lib/asciidoctor/iso/base.rb +1 -1
  5. data/lib/asciidoctor/iso/basicdoc.rng +1 -11
  6. data/lib/asciidoctor/iso/biblio.rng +0 -2
  7. data/lib/asciidoctor/iso/front.rb +17 -4
  8. data/lib/asciidoctor/iso/front_id.rb +20 -17
  9. data/lib/asciidoctor/iso/isodoc.rng +61 -19
  10. data/lib/asciidoctor/iso/isostandard-amd.rng +1 -1
  11. data/lib/asciidoctor/iso/isostandard.rng +15 -3
  12. data/lib/asciidoctor/iso/reqt.rng +1 -1
  13. data/lib/asciidoctor/iso/section.rb +1 -1
  14. data/lib/asciidoctor/iso/validate.rb +1 -1
  15. data/lib/asciidoctor/iso/validate_image.rb +1 -1
  16. data/lib/asciidoctor/iso/validate_section.rb +1 -1
  17. data/lib/isodoc/iso/base_convert.rb +14 -31
  18. data/lib/isodoc/iso/html/isodoc.css +0 -1
  19. data/lib/isodoc/iso/html/isodoc.scss +0 -1
  20. data/lib/isodoc/iso/html/style-human.css +40 -9
  21. data/lib/isodoc/iso/html/style-human.scss +36 -9
  22. data/lib/isodoc/iso/html/style-iso.css +35 -6
  23. data/lib/isodoc/iso/html/style-iso.scss +31 -6
  24. data/lib/isodoc/iso/html/wordstyle.css +10 -8
  25. data/lib/isodoc/iso/html/wordstyle.scss +10 -8
  26. data/lib/isodoc/iso/html_convert.rb +81 -22
  27. data/lib/isodoc/iso/index.rb +53 -45
  28. data/lib/isodoc/iso/iso.amendment.xsl +333 -113
  29. data/lib/isodoc/iso/iso.international-standard.xsl +333 -113
  30. data/lib/isodoc/iso/isosts_convert.rb +6 -2
  31. data/lib/isodoc/iso/metadata.rb +27 -22
  32. data/lib/isodoc/iso/presentation_xml_convert.rb +60 -25
  33. data/lib/isodoc/iso/sts_convert.rb +3 -2
  34. data/lib/isodoc/iso/word_convert.rb +0 -2
  35. data/lib/metanorma/iso/processor.rb +2 -2
  36. data/lib/metanorma/iso/version.rb +1 -1
  37. data/metanorma-iso.gemspec +3 -3
  38. data/spec/asciidoctor/base_spec.rb +397 -545
  39. data/spec/asciidoctor/blocks_spec.rb +4 -4
  40. data/spec/asciidoctor/cleanup_spec.rb +15 -12
  41. data/spec/asciidoctor/refs_spec.rb +87 -84
  42. data/spec/isodoc/amd_spec.rb +261 -250
  43. data/spec/isodoc/i18n_spec.rb +7 -7
  44. data/spec/isodoc/inline_spec.rb +242 -216
  45. data/spec/isodoc/iso_spec.rb +3 -1
  46. data/spec/isodoc/postproc_spec.rb +111 -28
  47. data/spec/isodoc/section_spec.rb +3 -3
  48. data/spec/isodoc/terms_spec.rb +34 -41
  49. data/spec/isodoc/xref_spec.rb +3 -3
  50. data/spec/metanorma/processor_spec.rb +110 -14
  51. data/spec/vcr_cassettes/docrels.yml +37 -427
  52. metadata +8 -8
@@ -22,8 +22,12 @@ module IsoDoc
22
22
  f.path
23
23
  end
24
24
  FileUtils.rm_rf dir
25
- MnConvert.convert(input_fname, output_fname || "#{fname}.#{@suffix}",
26
- MnConvert::InputFormat::MN, { output_format: :iso })
25
+ MnConvert.convert(input_fname,
26
+ {
27
+ input_format: MnConvert::InputFormat::MN,
28
+ output_file: output_fname || "#{fname}.#{@suffix}",
29
+ output_format: :iso,
30
+ })
27
31
  end
28
32
  end
29
33
  end
@@ -21,9 +21,8 @@ module IsoDoc
21
21
  stage = "DTS" if stage == "DIS"
22
22
  stage = "FDTS" if stage == "FDIS"
23
23
  end
24
- if %w(PWI NWIP WD CD).include?(stage) && iter
24
+ %w(PWI NWIP WD CD).include?(stage) && iter and
25
25
  stage += iter
26
- end
27
26
  stage = "Pre#{stage}" if /^0\./.match?(draft)
28
27
  stage
29
28
  end
@@ -31,20 +30,25 @@ module IsoDoc
31
30
  def docstatus(isoxml, _out)
32
31
  docstatus = isoxml.at(ns("//bibdata/status/stage"))
33
32
  set(:unpublished, false)
34
- if docstatus
35
- set(:stage, docstatus.text)
36
- set(:stage_int, docstatus.text.to_i)
37
- set(:unpublished, unpublished(docstatus.text))
38
- set(:statusabbr, status_abbrev(docstatus["abbreviation"] || "??",
39
- isoxml&.at(ns("//bibdata/status/substage"))&.text,
40
- isoxml&.at(ns("//bibdata/status/iteration"))&.text,
41
- isoxml&.at(ns("//bibdata/version/draft"))&.text,
42
- isoxml&.at(ns("//bibdata/ext/doctype"))&.text))
43
- unpublished(docstatus.text) and
44
- set(:stageabbr, docstatus["abbreviation"])
45
- end
46
33
  revdate = isoxml.at(ns("//bibdata/version/revision-date"))
47
34
  set(:revdate, revdate&.text)
35
+ if docstatus
36
+ docstatus1(isoxml, docstatus)
37
+ end
38
+ end
39
+
40
+ def docstatus1(isoxml, docstatus)
41
+ set(:stage, docstatus.text)
42
+ set(:stage_int, docstatus.text.to_i)
43
+ set(:unpublished, unpublished(docstatus.text))
44
+ set(:statusabbr,
45
+ status_abbrev(docstatus["abbreviation"] || "??",
46
+ isoxml&.at(ns("//bibdata/status/substage"))&.text,
47
+ isoxml&.at(ns("//bibdata/status/iteration"))&.text,
48
+ isoxml&.at(ns("//bibdata/version/draft"))&.text,
49
+ isoxml&.at(ns("//bibdata/ext/doctype"))&.text))
50
+ unpublished(docstatus.text) and
51
+ set(:stageabbr, docstatus["abbreviation"])
48
52
  end
49
53
 
50
54
  def unpublished(status)
@@ -73,8 +77,7 @@ module IsoDoc
73
77
 
74
78
  def amd_label(lang)
75
79
  case lang
76
- when "en" then "AMENDMENT"
77
- when "fr" then "AMENDMENT"
80
+ when "en", "fr" then "AMENDMENT"
78
81
  end
79
82
  end
80
83
 
@@ -183,10 +186,10 @@ module IsoDoc
183
186
  end
184
187
 
185
188
  def tc(xml)
186
- tc_num = xml.at(ns("//bibdata/ext/editorialgroup/technical-committee/@number"))
187
- tc_type = xml.at(ns("//bibdata/ext/editorialgroup/technical-committee/@type"))
188
- &.text || "TC"
189
- if tc_num
189
+ tc_type = xml.at(ns("//bibdata/ext/editorialgroup/technical-committee/"\
190
+ "@type"))&.text || "TC"
191
+ if tc_num = xml.at(ns("//bibdata/ext/editorialgroup/"\
192
+ "technical-committee/@number"))
190
193
  tcid = "#{tc_type} #{tc_num.text}"
191
194
  set(:tc, tcid)
192
195
  set(:editorialgroup, get[:editorialgroup] << tcid)
@@ -195,7 +198,8 @@ module IsoDoc
195
198
 
196
199
  def sc(xml)
197
200
  sc_num = xml.at(ns("//bibdata/ext/editorialgroup/subcommittee/@number"))
198
- sc_type = xml.at(ns("//bibdata/ext/editorialgroup/subcommittee/@type"))&.text || "SC"
201
+ sc_type = xml.at(ns("//bibdata/ext/editorialgroup/subcommittee/"\
202
+ "@type"))&.text || "SC"
199
203
  if sc_num
200
204
  scid = "#{sc_type} #{sc_num.text}"
201
205
  set(:sc, scid)
@@ -205,7 +209,8 @@ module IsoDoc
205
209
 
206
210
  def wg(xml)
207
211
  wg_num = xml.at(ns("//bibdata/ext/editorialgroup/workgroup/@number"))
208
- wg_type = xml.at(ns("//bibdata/ext/editorialgroup/workgroup/@type"))&.text || "WG"
212
+ wg_type = xml.at(ns("//bibdata/ext/editorialgroup/workgroup/"\
213
+ "@type"))&.text || "WG"
209
214
  if wg_num
210
215
  wgid = "#{wg_type} #{wg_num.text}"
211
216
  set(:wg, wgid)
@@ -57,7 +57,7 @@ module IsoDoc
57
57
  ret += " 第#{from.text}" if from
58
58
  ret += "&ndash;#{upto.text}" if upto
59
59
  loc = (@i18n.locality[type] || type.sub(/^locality:/, "").capitalize)
60
- ret += " #{loc}" unless subsection && type == "clause" ||
60
+ ret += " #{loc}" unless (subsection && type == "clause") ||
61
61
  type == "list" || target.match(/^IEV$|^IEC 60050-/) ||
62
62
  node["droploc"] == "true"
63
63
  ret += ")" if type == "list"
@@ -73,8 +73,8 @@ module IsoDoc
73
73
  return l10n(eref_localities1_zh(target, type, from, upto, node,
74
74
  delim))
75
75
  ret = eref_delim(delim, type)
76
- ret += eref_locality_populate(type, node) unless subsection &&
77
- type == "clause" || type == "list" ||
76
+ ret += eref_locality_populate(type, node) unless (subsection &&
77
+ type == "clause") || type == "list" ||
78
78
  target.match(/^IEV$|^IEC 60050-/)
79
79
  ret += " #{from.text}" if from
80
80
  ret += "&ndash;#{upto.text}" if upto
@@ -113,28 +113,29 @@ module IsoDoc
113
113
  end
114
114
 
115
115
  def concept(docxml)
116
- docxml.xpath(ns("//term//concept")).each_with_object({}) do |f, m|
117
- concept_term(f, m)
118
- end
116
+ concept_term(docxml)
119
117
  docxml.xpath(ns("//concept")).each do |node|
120
- concept_render(node, ital: node["ital"] || "false",
121
- ref: node["ref"] || "false",
122
- linkref: node["linkref"] || "true",
123
- linkmention: node["linkmention"] || "false")
118
+ concept_render(node, ital: "false", ref: "false",
119
+ linkref: "true", linkmention: "false")
124
120
  end
125
121
  end
126
122
 
127
- def concept_term(node, seen)
123
+ def concept_term(docxml)
124
+ docxml.xpath(ns("//term")).each do |f|
125
+ m = {}
126
+ f.xpath(ns(".//concept")).each do |c|
127
+ concept_term1(c, m)
128
+ end
129
+ end
130
+ end
131
+
132
+ def concept_term1(node, seen)
128
133
  term = node&.at(ns("./refterm"))&.to_xml
129
134
  if term && seen[term]
130
- concept_render(node, ital: node["ital"] || "false",
131
- ref: node["ref"] || "false",
132
- linkref: node["linkref"] || "true",
133
- linkmention: node["linkmention"] || "false")
134
- else concept_render(node, ital: node["ital"] || "true",
135
- ref: node["ref"] || "true",
136
- linkref: node["linkref"] || "true",
137
- linkmention: node["linkmention"] || "false")
135
+ concept_render(node, ital: "false", ref: "false",
136
+ linkref: "true", linkmention: "false")
137
+ else concept_render(node, ital: "true", ref: "true",
138
+ linkref: "true", linkmention: "false")
138
139
  end
139
140
  seen[term] = true if term
140
141
  seen
@@ -163,17 +164,51 @@ module IsoDoc
163
164
  i = display_order_xpath(docxml, "//preface/*", i)
164
165
  i = display_order_at(docxml, "//clause[@type = 'scope']", i)
165
166
  i = display_order_at(docxml, @xrefs.klass.norm_ref_xpath, i)
166
- # i = display_order_at(docxml, "//sections/terms | "\
167
- # "//sections/clause[descendant::terms]", i)
168
- # i = display_order_at(docxml, "//sections/definitions", i)
169
- # i = display_order_xpath(docxml, @xrefs.klass.middle_clause(docxml), i)
170
- i = display_order_xpath(docxml, "//sections/clause[not(@type = 'scope')] | "\
171
- "//sections/terms | //sections/definitions", i)
167
+ i = display_order_xpath(docxml,
168
+ "//sections/clause[not(@type = 'scope')] | "\
169
+ "//sections/terms | //sections/definitions", i)
172
170
  i = display_order_xpath(docxml, "//annex", i)
173
171
  i = display_order_xpath(docxml, @xrefs.klass.bibliography_xpath, i)
174
172
  display_order_xpath(docxml, "//indexsect", i)
175
173
  end
176
174
 
175
+ def termdefinition1(elem)
176
+ prefix_domain_to_definition(elem)
177
+ super
178
+ end
179
+
180
+ def prefix_domain_to_definition(elem)
181
+ ((d = elem.at(ns("./domain"))) &&
182
+ (v = elem.at(ns("./definition/verbal-definition"))) &&
183
+ v.elements.first.name == "p") or return
184
+ v.elements.first.children.first.previous =
185
+ "&#x3c;#{d.remove.children.to_xml}&#x3e; "
186
+ end
187
+
188
+ def insertall_after_here(node, insert, name)
189
+ node.children.each do |n|
190
+ next unless n.name == name
191
+
192
+ insert.next = n.remove
193
+ insert = n
194
+ end
195
+ insert
196
+ end
197
+
198
+ def termexamples_before_termnotes(node)
199
+ return unless insert = node.at(ns("./definition"))
200
+
201
+ insert = insertall_after_here(node, insert, "termexample")
202
+ insertall_after_here(node, insert, "termnote")
203
+ end
204
+
205
+ def terms(docxml)
206
+ docxml.xpath(ns("//term[termnote][termexample]")).each do |node|
207
+ termexamples_before_termnotes(node)
208
+ end
209
+ super
210
+ end
211
+
177
212
  include Init
178
213
  end
179
214
  end
@@ -19,8 +19,9 @@ module IsoDoc
19
19
  f.path
20
20
  end
21
21
  FileUtils.rm_rf dir
22
- MnConvert.convert(in_fname, out_fname || "#{filename}.#{@suffix}",
23
- MnConvert::InputFormat::MN)
22
+ MnConvert.convert(in_fname,
23
+ { input_format: MnConvert::InputFormat::MN,
24
+ output_file: out_fname || "#{filename}.#{@suffix}" })
24
25
  end
25
26
  end
26
27
  end
@@ -124,9 +124,7 @@ module IsoDoc
124
124
 
125
125
  def termref_parse(node, out)
126
126
  out.p **termref_attrs do |p|
127
- p << "[TERMREF]"
128
127
  node.children.each { |n| parse(n, p) }
129
- p << "[/TERMREF]"
130
128
  end
131
129
  end
132
130
 
@@ -4,7 +4,7 @@ module Metanorma
4
4
  module Iso
5
5
  class Processor < Metanorma::Processor
6
6
 
7
- def initialize
7
+ def initialize # rubocop:disable Lint/MissingSuper
8
8
  @short = :iso
9
9
  @input_format = :asciidoc
10
10
  @asciidoctor_backend = :iso
@@ -17,7 +17,7 @@ module Metanorma
17
17
  doc: "doc",
18
18
  pdf: "pdf",
19
19
  sts: "sts.xml",
20
- isosts: "iso.sts.xml"
20
+ isosts: "iso.sts.xml",
21
21
  )
22
22
  end
23
23
 
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module ISO
3
- VERSION = "1.10.1".freeze
3
+ VERSION = "1.10.5".freeze
4
4
  end
5
5
  end
@@ -30,16 +30,16 @@ Gem::Specification.new do |spec|
30
30
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
31
31
 
32
32
  spec.add_dependency "metanorma-standoc", "~> 1.11.0"
33
- spec.add_dependency "mnconvert", "~> 1.8.0"
33
+ spec.add_dependency "mnconvert", "~> 2.0"
34
34
  spec.add_dependency "ruby-jing"
35
35
  spec.add_dependency "tokenizer", "~> 0.3.0"
36
36
  spec.add_dependency "twitter_cldr"
37
37
 
38
- spec.add_development_dependency "byebug"
38
+ spec.add_development_dependency "debug"
39
39
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
40
40
  spec.add_development_dependency "guard", "~> 2.14"
41
41
  spec.add_development_dependency "guard-rspec", "~> 4.7"
42
- spec.add_development_dependency "iev", "~> 0.2.0"
42
+ spec.add_development_dependency "iev", "~> 0.3.0"
43
43
  spec.add_development_dependency "rake", "~> 13.0"
44
44
  spec.add_development_dependency "rspec", "~> 3.6"
45
45
  spec.add_development_dependency "rubocop", "~> 1.5.2"