isodoc 1.5.5 → 1.6.4

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/.github/workflows/rake.yml +2 -12
  3. data/.hound.yml +3 -1
  4. data/.rubocop.yml +3 -7
  5. data/Gemfile +2 -2
  6. data/Rakefile +2 -2
  7. data/bin/rspec +1 -2
  8. data/isodoc.gemspec +11 -11
  9. data/lib/isodoc-yaml/i18n-ar.yaml +152 -0
  10. data/lib/isodoc-yaml/i18n-de.yaml +149 -0
  11. data/lib/isodoc-yaml/i18n-es.yaml +151 -0
  12. data/lib/isodoc-yaml/i18n-ru.yaml +154 -0
  13. data/lib/isodoc.rb +0 -2
  14. data/lib/isodoc/base_style/all.css +7 -0
  15. data/lib/isodoc/base_style/metanorma_word.css +7 -0
  16. data/lib/isodoc/base_style/metanorma_word.scss +8 -0
  17. data/lib/isodoc/base_style/reset.css +7 -0
  18. data/lib/isodoc/base_style/reset.scss +9 -0
  19. data/lib/isodoc/base_style/scripts.html +187 -0
  20. data/lib/isodoc/class_utils.rb +6 -5
  21. data/lib/isodoc/common.rb +2 -0
  22. data/lib/isodoc/convert.rb +30 -17
  23. data/lib/isodoc/css.rb +43 -34
  24. data/lib/isodoc/function/blocks.rb +21 -4
  25. data/lib/isodoc/function/blocks_example_note.rb +2 -2
  26. data/lib/isodoc/function/cleanup.rb +53 -45
  27. data/lib/isodoc/function/form.rb +51 -0
  28. data/lib/isodoc/function/inline.rb +37 -15
  29. data/lib/isodoc/function/references.rb +55 -42
  30. data/lib/isodoc/function/section.rb +29 -16
  31. data/lib/isodoc/function/table.rb +1 -0
  32. data/lib/isodoc/function/to_word_html.rb +33 -29
  33. data/lib/isodoc/function/utils.rb +180 -159
  34. data/lib/isodoc/gem_tasks.rb +30 -31
  35. data/lib/isodoc/headlesshtml_convert.rb +8 -7
  36. data/lib/isodoc/html_convert.rb +6 -4
  37. data/lib/isodoc/html_function/comments.rb +2 -0
  38. data/lib/isodoc/html_function/footnotes.rb +14 -7
  39. data/lib/isodoc/html_function/form.rb +62 -0
  40. data/lib/isodoc/html_function/html.rb +30 -26
  41. data/lib/isodoc/html_function/postprocess.rb +41 -82
  42. data/lib/isodoc/html_function/postprocess_footnotes.rb +59 -0
  43. data/lib/isodoc/i18n.rb +33 -31
  44. data/lib/isodoc/pdf_convert.rb +12 -16
  45. data/lib/isodoc/presentation_function/bibdata.rb +54 -30
  46. data/lib/isodoc/presentation_function/block.rb +17 -8
  47. data/lib/isodoc/presentation_function/inline.rb +84 -120
  48. data/lib/isodoc/presentation_function/math.rb +84 -0
  49. data/lib/isodoc/presentation_function/section.rb +20 -22
  50. data/lib/isodoc/presentation_xml_convert.rb +2 -1
  51. data/lib/isodoc/sassc_importer.rb +1 -1
  52. data/lib/isodoc/version.rb +1 -1
  53. data/lib/isodoc/word_function/body.rb +28 -24
  54. data/lib/isodoc/word_function/footnotes.rb +22 -15
  55. data/lib/isodoc/word_function/postprocess.rb +50 -36
  56. data/lib/isodoc/xref.rb +9 -10
  57. data/lib/isodoc/xref/xref_counter.rb +32 -17
  58. data/lib/isodoc/xref/xref_gen.rb +33 -21
  59. data/lib/isodoc/xref/xref_gen_seq.rb +60 -35
  60. data/lib/isodoc/xref/xref_sect_gen.rb +37 -35
  61. data/lib/isodoc/xslfo_convert.rb +36 -27
  62. data/spec/assets/scripts_override.html +3 -0
  63. data/spec/isodoc/blocks_spec.rb +2490 -2591
  64. data/spec/isodoc/cleanup_spec.rb +1107 -1109
  65. data/spec/isodoc/footnotes_spec.rb +1 -16
  66. data/spec/isodoc/form_spec.rb +156 -0
  67. data/spec/isodoc/i18n_spec.rb +984 -972
  68. data/spec/isodoc/inline_spec.rb +1129 -912
  69. data/spec/isodoc/lists_spec.rb +316 -315
  70. data/spec/isodoc/postproc_spec.rb +1751 -1540
  71. data/spec/isodoc/presentation_xml_spec.rb +403 -323
  72. data/spec/isodoc/ref_spec.rb +718 -723
  73. data/spec/isodoc/section_spec.rb +910 -902
  74. data/spec/isodoc/table_spec.rb +566 -556
  75. data/spec/isodoc/terms_spec.rb +251 -255
  76. data/spec/isodoc/xref_spec.rb +3041 -2992
  77. data/spec/isodoc/xslfo_convert_spec.rb +39 -0
  78. data/spec/spec_helper.rb +30 -29
  79. metadata +77 -65
