metanorma-iso 2.0.8.1 → 2.1.2

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/lib/html2doc/lists.rb +169 -0
  3. data/lib/isodoc/iso/base_convert.rb +11 -1
  4. data/lib/isodoc/iso/html/html_iso_titlepage.html +7 -0
  5. data/lib/isodoc/iso/html/isodoc-dis.css +407 -427
  6. data/lib/isodoc/iso/html/isodoc-dis.scss +482 -438
  7. data/lib/isodoc/iso/html/isodoc.css +38 -13
  8. data/lib/isodoc/iso/html/isodoc.scss +38 -12
  9. data/lib/isodoc/iso/html/style-human.css +14 -1
  10. data/lib/isodoc/iso/html/style-human.scss +10 -1
  11. data/lib/isodoc/iso/html/style-iso.css +35 -23
  12. data/lib/isodoc/iso/html/style-iso.scss +31 -23
  13. data/lib/isodoc/iso/html/word_iso_intro-dis.html +3 -1
  14. data/lib/isodoc/iso/html/word_iso_titlepage-dis.html +26 -13
  15. data/lib/isodoc/iso/html/word_iso_titlepage-prf.html +58 -0
  16. data/lib/isodoc/iso/html/word_iso_titlepage.html +16 -6
  17. data/lib/isodoc/iso/html/wordstyle-dis.css +168 -48
  18. data/lib/isodoc/iso/html/wordstyle-dis.scss +158 -43
  19. data/lib/isodoc/iso/html_convert.rb +7 -2
  20. data/lib/isodoc/iso/i18n-en.yaml +33 -4
  21. data/lib/isodoc/iso/i18n-fr.yaml +30 -3
  22. data/lib/isodoc/iso/i18n-ru.yaml +33 -4
  23. data/lib/isodoc/iso/i18n-zh-Hans.yaml +33 -3
  24. data/lib/isodoc/iso/i18n.rb +1 -1
  25. data/lib/isodoc/iso/init.rb +17 -1
  26. data/lib/isodoc/iso/iso.amendment.xsl +1711 -367
  27. data/lib/isodoc/iso/iso.international-standard.xsl +1711 -367
  28. data/lib/isodoc/iso/metadata.rb +72 -78
  29. data/lib/isodoc/iso/presentation_bibdata.rb +74 -0
  30. data/lib/isodoc/iso/presentation_xml_convert.rb +52 -100
  31. data/lib/isodoc/iso/presentation_xref.rb +132 -0
  32. data/lib/isodoc/iso/sections.rb +3 -3
  33. data/lib/isodoc/iso/word_cleanup.rb +17 -0
  34. data/lib/isodoc/iso/word_convert.rb +32 -12
  35. data/lib/isodoc/iso/word_dis_cleanup.rb +235 -0
  36. data/lib/isodoc/iso/word_dis_convert.rb +122 -0
  37. data/lib/isodoc/iso/xref.rb +78 -29
  38. data/lib/metanorma/iso/base.rb +20 -1
  39. data/lib/metanorma/iso/biblio.rng +69 -42
  40. data/lib/metanorma/iso/boilerplate-fr.xml +4 -1
  41. data/lib/metanorma/iso/boilerplate-ru.xml +4 -3
  42. data/lib/metanorma/iso/boilerplate.xml +4 -3
  43. data/lib/metanorma/iso/cleanup.rb +29 -1
  44. data/lib/metanorma/iso/front.rb +31 -6
  45. data/lib/metanorma/iso/front_id.rb +2 -0
  46. data/lib/metanorma/iso/isodoc.rng +65 -0
  47. data/lib/metanorma/iso/isostandard.rng +30 -12
  48. data/lib/metanorma/iso/macros.rb +29 -0
  49. data/lib/metanorma/iso/version.rb +1 -1
  50. data/lib/metanorma-iso.rb +1 -0
  51. data/lib/relaton/render/config.yml +4 -0
  52. data/lib/relaton/render/general.rb +13 -0
  53. data/metanorma-iso.gemspec +1 -1
  54. data/spec/isodoc/amd_spec.rb +35 -60
  55. data/spec/isodoc/blocks_spec.rb +783 -179
  56. data/spec/isodoc/i18n_spec.rb +331 -100
  57. data/spec/isodoc/inline_spec.rb +35 -42
  58. data/spec/isodoc/iso_spec.rb +51 -170
  59. data/spec/isodoc/metadata_spec.rb +240 -99
  60. data/spec/isodoc/postproc_spec.rb +68 -7
  61. data/spec/isodoc/ref_spec.rb +66 -69
  62. data/spec/isodoc/section_spec.rb +88 -80
  63. data/spec/isodoc/table_spec.rb +2 -2
  64. data/spec/isodoc/terms_spec.rb +2 -2
  65. data/spec/isodoc/word_dis_spec.rb +1886 -0
  66. data/spec/isodoc/xref_spec.rb +138 -64
  67. data/spec/metanorma/amd_spec.rb +53 -1
  68. data/spec/metanorma/base_spec.rb +195 -20
  69. data/spec/metanorma/blocks_spec.rb +54 -0
  70. data/spec/metanorma/lists_spec.rb +2 -2
  71. data/spec/metanorma/section_spec.rb +2 -2
  72. data/spec/spec_helper.rb +23 -4
  73. data/spec/vcr_cassettes/withdrawn_iso.yml +25 -25
  74. metadata +15 -10
  75. data/docs/asciiiso-syntax.adoc +0 -307
  76. data/docs/guidance.adoc +0 -487
  77. data/docs/navigation.adoc +0 -23
  78. data/docs/quickstart.adoc +0 -179
  79. data/spec/vcr_cassettes/docrels.yml +0 -385
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e1f30a38a5b01c33aa1960a80937b5a1c965a7a4f6a02e87e214838161c0197
4
- data.tar.gz: bfcc9c484f6508515c342de4b00641bbfefc263e643ce231e3e95e0d3277461d
3
+ metadata.gz: 43eeca2b2e24e0d8d1681a52ad493218736544151b9d440e4a38343dae49e22b
4
+ data.tar.gz: 79241bc11b898d70a969f984646e3aded85b0bf1a7fd9d56f73b359e84e36f9a
5
5
  SHA512:
6
- metadata.gz: 8ac1e270c4c96ba79b6f64bd2d824d9c54bd9f3d87782ee33930186d8594043f35d1bb92bd61f85f0fca0401681e7a964291233f614da5d6cdfeae0fde8108d5
7
- data.tar.gz: e8d4385235de53bc7c691272ccebf231bf09dad6ad58779aa6e6841b0e7de63c3c93e501d270113f0e71a592358a183b2a4a0438ba6622b563064fc2380c1364
6
+ metadata.gz: 27b8c022d5e76b1d1d91ed48a2d7f95246df401c8ede504244387500ab371dd05fc0c6c71fb47d955059004321a9192ebd7d532ee593d46ccd594a0df3b654e2
7
+ data.tar.gz: 4f5d8ce30167455dd18418b82120ec7597d1daafde97b781d1b50b71d42a616754317c8faa6fd3906b35dcf040afc53bdad0c9f06d75b45784fb49fd7db33136
@@ -0,0 +1,169 @@
1
+ class Html2Doc
2
+ class IsoDIS < ::Html2Doc
3
+ def list2para(list)
4
+ return if list.xpath("./li").empty?
5
+
6
+ list.xpath("./li").each do |l|
7
+ list2para_level(l, list)
8
+ end
9
+ end
10
+
11
+ def list2para_level(item, list)
12
+ level = item["level"]
13
+ item.delete("level")
14
+ item.name = "p"
15
+ list2para_nest(item, level, list) if level
16
+ end
17
+
18
+ def list2para_nest(item, level, list)
19
+ item["class"] = list2para_style(list.name, level)
20
+ item.xpath("./p").each do |p|
21
+ p["class"] = list2para_style(list.name, level)
22
+ end
23
+ p1 = item.at("./p") or return
24
+ prev = p1.xpath("./preceding-sibling::* | ./preceding-sibling::text()")
25
+ if prev[-1].name == "span" && prev[-1]["style"] == "mso-tab-count:1" &&
26
+ prev.size == 2
27
+ p1.children.first.previous = prev[1]
28
+ p1.children.first.previous = prev[0]
29
+ end
30
+ end
31
+
32
+ def list2para_unnest_para(para, first_p, last_p)
33
+ return if last_p.xpath("./following-sibling::* | ./following-sibling::text()")
34
+ .any? do |x|
35
+ !x.text.strip.empty?
36
+ end
37
+
38
+ prev = first_p.xpath("./preceding-sibling::* | ./preceding-sibling::text()")
39
+ # bullet, tab, paragraph: ignore bullet, tab
40
+ return if prev.any? { |x| !x.text.strip.empty? }
41
+
42
+ para.replace(para.children)
43
+ end
44
+
45
+ def list2para_style(listtype, depth)
46
+ case listtype
47
+ when "ul"
48
+ case depth
49
+ when "1" then "ListContinue1"
50
+ when "2", "3", "4" then "MsoListContinue#{depth}"
51
+ else "MsoListContinue5"
52
+ end
53
+ when "ol"
54
+ case depth
55
+ when "1" then "ListNumber1"
56
+ when "2", "3", "4" then "MsoListNumber#{depth}"
57
+ else "MsoListNumber5"
58
+ end
59
+ end
60
+ end
61
+
62
+ def lists(docxml, liststyles)
63
+ super
64
+ docxml.xpath("//p[ol | ul]").each do |p|
65
+ list2para_unnest_para(p, p.at("./ol | ./ul"),
66
+ p.at("./*[name() = 'ul' or name() = 'ol'][last()]"))
67
+ end
68
+ docxml.xpath("//ol | //ul").each do |u|
69
+ u.replace(u.children)
70
+ end
71
+ unnest_list_paras(docxml)
72
+ indent_lists(docxml)
73
+ end
74
+
75
+ def unnest_list_paras(docxml)
76
+ docxml.xpath("//p[@class = 'ListContinue1' or @class = 'ListNumber1']"\
77
+ "[.//p]").each do |p|
78
+ p.at("./p") and
79
+ list2para_unnest_para(p, p.at("./p"),
80
+ p.at("./p[last()]"))
81
+ p.xpath(".//p[p]").each do |p1|
82
+ list2para_unnest_para(p1, p1.at("./p"),
83
+ p1.at("./p[last()]"))
84
+ end
85
+ end
86
+ end
87
+
88
+ def indent_lists(docxml)
89
+ docxml.xpath("//div[@class = 'Note' or @class = 'Example' or "\
90
+ "@class = 'Quote']").each do |d|
91
+ d.xpath(".//p").each do |p|
92
+ indent_lists1(p)
93
+ end
94
+ end
95
+ end
96
+
97
+ def indent_lists1(para)
98
+ m = /^(ListContinue|ListNumber|MsoListContinue|MsoListNumber)(\d)$/
99
+ .match(para["class"]) or return
100
+ base = m[1].sub(/^Mso/, "")
101
+ level = m[2].to_i + 1
102
+ level = 5 if level > 5
103
+ para["class"] = "#{base}#{level}-"
104
+ end
105
+
106
+ def list_add(xpath, liststyles, listtype, level)
107
+ xpath.each do |l|
108
+ l["seen"] = true if level == 1
109
+ l["id"] ||= UUIDTools::UUID.random_create
110
+ list_add_number(l, liststyles, listtype, level)
111
+ list_add_tail(l, liststyles, listtype, level)
112
+ end
113
+ end
114
+
115
+ def list_add_number(list, liststyles, listtype, level)
116
+ i = list["start"] ? list["start"].to_i - 1 : 0
117
+ (list.xpath(".//li") - list.xpath(".//ol//li | .//ul//li")).each do |li|
118
+ i = style_list_iso(li, level, listtype, i)
119
+ list_add1(li, liststyles, listtype, level)
120
+ end
121
+ end
122
+
123
+ def list_add_tail(list, liststyles, listtype, level)
124
+ list.xpath(".//ul[not(ancestor::li/ancestor::*/@id = '#{list['id']}')] | "\
125
+ ".//ol[not(ancestor::li/ancestor::*/@id = '#{list['id']}')]")
126
+ .each do |li|
127
+ list_add1(li.parent, liststyles, listtype, level - 1)
128
+ end
129
+ end
130
+
131
+ def style_list_iso(elem, level, listtype, idx)
132
+ return idx if elem.at(".//ol | .//ul") && !elem.at("./p")
133
+
134
+ idx += 1
135
+ ol = elem.xpath("./ancestor::ol")&.last
136
+ label = listlabel(listtype, idx, ol ? ol["type"] : nil)
137
+ elem.children.first.previous =
138
+ "#{label}<span style='mso-tab-count:1'>&#xa0;</span>"
139
+ elem["level"] = level
140
+ idx
141
+ end
142
+
143
+ def listlabel(listtype, idx, level)
144
+ case listtype
145
+ when :ul then "&#x2014;"
146
+ when :ol then "#{listidx(idx, level)})"
147
+ end
148
+ end
149
+
150
+ def listidx(idx, level)
151
+ case level
152
+ when "a" then (96 + idx).chr.to_s
153
+ when "1" then idx.to_s
154
+ when "i" then RomanNumerals.to_roman(idx).downcase
155
+ when "A" then (64 + idx).chr.to_s
156
+ when "I" then RomanNumerals.to_roman(idx).upcase
157
+ end
158
+ end
159
+
160
+ def cleanup(docxml)
161
+ super
162
+ docxml.xpath("//div[@class = 'Quote' or @class = 'Example' or "\
163
+ "@class = 'Note']").each do |d|
164
+ d.delete("class")
165
+ end
166
+ docxml
167
+ end
168
+ end
169
+ end
@@ -112,6 +112,12 @@ module IsoDoc
112
112
  end