@@ -0,0 +1,51 @@
1
+ module IsoDoc::Function
2
+ module Form
3
+ def form_parse(node, out)
4
+ node.children.each do |n|
5
+ parse(n, out)
6
+ end
7
+ end
8
+
9
+ def input_parse(node, out)
10
+ case node["type"]
11
+ when "button" then out << "[#{node['value'] || 'BUTTON'}]"
12
+ when "checkbox" then out << "&#x2610; "
13
+ when "date" then text_input(out)
14
+ when "file" then text_input(out)
15
+ when "password" then text_input(out)
16
+ when "radio" then out << "&#x25CE; "
17
+ when "submit" # nop
18
+ when "text" then text_input(out, node["maxlength"])
19
+ end
20
+ end
21
+
22
+ def text_input(out, length = 10)
23
+ length ||= 10
24
+ length = length.to_i
25
+ length.zero? and length = 10
26
+ out << "_" * length
27
+ out << " "
28
+ end
29
+
30
+ def select_parse(node, out)
31
+ text_input(out, node["size"] || 10)
32
+ end
33
+
34
+ def label_parse(node, out)
35
+ node.children.each do |n|
36
+ parse(n, out)
37
+ end
38
+ end
39
+
40
+ def option_parse(node, out); end
41
+
42
+ def textarea_parse(_node, out)
43
+ out.table **{ border: 1, width: "50%" } do |t|
44
+ t.tr do |tr|
45
+ tr.td do |td|
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -3,11 +3,12 @@ require_relative "inline_simple"
3
3
  module IsoDoc::Function
4
4
  module Inline
5
5
  def link_parse(node, out)
6
- out.a **attr_code(href: node["target"], title: node["alt"]) do |l|
6
+ url = node["target"]
7
+ node["updatetype"] == "true" and url = suffix_url(url)
8
+ out.a **attr_code(href: url, title: node["alt"]) do |l|
7
9
  if node.text.empty?
8
10
  l << node["target"].sub(/^mailto:/, "")
9
- else
10
- node.children.each { |n| parse(n, l) }
11
+ else node.children.each { |n| parse(n, l) }
11
12
  end
12
13
  end
13
14
  end
@@ -23,21 +24,27 @@ module IsoDoc::Function
23
24
  end
24
25
 
25
26
  def xref_parse(node, out)
26
- target = /#/.match(node["target"]) ? node["target"].sub(/#/, ".html#") :
27
- "##{node["target"]}"
28
- out.a(**{ "href": target }) { |l| no_locality_parse(node, l) }
27
+ target = if /#/.match?(node["target"])
28
+ node["target"].sub(/#/, ".html#")
29
+ else
30
+ "##{node['target']}"
31
+ end
32
+ out.a(**{ "href": target }) { |l| no_locality_parse(node, l) }
29
33
  end
30
34
 
31
35
  def suffix_url(url)
32
- return url if %r{^http[s]?://}.match(url)
36
+ return url if %r{^https?://}.match?(url)
37
+ return url unless File.extname(url).empty?
38
+
33
39
  url.sub(/#{File.extname(url)}$/, ".html")
34
40
  end
35
41
 
36
42
  def eref_target(node)
37
- href = "#" + node["bibitemid"]
43
+ href = "##{node['bibitemid']}"
38
44
  url = node.at(ns("//bibitem[@id = '#{node['bibitemid']}']/"\
39
45
  "uri[@type = 'citation']"))
40
46
  return href unless url
47
+
41
48
  href = suffix_url(url.text)
42
49
  anchor = node&.at(ns(".//locality[@type = 'anchor']"))&.text&.strip
43
50
  anchor and href += "##{anchor}"
@@ -68,12 +75,12 @@ module IsoDoc::Function
68
75
  end
69
76
 
70
77
  def stem_parse(node, out)
71
- ooml = if node["type"] == "AsciiMath"
78
+ ooml = case node["type"]
79
+ when "AsciiMath"
72
80
  "#{@openmathdelim}#{HTMLEntities.new.encode(node.text)}"\
73
81
  "#{@closemathdelim}"
74
- elsif node["type"] == "MathML" then node.first_element_child.to_s
75
- else
76
- HTMLEntities.new.encode(node.text)
82
+ when "MathML" then node.first_element_child.to_s
83
+ else HTMLEntities.new.encode(node.text)
77
84
  end
78
85
  out.span **{ class: "stem" } do |span|
79
86
  span.parent.add_child ooml
@@ -93,7 +100,7 @@ module IsoDoc::Function
93
100
  height: node["height"] || "auto",
94
101
  width: node["width"] || "auto",
95
102
  title: node["title"],
96
- alt: node["alt"] }
103
+ alt: node["alt"] }
97
104
  out.img **attr_code(attrs)
98
105
  image_title_parse(out, caption)
99
106
  end
@@ -106,12 +113,27 @@ module IsoDoc::Function
106
113
 
107
114
  def text_parse(node, out)
108
115
  return if node.nil? || node.text.nil?
116
+
109
117
  text = node.to_s
110
- text = text.gsub("\n", "<br/>").gsub("<br/> ", "<br/>&nbsp;").
111
- gsub(/[ ](?=[ ])/, "&nbsp;") if in_sourcecode
118
+ if in_sourcecode
119
+ text = text.gsub("\n", "<br/>").gsub("<br/> ", "<br/>&nbsp;")
120
+ .gsub(/ (?= )/, "&nbsp;")
121
+ end
112
122
  out << text
113
123
  end
114
124
 
125
+ def add_parse(node, out)
126
+ out.span **{ class: "addition" } do |e|
127
+ node.children.each { |n| parse(n, e) }
128
+ end
129
+ end
130
+
131
+ def del_parse(node, out)
132
+ out.span **{ class: "deletion" } do |e|
133
+ node.children.each { |n| parse(n, e) }
134
+ end
135
+ end
136
+
115
137
  def error_parse(node, out)
116
138
  text = node.to_xml.gsub(/</, "&lt;").gsub(/>/, "&gt;")
117
139
  out.para do |p|
@@ -1,12 +1,12 @@
1
1
  module IsoDoc::Function
2
2
  module References
3
-
4
3
  # This is highly specific to ISO, but it's not a bad precedent for
5
4
  # references anyway; keeping here instead of in IsoDoc::Iso for now
6
- def docid_l10n(x)
7
- return x if x.nil?
8
- x.gsub(/All Parts/i, @i18n.all_parts.downcase) if @i18n.all_parts
9
- x
5
+ def docid_l10n(text)
6
+ return text if text.nil?
7
+
8
+ text.gsub(/All Parts/i, @i18n.all_parts.downcase) if @i18n.all_parts
9
+ text
10
10
  end
11
11
 
12
12
  # TODO generate formatted ref if not present
@@ -16,7 +16,7 @@ module IsoDoc::Function
16
16
  identifiers = render_identifier(ids)
17
17
  if biblio then ref_entry_code(ref, ordinal, identifiers, ids)
18
18
  else
19
- ref << "#{identifiers[0] || identifiers[1]}"
19
+ ref << (identifiers[0] || identifiers[1]).to_s
20
20
  ref << ", #{identifiers[1]}" if identifiers[0] && identifiers[1]
21
21
  end
22
22
  ref << ", " unless biblio && !identifiers[1]
@@ -29,7 +29,7 @@ module IsoDoc::Function
29
29
  identifiers = render_identifier(bibitem_ref_code(b))
30
30
  if biblio then ref_entry_code(ref, ordinal, identifiers, nil)
31
31
  else
32
- ref << "#{identifiers[0] || identifiers[1]}"
32
+ ref << (identifiers[0] || identifiers[1]).to_s
33
33
  ref << ", #{identifiers[1]}" if identifiers[0] && identifiers[1]
34
34
  end
35
35
  date_note_process(b, ref)
@@ -40,9 +40,9 @@ module IsoDoc::Function
40
40
 
41
41
  # if t is just a number, only use that ([1] Non-Standard)
42
42
  # else, use both ordinal, as prefix, and t
43
- def ref_entry_code(r, ordinal, t, id)
43
+ def ref_entry_code(r, ordinal, t, _id)
44
44
  prefix_bracketed_ref(r, t[0] || "[#{ordinal}]")
45
- t[1] and r << "#{t[1]}"
45
+ t[1] and r << (t[1]).to_s
46
46
  end
47
47
 
48
48
  def pref_ref_code(b)
@@ -55,27 +55,36 @@ module IsoDoc::Function
55
55
  id = b.at(ns("./docidentifier[@type = 'metanorma']"))
56
56
  id1 = pref_ref_code(b)
57
57
  id2 = b.at(ns("./docidentifier[@type = 'DOI' or @type = 'ISSN' or "\
58
- "@type = 'ISBN']"))
58
+ "@type = 'ISBN']"))
59
59
  return [id, id1, id2] if id || id1 || id2