113
113
  end
114
114
 
115
+ def admonition_class(node)
116
+ if node["type"] == "editorial" then "zzHelp"
117
+ else super
118
+ end
119
+ end
120
+
115
121
  def admonition_parse1(node, div, name)
116
122
  div.p do |p|
117
123
  admonition_name_parse(node, p, name) if name
@@ -129,7 +135,7 @@ module IsoDoc
129
135
 
130
136
  def admonition_name_parse(_node, div, name)
131
137
  name.children.each { |n| parse(n, div) }
132
- div << " &mdash; "
138
+ div << " &#x2014; "
133
139
  end
134
140
 
135
141
  def figure_name_parse(_node, div, name)
@@ -177,6 +183,10 @@ module IsoDoc
177
183
  clause_parse(i, out)
178
184
  end
179
185
  end
186
+
187
+ def ol_attrs(node)
188
+ super.merge(start: node["start"]).compact
189
+ end
180
190
  end
181
191
  end
182
192
  end
@@ -7,6 +7,10 @@
7
7
  <p class="coverpage_docnumber">{{ docnumber_undated }} {{ draftinfo }}</p>
8
8
  {% endif %}
9
9
 
10
+ {% if edition_display %}
11
+ <p class="coverpage_docnumber">{{ edition_display | capitalize }}</p>
12
+ {% endif %}
13
+
10
14
  {% if revdate %}
11
15
  <p class="coverpage_docnumber">{{ labels["date"]}}: {{ revdate }}</p>
12
16
  {% endif %}
@@ -17,8 +21,10 @@
17
21
 
18
22
  <p class="coverpage_techcommittee">{{ agency }}/{{ editorialgroup | join: "/" }}</p>
19
23
 
24
+ {% if secretariat %}
20
25
  <p class="coverpage_techcommittee"><a
21
26
  name="CVP_Secretariat_Loca">{{ labels["secretariat"] }}</a>: {{ secretariat }}</p>
27
+ {% endif %}
22
28
 
23
29
  <div class="doctitle-en"><div><span class="title">{{ doctitleintro }}{% if doctitleintro and doctitlemain %} &mdash; {% endif %}</span><span class="subtitle">{{ doctitlemain }}{% if doctitlemain and doctitlepart %} &mdash;{% endif %}</span>
24
30
  {% if doctitlepart %}
@@ -61,6 +67,7 @@
61
67
  <div id="boilerplate-license-destination"/>
62
68
  </div>
63
69
  {% endif %}
70
+ <div class="coverpage-warning" id="coverpage-note-destination"/>
64
71
 
65
72
  {% if ics %}
66
73
  <p><b>ICS:</b> {{ ics }}</p>