60
+
60
61
  id = Nokogiri::XML::Node.new("docidentifier", b.document)
61
62
  id << "(NO ID)"
62
63
  [nil, id, nil]
63
64
  end
64
65
 
65
- def bracket_if_num(x)
66
- return nil if x.nil?
67
- x = x.text.sub(/^\[/, "").sub(/\]$/, "")
68
- return "[#{x}]" if /^\d+$/.match(x)
69
- x
66
+ def bracket_if_num(num)
67
+ return nil if num.nil?
68
+
69
+ num = num.text.sub(/^\[/, "").sub(/\]$/, "")
70
+ return "[#{num}]" if /^\d+$/.match?(num)
71
+
72
+ num
70
73
  end
71
74
 
72
75
  def render_identifier(id)
73
76
  [
74
77
  bracket_if_num(id[0]),
75
- id[1].nil? ? nil :
76
- docid_prefix(id[1]["type"], id[1].text.sub(/^\[/, "").sub(/\]$/, "")),
77
- id[2].nil? ? nil :
78
- docid_prefix(id[2]["type"], id[2].text.sub(/^\[/, "").sub(/\]$/, "")),
78
+ if id[1].nil?
79
+ nil
80
+ else
81
+ docid_prefix(id[1]["type"], id[1].text.sub(/^\[/, "").sub(/\]$/, ""))
82
+ end,
83
+ if id[2].nil?
84
+ nil
85
+ else
86
+ docid_prefix(id[2]["type"], id[2].text.sub(/^\[/, "").sub(/\]$/, ""))
87
+ end,
79
88
  ]
80
89
  end
81
90
 
@@ -87,12 +96,14 @@ module IsoDoc::Function
87
96
 
88
97
  def omit_docid_prefix(prefix)
89
98
  return true if prefix.nil? || prefix.empty?
90
- return %w(ISO IEC IEV ITU W3C csd metanorma rfc-anchor).include? prefix
99
+
100
+ %w(ISO IEC IEV ITU W3C csd metanorma rfc-anchor).include? prefix
91
101
  end
92
102
 
93
103
  def date_note_process(b, ref)
94
104
  date_note = b.at(ns("./note[@type = 'Unpublished-Status']"))
95
105
  return if date_note.nil?
106
+
96
107
  date_note.children.first.replace("<p>#{date_note.content}</p>")
97
108
  footnote_parse(date_note, ref)
98
109
  end
@@ -101,18 +112,17 @@ module IsoDoc::Function
101
112
  { id: b["id"], class: biblio ? "Biblio" : "NormRef" }
102
113
  end
103
114
 
104
- def iso_title(b)
105
- title = b.at(ns("./title[@language = '#{@lang}' and @type = 'main']")) ||
106
- b.at(ns("./title[@language = '#{@lang}']")) ||
107
- b.at(ns("./title[@type = 'main']")) ||
108
- b.at(ns("./title"))
109
- title
115
+ def iso_title(bib)
116
+ bib.at(ns("./title[@language = '#{@lang}' and @type = 'main']")) ||
117
+ bib.at(ns("./title[@language = '#{@lang}']")) ||
118
+ bib.at(ns("./title[@type = 'main']")) ||
119
+ bib.at(ns("./title"))
110
120
  end
111
121
 
112
122
  # reference not to be rendered because it is deemed implicit
113
123
  # in the standards environment
114
- def implicit_reference(b)
115
- b["hidden"] == "true"
124
+ def implicit_reference(bib)
125
+ bib["hidden"] == "true"
116
126
  end
117
127
 
118
128
  def prefix_bracketed_ref(ref, text)
@@ -120,35 +130,38 @@ module IsoDoc::Function
120
130
  insert_tab(ref, 1)
121
131
  end
122
132
 
123
- def reference_format(b, r)
124
- if ftitle = b.at(ns("./formattedref"))
133
+ def reference_format(bib, r)
134
+ if ftitle = bib.at(ns("./formattedref"))
125
135
  ftitle&.children&.each { |n| parse(n, r) }
126
136
  else
127
- title = iso_title(b)
137
+ title = iso_title(bib)
128
138
  r.i do |i|
129
139
  title&.children&.each { |n| parse(n, i) }
130
140
  end
131
141
  end
132
142
  end
133
143
 
134
- def is_standard(b)
144
+ def is_standard(bib)
135
145
  ret = false
136
- b.xpath(ns("./docidentifier")).each do |id|
146
+ bib.xpath(ns("./docidentifier")).each do |id|
137
147
  next if id["type"].nil? ||
138
148
  %w(metanorma DOI ISSN ISBN).include?(id["type"])
149
+
139
150
  ret = true
140
151
  end
141
152
  ret
142
153
  end
143
154
 
144
- def biblio_list(f, div, biblio)
155
+ def biblio_list(refs, div, biblio)
145
156
  i = 0
146
- f.children.each do |b|
157
+ refs.children.each do |b|
147
158
  if b.name == "bibitem"
148
159
  next if implicit_reference(b)
160
+
149
161
  i += 1
150
- (is_standard(b)) ? std_bibitem_entry(div, b, i, biblio) :
151
- nonstd_bibitem(div, b, i, biblio)
162
+ if is_standard(b) then std_bibitem_entry(div, b, i, biblio)
163
+ else nonstd_bibitem(div, b, i, biblio)
164
+ end
152
165
  else
153
166
  parse(b, div) unless %w(title).include? b.name
154
167
  end
@@ -174,7 +187,7 @@ module IsoDoc::Function
174
187
  num
175
188
  end
176
189
 
177
- def bibliography_xpath
190
+ def bibliography_xpath
178
191
  "//bibliography/clause[.//references]"\
179
192
  "[not(.//references[@normative = 'true'])] | "\
180
193
  "//bibliography/references[@normative = 'false']"
@@ -184,7 +197,7 @@ module IsoDoc::Function
184
197
  f = isoxml.at(ns(bibliography_xpath)) and f["hidden"] != "true" or return
185
198
  page_break(out)
186
199
  out.div do |div|
187
- div.h1 **{class: "Section3"} do |h1|
200
+ div.h1 **{ class: "Section3" } do |h1|
188
201
  f&.at(ns("./title"))&.children&.each { |c2| parse(c2, h1) }
189
202
  end
190
203
  biblio_list(f, div, true)
@@ -193,7 +206,6 @@ module IsoDoc::Function
193
206
 
194
207
  def bibliography_parse(node, out)
195
208
  node["hidden"] != true or return
196
- title = node&.at(ns("./title"))&.text || ""
197
209
  out.div do |div|
198
210
  clause_parse_title(node, div, node.at(ns("./title")), out,
199
211
  { class: "Section3" })
@@ -201,11 +213,12 @@ module IsoDoc::Function
201
213
  end
202
214
  end
203
215
 
204
- def format_ref(ref, prefix, isopub, date, allparts)
216
+ def format_ref(ref, prefix, _isopub, _date, _allparts)
205
217
  ref = docid_prefix(prefix, ref)
206
218
  return "[#{ref}]" if ref && /^\d+$/.match(ref) && !prefix &&
207
219
  !/^\[.*\]$/.match(ref)
208
- ref
220
+
221
+ ref
209
222
  end
210
223
  end
211
224
  end
@@ -8,11 +8,11 @@ module IsoDoc::Function
8
8
  insert_tab(out, 1)
9
9
  end
10
10
 
11
- def inline_header_title(out, node, title)
11
+ def inline_header_title(out, _node, title)
12
12
  out.span **{ class: "zzMoveToFollowing" } do |s|
13
13
  s.b do |b|
14
14
  title&.children&.each { |c2| parse(c2, b) }
15
- clausedelimspace(out) if /\S/.match(title&.text)
15
+ clausedelimspace(out) if /\S/.match?(title&.text)
16
16
  end
17
17
  end
18
18
  end
@@ -20,12 +20,14 @@ module IsoDoc::Function
20
20
  # used for subclauses
21
21
  def clause_parse_title(node, div, title, out, header_class = {})
22
22
  return if title.nil?
23
+
23
24
  if node["inline-header"] == "true"
24
25
  inline_header_title(out, node, title)
25
26
  else
26
- depth = (title && title["depth"]) ? title["depth"] :
27
- node.ancestors("clause, annex, terms, references, definitions, "\
28
- "acknowledgements, introduction, foreword").size + 1
27
+ depth = if title && title["depth"] then title["depth"]
28
+ else node.ancestors("clause, annex, terms, references, definitions, "\
29
+ "acknowledgements, introduction, foreword").size + 1
30
+ end
29
31
  div.send "h#{depth}", **attr_code(header_class) do |h|
30
32
  title&.children&.each { |c2| parse(c2, h) }
31
33
  end
@@ -49,8 +51,11 @@ module IsoDoc::Function
49
51
  def clause_name(_num, title, div, header_class)
50
52
  header_class = {} if header_class.nil?
51
53
  div.h1 **attr_code(header_class) do |h1|
52
- title.is_a?(String) ? h1 << title :
54
+ if title.is_a?(String)
55
+ h1 << title
56
+ else
53
57
  title&.children&.each { |c2| parse(c2, h1) }
58
+ end
54
59
  end
55
60
  div.parent.at(".//h1")
56
61
  end
@@ -66,8 +71,9 @@ module IsoDoc::Function
66
71
  end
67
72
  end
68
73
 
69
- def annex_name(annex, name, div)
74
+ def annex_name(_annex, name, div)
70
75
  return if name.nil?
76
+
71
77
  div.h1 **{ class: "Annex" } do |t|
72
78
  name.children.each { |c2| parse(c2, t) }
73
79
  end
@@ -144,7 +150,6 @@ module IsoDoc::Function
144
150
 
145
151
  def introduction(isoxml, out)
146
152
  f = isoxml.at(ns("//introduction")) || return
147
- title_attr = { class: "IntroTitle" }
148
153
  page_break(out)
149
154
  out.div **{ class: "Section3", id: f["id"] } do |div|
150
155
  clause_name(nil, f.at(ns("./title")), div, { class: "IntroTitle" })
@@ -160,7 +165,7 @@ module IsoDoc::Function
160
165
  out.div **attr_code(id: f["id"]) do |s|
161
166
  clause_name(nil, f.at(ns("./title")) || @i18n.foreword, s,
162
167
  { class: "ForewordTitle" })
163
- #s.h1(**{ class: "ForewordTitle" }) { |h1| h1 << @i18n.foreword }
168
+ # s.h1(**{ class: "ForewordTitle" }) { |h1| h1 << @i18n.foreword }
164
169
  f.elements.each { |e| parse(e, s) unless e.name == "title" }
165
170
  end
166
171
  end
@@ -187,12 +192,11 @@ module IsoDoc::Function
187
192
  end
188
193
 
189
194
  def preface(isoxml, out)
190
- title_attr = { class: "IntroTitle" }
191
195
  isoxml.xpath(ns("//preface/clause | //preface/references | "\
192
196
  "//preface/definitions | //preface/terms")).each do |f|
193
197
  page_break(out)
194
198
  out.div **{ class: "Section3", id: f["id"] } do |div|
195
- clause_name(nil, f&.at(ns("./title")), div, title_attr)
199
+ clause_name(nil, f&.at(ns("./title")), div, { class: "IntroTitle" })
196
200
  f.elements.each do |e|
197
201
  parse(e, div) unless e.name == "title"
198
202
  end
@@ -202,37 +206,46 @@ module IsoDoc::Function
202
206
 
203
207
  def is_clause?(name)
204
208
  %w(clause references definitions terms foreword introduction abstract
205
- acknowledgements).include? name
209
+ acknowledgements).include? name
206
210
  end
207
211
 
208
212
  def preface_block(isoxml, out)
209
213
  p = isoxml.at(ns("//preface")) or return
210
214
  p.elements.each do |e|
211
215
  next if is_clause?(e.name)
216
+
212
217
  parse(e, out)
213
218
  end
214
219
  end
215
220
 
216
221
  def copyright_parse(node, out)
217
- out.div **{class: "boilerplate-copyright"} do |div|
222
+ return if @bare
223
+
224
+ out.div **{ class: "boilerplate-copyright" } do |div|
218
225
  node.children.each { |n| parse(n, div) }
219
226
  end
220
227
  end
221
228
 
222
229
  def license_parse(node, out)
223
- out.div **{class: "boilerplate-license"} do |div|
230
+ return if @bare
231
+
232
+ out.div **{ class: "boilerplate-license" } do |div|
224
233
  node.children.each { |n| parse(n, div) }
225
234
  end
226
235
  end
227
236
 
228
237
  def legal_parse(node, out)
229
- out.div **{class: "boilerplate-legal"} do |div|
238
+ return if @bare
239
+
240
+ out.div **{ class: "boilerplate-legal" } do |div|
230
241
  node.children.each { |n| parse(n, div) }
231
242
  end
232
243
  end
233
244
 
234
245
  def feedback_parse(node, out)
235
- out.div **{class: "boilerplate-feedback"} do |div|
246
+ return if @bare
247
+
248
+ out.div **{ class: "boilerplate-feedback" } do |div|
236
249
  node.children.each { |n| parse(n, div) }
237
250
  end
238
251
  end