isodoc 2.12.1 → 2.12.3

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/isodoc.gemspec +1 -1
  3. data/lib/isodoc/convert.rb +0 -21
  4. data/lib/isodoc/function/blocks.rb +8 -8
  5. data/lib/isodoc/function/blocks_example_note.rb +46 -23
  6. data/lib/isodoc/function/inline.rb +31 -8
  7. data/lib/isodoc/function/lists.rb +4 -4
  8. data/lib/isodoc/function/references.rb +5 -5
  9. data/lib/isodoc/function/reqt.rb +2 -2
  10. data/lib/isodoc/function/section.rb +25 -25
  11. data/lib/isodoc/function/section_titles.rb +15 -12
  12. data/lib/isodoc/function/table.rb +1 -1
  13. data/lib/isodoc/function/terms.rb +17 -14
  14. data/lib/isodoc/function/to_word_html.rb +5 -0
  15. data/lib/isodoc/html_function/footnotes.rb +2 -1
  16. data/lib/isodoc/html_function/html.rb +1 -5
  17. data/lib/isodoc/init.rb +14 -4
  18. data/lib/isodoc/metadata.rb +9 -0
  19. data/lib/isodoc/metadata_contributor.rb +1 -1
  20. data/lib/isodoc/metadata_date.rb +1 -1
  21. data/lib/isodoc/presentation_function/autonum.rb +139 -0
  22. data/lib/isodoc/presentation_function/block.rb +48 -39
  23. data/lib/isodoc/presentation_function/docid.rb +0 -23
  24. data/lib/isodoc/presentation_function/erefs.rb +4 -2
  25. data/lib/isodoc/presentation_function/image.rb +21 -5
  26. data/lib/isodoc/presentation_function/inline.rb +1 -1
  27. data/lib/isodoc/presentation_function/reqt.rb +1 -1
  28. data/lib/isodoc/presentation_function/section.rb +46 -118
  29. data/lib/isodoc/presentation_function/sourcecode.rb +7 -4
  30. data/lib/isodoc/presentation_function/terms.rb +3 -4
  31. data/lib/isodoc/presentation_function/title.rb +107 -0
  32. data/lib/isodoc/presentation_function/xrefs.rb +17 -10
  33. data/lib/isodoc/presentation_xml_convert.rb +2 -1
  34. data/lib/isodoc/version.rb +1 -1
  35. data/lib/isodoc/word_function/body.rb +7 -35
  36. data/lib/isodoc/word_function/footnotes.rb +1 -1
  37. data/lib/isodoc/word_function/lists.rb +12 -10
  38. data/lib/isodoc/word_function/postprocess_cover.rb +0 -2
  39. data/lib/isodoc/word_function/postprocess_table.rb +1 -1
  40. data/lib/isodoc/word_function/postprocess_toc.rb +1 -1
  41. data/lib/isodoc/word_function/table.rb +2 -2
  42. data/lib/isodoc/xref/xref_anchor.rb +31 -16
  43. data/lib/isodoc/xref/xref_counter_types.rb +3 -2
  44. data/lib/isodoc/xref/xref_gen.rb +57 -33
  45. data/lib/isodoc/xref/xref_gen_seq.rb +145 -56
  46. data/lib/isodoc/xref/xref_sect_gen.rb +60 -28
  47. data/lib/isodoc/xref/xref_util.rb +43 -1
  48. data/lib/isodoc/xref.rb +3 -0
  49. data/lib/isodoc-yaml/i18n-ar.yaml +9 -9
  50. data/lib/isodoc-yaml/i18n-de.yaml +9 -9
  51. data/lib/isodoc-yaml/i18n-en.yaml +9 -9
  52. data/lib/isodoc-yaml/i18n-es.yaml +9 -9
  53. data/lib/isodoc-yaml/i18n-fr.yaml +9 -9
  54. data/lib/isodoc-yaml/i18n-ja.yaml +10 -10
  55. data/lib/isodoc-yaml/i18n-ru.yaml +9 -9
  56. data/lib/isodoc-yaml/i18n-zh-Hans.yaml +9 -9
  57. data/lib/nokogiri/xml/node.rb +1 -0
  58. metadata +6 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1936cca0c61f789903af805b809d73c8dbae298e4bc6569c533274dbf5d8eac5
4
- data.tar.gz: 3bc62ddb747526969bf2c36d10ffab8e0b0008e827ee7b6634f566c925d5db8c
3
+ metadata.gz: 30063a7d69417bee799a6e513cb30a21d9c9cf88cdbb80a363bef79c838f67d5
4
+ data.tar.gz: fa0af3cd1ab696ce85149f0887f06e69c8d1190a902bd67891979cb6a53ee93e
5
5
  SHA512:
6
- metadata.gz: a3f526f015973c666f70749ee97708d992c455d9d0d8273cb8389f73090a9926f66cdb616d1d2b13f2737ab53248103674cf34bec46ab5cff42f3bd678bb43b9
7
- data.tar.gz: cf3c0a4afbc963c4ab579bf36ab252030f882f794b8b27e734b58f8e8d4c99a6e9b40b283e8dd1d089cb1b9d16aeb9d47e3040cbfb84014e2f60a1a4150b4c15
6
+ metadata.gz: '0282678a13b6a8027c563c441d2b2bf17e71cef27db296a8f227bdbc09b9996ca1458a61d3e972d6f6327ba65995ce4c1af094cc25c19c9c430ba42726ba4d76'
7
+ data.tar.gz: 91e15265573da4a24b6b4e04081ffe220ac1c5d48fe498b506c7f9d52d743cbc8a82ec230e77afae34becea0f8fced0801ccb6da6b1540ea9aca8705b4759e3b
data/isodoc.gemspec CHANGED
@@ -37,7 +37,7 @@ Gem::Specification.new do |spec|
37
37
  spec.add_dependency "mn2pdf", ">= 2.08"
38
38
  spec.add_dependency "mn-requirements", "~> 0.4.0"
39
39
 
40
- spec.add_dependency "relaton-render", "~> 0.7.1"
40
+ spec.add_dependency "relaton-render", "~> 0.8.0"
41
41
  spec.add_dependency "roman-numerals"
42
42
  spec.add_dependency "rouge", "~> 4.0"
43
43
  spec.add_dependency "thread_safe"
@@ -115,31 +115,10 @@ module IsoDoc
115
115
  metadata_init(@lang, @script, @locale, @i18n)
116
116
  xref_init(@lang, @script, self, @i18n,
117
117
  { locale: @locale, bibrender: @bibrender })
118
- docxml = preprocess_xslt(docxml)
119
118
  toc_init(docxml)
120
119
  [docxml, filename, dir]
121
120
  end
122
121
 
123
- def preprocess_xslt(docxml)
124
- sheets = extract_preprocess_xslt(docxml)
125
- sheets.each do |x|
126
- docxml = Nokogiri::XSLT(x).transform(docxml)
127
- end
128
- docxml
129
- rescue ::Error => e
130
- require "debug"
131
- binding.b
132
- end
133
-
134
- def extract_preprocess_xslt(docxml)
135
- docxml.xpath(ns("//metanorma-extension/render/preprocess-xslt"))
136
- .each_with_object([]) do |x, m|
137
- formats = x["format"]&.split(",") || []
138
- !formats.empty? && !formats.include?(@format.to_s) and next
139
- m << x.children.to_xml
140
- end
141
- end
142
-
143
122
  def convert_i18n_init(docxml)
144
123
  convert_i18n_init1(docxml)
145
124
  i18n_init(@lang, @script, @locale)
@@ -25,9 +25,9 @@ module IsoDoc
25
25
  def figure_parse1(node, out)
26
26
  out.div **figure_attrs(node) do |div|
27
27
  node.children.each do |n|
28
- parse(n, div) unless n.name == "name"
28
+ parse(n, div) unless n.name == "fmt-name"
29
29
  end
30
- figure_name_parse(node, div, node.at(ns("./name")))
30
+ figure_name_parse(node, div, node.at(ns("./fmt-name")))
31
31
  end
32
32
  end
33
33
 
@@ -37,9 +37,9 @@ module IsoDoc
37
37
 
38
38
  def pseudocode_parse(node, out)
39
39
  @in_figure = true
40
- name = node.at(ns("./name"))
40
+ name = node.at(ns("./fmt-name"))
41
41
  out.div **pseudocode_attrs(node) do |div|
42
- node.children.each { |n| parse(n, div) unless n.name == "name" }
42
+ node.children.each { |n| parse(n, div) unless n.name == "fmt-name" }
43
43
  sourcecode_name_parse(node, div, name)
44
44
  end
45
45
  @in_figure = false
@@ -57,7 +57,7 @@ module IsoDoc
57
57
  end
58
58
 
59
59
  def sourcecode_parse(node, out)
60
- name = node.at(ns("./name"))
60
+ name = node.at(ns("./fmt-name"))
61
61
  out.p **sourcecode_attrs(node) do |div|
62
62
  sourcecode_parse1(node, div)
63
63
  end
@@ -71,7 +71,7 @@ module IsoDoc
71
71
  node.at("./ancestor::xmlns:table[@class = 'rouge-line-table']") and
72
72
  @sourcecode = "table"
73
73
  node.children.each do |n|
74
- %w(name dl).include?(n.name) and next
74
+ %w(fmt-name dl).include?(n.name) and next
75
75
  parse(n, div)
76
76
  end
77
77
  @sourcecode = false
@@ -93,7 +93,7 @@ module IsoDoc
93
93
  out.div **attr_code(class: "formula") do |div|
94
94
  div.p do |_p|
95
95
  parse(node.at(ns("./stem")), div)
96
- if lbl = node&.at(ns("./name"))&.text
96
+ if lbl = node&.at(ns("./fmt-name"))&.text
97
97
  insert_tab(div, 1)
98
98
  div << lbl
99
99
  end
@@ -109,7 +109,7 @@ module IsoDoc
109
109
  out.div **formula_attrs(node) do |div|
110
110
  formula_parse1(node, div)
111
111
  node.children.each do |n|
112
- %w(stem name).include? n.name and next
112
+ %w(stem fmt-name).include? n.name and next
113
113
  parse(n, div)
114
114
  end
115
115
  end
@@ -19,9 +19,9 @@ module IsoDoc
19
19
  # used if we are boxing examples
20
20
  def example_div_parse(node, out)
21
21
  out.div **example_div_attr(node) do |div|
22
- example_label(node, div, node.at(ns("./name")))
22
+ example_label(node, div, node.at(ns("./fmt-name")))
23
23
  node.children.each do |n|
24
- parse(n, div) unless n.name == "name"
24
+ parse(n, div) unless n.name == "fmt-name"
25
25
  end
26
26
  end
27
27
  end
@@ -39,10 +39,12 @@ module IsoDoc
39
39
  out.table **example_table_attr(node) do |t|
40
40
  t.tr do |tr|
41
41
  tr.td **EXAMPLE_TBL_ATTR do |td|
42
- example_label(node, td, node.at(ns("./name")))
42
+ example_label(node, td, node.at(ns("./fmt-name")))
43
43
  end
44
44
  tr.td **EXAMPLE_TD_ATTR do |td|
45
- node.children.each { |n| parse(n, td) unless n.name == "name" }
45
+ node.children.each do |n|
46
+ parse(n, td) unless n.name == "fmt-name"
47
+ end
46
48
  end
47
49
  end
48
50
  end
@@ -52,26 +54,45 @@ module IsoDoc
52
54
  example_div_parse(node, out)
53
55
  end
54
56
 
57
+ def block_body_first_elem(node)
58
+ node.elements.each do |n|
59
+ %w(title fmt-title fmt-xref-label fmt-name name)
60
+ .include?(n.name) and next
61
+ return n
62
+ end
63
+ nil
64
+ end
65
+
66
+ def starts_with_para?(node)
67
+ block_body_first_elem(node)&.name == "p"
68
+ end
69
+
70
+ def note_p_class
71
+ nil
72
+ end
73
+
55
74
  def note_p_parse(node, div)
56
- name = node.at(ns("./name"))&.remove
57
- div.p do |p|
75
+ name = node.at(ns("./fmt-name"))
76
+ para = node.at(ns("./p"))
77
+ div.p **attr_code(class: note_p_class) do |p|
58
78
  name and p.span class: "note_label" do |s|
59
79
  name.children.each { |n| parse(n, s) }
60
80
  end
61
- insert_tab(p, 1)
62
- node.first_element_child.children.each { |n| parse(n, p) }
81
+ #insert_tab(p, 1) # TODO to Presentation XML
82
+ children_parse(para, p)
63
83
  end
64
- node.element_children[1..].each { |n| parse(n, div) }
84
+ para.xpath("./following-sibling::*").each { |n| parse(n, div) }
65
85
  end
66
86
 
67
87
  def note_parse1(node, div)
68
- name = node.at(ns("./name")) and div.p do |p|
69
- p.span class: "note_label" do |s|
70
- name.remove.children.each { |n| parse(n, s) }
88
+ name = node.at(ns("./fmt-name")) and
89
+ div.p **attr_code(class: note_p_class) do |p|
90
+ p.span class: "note_label" do |s|
91
+ name.remove.children.each { |n| parse(n, s) }
92
+ end
93
+ #insert_tab(p, 1) # TODO to Presentation XML
71
94
  end
72
- insert_tab(p, 1)
73
- end
74
- node.children.each { |n| parse(n, div) }
95
+ children_parse(node, div)
75
96
  end
76
97
 
77
98
  def keep_style(node)
@@ -94,7 +115,7 @@ module IsoDoc
94
115
  def note_parse(node, out)
95
116
  @note = true
96
117
  out.div **note_attrs(node) do |div|
97
- if node&.at(ns("./*[local-name() != 'name'][1]"))&.name == "p"
118
+ if starts_with_para?(node)
98
119
  note_p_parse(node, div)
99
120
  else
100
121
  note_parse1(node, div)
@@ -105,7 +126,7 @@ module IsoDoc
105
126
 
106
127
  def admonition_name_parse(_node, div, name)
107
128
  div.p class: "AdmonitionTitle", style: "text-align:center;" do |p|
108
- name.children.each { |n| parse(n, p) }
129
+ children_parse(name, p)
109
130
  end
110
131
  end
111
132
 
@@ -114,7 +135,7 @@ module IsoDoc
114
135
  end
115
136
 
116
137
  def admonition_name(node, _type)
117
- node&.at(ns("./name"))
138
+ node&.at(ns("./fmt-name"))
118
139
  end
119
140
 
120
141
  def admonition_attrs(node)
@@ -124,7 +145,7 @@ module IsoDoc
124
145
 
125
146
  def admonition_parse(node, out)
126
147
  out.div **admonition_attrs(node) do |div|
127
- if node&.at(ns("./*[local-name() != 'name'][1]"))&.name == "p"
148
+ if starts_with_para?(node)
128
149
  admonition_p_parse(node, div)
129
150
  else
130
151
  admonition_parse1(node, div)
@@ -139,14 +160,16 @@ module IsoDoc
139
160
 
140
161
  # code to allow name and first paragraph to be rendered in same block
141
162
  def admonition_name_in_first_para(node, div)
163
+ name = node.at(ns("./fmt-name"))
164
+ para = node.at(ns("./p"))
142
165
  div.p do |p|
143
166
  if name = admonition_name(node, node["type"])&.remove
144
167
  name.children.each { |n| parse(n, p) }
145
- admonition_name_para_delim(p)
168
+ admonition_name_para_delim(p) # TODO to Presentation XML
146
169
  end
147
- node.first_element_child.children.each { |n| parse(n, p) }
170
+ para.children.each { |n| parse(n, p) }
148
171
  end
149
- node.element_children[1..].each { |n| parse(n, div) }
172
+ para.xpath("./following-sibling::*").each { |n| parse(n, div) }
150
173
  end
151
174
 
152
175
  def admonition_name_para_delim(para)
@@ -158,7 +181,7 @@ module IsoDoc
158
181
  if name
159
182
  admonition_name_parse(node, div, name)
160
183
  end
161
- node.children.each { |n| parse(n, div) unless n.name == "name" }
184
+ node.children.each { |n| parse(n, div) unless n.name == "fmt-name" }
162
185
  end
163
186
  end
164
187
  end
@@ -17,13 +17,20 @@ module IsoDoc
17
17
 
18
18
  def location_parse(node, out); end
19
19
 
20
+ # Presentation XML classes which we need not pass on to HTML or DOC
21
+ SPAN_UNWRAP_CLASSES =
22
+ %w[fmt-caption-label fmt-label-delim fmt-caption-delim fmt-autonum-delim
23
+ fmt-element-name fmt-conn fmt-comma fmt-enum-comma fmt-obligation
24
+ fmt-xref-container].freeze
25
+
20
26
  def span_parse(node, out)
21
- if node["style"] || node["class"]
27
+ klass = node["style"] || node["class"]
28
+ if klass && !SPAN_UNWRAP_CLASSES.include?(klass)
22
29
  out.span **attr_code(style: node["style"],
23
30
  class: node["class"]) do |s|
24
- node.children.each { |n| parse(n, s) }
31
+ children_parse(node, s)
25
32
  end
26
- else node.children.each { |n| parse(n, out) }
33
+ else children_parse(node, out)
27
34
  end
28
35
  end
29
36
 
@@ -48,9 +55,8 @@ module IsoDoc
48
55
  end
49
56
 
50
57
  def suffix_url(url)
51
- return url if url.nil? || %r{^https?://|^#}.match?(url)
52
- return url unless File.extname(url).empty?
53
-
58
+ url.nil? || %r{^https?://|^#}.match?(url) and return url
59
+ File.extname(url).empty? or return url
54
60
  url.sub(/#{File.extname(url)}$/, ".html")
55
61
  end
56
62
 
@@ -136,8 +142,7 @@ module IsoDoc
136
142
  end
137
143
 
138
144
  def text_parse(node, out)
139
- return if node.nil? || node.text.nil?
140
-
145
+ node.nil? || node.text.nil? and return
141
146
  text = node.to_s
142
147
  @sourcecode == "pre" and
143
148
  text = text.gsub("\n", "<br/>").gsub("<br/> ", "<br/>&#xa0;")
@@ -184,8 +189,26 @@ module IsoDoc
184
189
  end
185
190
 
186
191
  def author_parse(node, out)
192
+ children_parse(node, out)
193
+ end
194
+
195
+ def semx_parse(node, out)
196
+ children_parse(node, out)
197
+ end
198
+
199
+ def children_parse(node, out)
187
200
  node.children.each { |n| parse(n, out) }
188
201
  end
202
+
203
+ def xref_label_parse(node, out); end
204
+
205
+ def name_parse(node, out); end
206
+
207
+ def floating_title_parse(node, out); end
208
+
209
+ def fmt_name_parse(node, out)
210
+ children_parse(node, out)
211
+ end
189
212
  end
190
213
  end
191
214
  end
@@ -2,7 +2,7 @@ module IsoDoc
2
2
  module Function
3
3
  module Lists
4
4
  def list_title_parse(node, out)
5
- name = node.at(ns("./name")) or return
5
+ name = node.at(ns("./fmt-name")) or return
6
6
  out.p class: "ListTitle" do |p|
7
7
  name.children&.each { |n| parse(n, p) }
8
8
  end
@@ -16,7 +16,7 @@ module IsoDoc
16
16
  out.div **attr_code(class: "ul_wrap") do |div|
17
17
  list_title_parse(node, div)
18
18
  div.ul **attr_code(ul_attrs(node)) do |ul|
19
- node.children.each { |n| n.name == "name" or parse(n, ul) }
19
+ node.children.each { |n| n.name == "fmt-name" or parse(n, ul) }
20
20
  end
21
21
  end
22
22
  end
@@ -57,7 +57,7 @@ module IsoDoc
57
57
  out.div **attr_code(class: "ol_wrap") do |div|
58
58
  list_title_parse(node, div)
59
59
  div.ol **attr_code(ol_attrs(node)) do |ol|
60
- node.children.each { |n| n.name == "name" or parse(n, ol) }
60
+ node.children.each { |n| n.name == "fmt-name" or parse(n, ol) }
61
61
  end
62
62
  end
63
63
  end
@@ -106,7 +106,7 @@ module IsoDoc
106
106
  end
107
107
 
108
108
  def dl_parse_notes(node, out)
109
- node.elements.reject { |n| dt_dd?(n) || n.name == "name" }
109
+ node.elements.reject { |n| dt_dd?(n) || n.name == "fmt-name" }
110
110
  .each { |n| parse(n, out) }
111
111
  end
112
112
 
@@ -26,7 +26,7 @@ module IsoDoc
26
26
  i += 1
27
27
  bibitem_entry(div, b, i, biblio)
28
28
  else
29
- parse(b, div) unless %w(title).include? b.name
29
+ parse(b, div) unless %w(fmt-title).include? b.name
30
30
  end
31
31
  end
32
32
  end
@@ -41,9 +41,9 @@ module IsoDoc
41
41
  def norm_ref(node, out)
42
42
  node["hidden"] != "true" or return
43
43
  out.div do |div|
44
- clause_name(node, node.at(ns("./title")), div, nil)
44
+ clause_name(node, node.at(ns("./fmt-title")), div, nil)
45
45
  if node.name == "clause"
46
- node.elements.each { |e| parse(e, div) unless e.name == "title" }
46
+ node.elements.each { |e| parse(e, div) unless e.name == "fmt-title" }
47
47
  else biblio_list(node, div, false)
48
48
  end
49
49
  end
@@ -60,7 +60,7 @@ module IsoDoc
60
60
  page_break(out)
61
61
  out.div do |div|
62
62
  div.h1 class: "Section3" do |h1|
63
- node.at(ns("./title"))&.children&.each { |c2| parse(c2, h1) }
63
+ node.at(ns("./fmt-title"))&.children&.each { |c2| parse(c2, h1) }
64
64
  end
65
65
  biblio_list(node, div, true)
66
66
  end
@@ -69,7 +69,7 @@ module IsoDoc
69
69
  def bibliography_parse(node, out)
70
70
  node["hidden"] != true or return
71
71
  out.div do |div|
72
- clause_parse_title(node, div, node.at(ns("./title")), out,
72
+ clause_parse_title(node, div, node.at(ns("./fmt-title")), out,
73
73
  { class: "Section3" })
74
74
  biblio_list(node, div, true)
75
75
  end
@@ -20,9 +20,9 @@ module IsoDoc
20
20
  end
21
21
 
22
22
  def recommendation_parse1(node, out)
23
- recommendation_name(node.at(ns("./name")), out)
23
+ recommendation_name(node.at(ns("./fmt-name")), out)
24
24
  node.children.each do |n|
25
- parse(n, out) unless n.name == "name"
25
+ parse(n, out) unless n.name == "fmt-name"
26
26
  end
27
27
  end
28
28
 
@@ -10,8 +10,8 @@ module IsoDoc
10
10
  # used for subclauses
11
11
  def clause_parse(node, out)
12
12
  out.div **attr_code(clause_attrs(node)) do |div|
13
- clause_parse_title(node, div, node.at(ns("./title")), out)
14
- node.children.reject { |c1| c1.name == "title" }.each do |c1|
13
+ clause_parse_title(node, div, node.at(ns("./fmt-title")), out)
14
+ node.children.reject { |c1| c1.name == "fmt-title" }.each do |c1|
15
15
  parse(c1, div)
16
16
  end
17
17
  end
@@ -19,8 +19,8 @@ module IsoDoc
19
19
 
20
20
  def clause(node, out)
21
21
  out.div **attr_code(clause_attrs(node)) do |s|
22
- clause_name(node, node.at(ns("./title")), s, nil)
23
- node.elements.reject { |c1| c1.name == "title" }.each do |c1|
22
+ clause_name(node, node.at(ns("./fmt-title")), s, nil)
23
+ node.elements.reject { |c1| c1.name == "fmt-title" }.each do |c1|
24
24
  parse(c1, s)
25
25
  end
26
26
  end
@@ -34,7 +34,7 @@ module IsoDoc
34
34
  page_break(out)
35
35
  out.div **attr_code(annex_attrs(node)) do |s|
36
36
  node.elements.each do |c1|
37
- if c1.name == "title" then annex_name(node, c1, s)
37
+ if c1.name == "fmt-title" then annex_name(node, c1, s)
38
38
  else parse(c1, s)
39
39
  end
40
40
  end
@@ -47,9 +47,9 @@ module IsoDoc
47
47
 
48
48
  def scope(node, out)
49
49
  out.div **attr_code(id: node["id"]) do |div|
50
- clause_name(node, node.at(ns("./title")), div, nil)
50
+ clause_name(node, node.at(ns("./fmt-title")), div, nil)
51
51
  node.elements.each do |e|
52
- parse(e, div) unless e.name == "title"
52
+ parse(e, div) unless e.name == "fmt-title"
53
53
  end
54
54
  end
55
55
  end
@@ -59,9 +59,9 @@ module IsoDoc
59
59
 
60
60
  def terms_defs(node, out)
61
61
  out.div **attr_code(id: node["id"]) do |div|
62
- clause_name(node, node.at(ns("./title")), div, nil)
62
+ clause_name(node, node.at(ns("./fmt-title")), div, nil)
63
63
  node.elements.each do |e|
64
- parse(e, div) unless %w{title source}.include? e.name
64
+ parse(e, div) unless %w{fmt-title source}.include? e.name
65
65
  end
66
66
  end
67
67
  end
@@ -73,9 +73,9 @@ module IsoDoc
73
73
 
74
74
  def symbols_abbrevs(node, out)
75
75
  out.div **attr_code(id: node["id"], class: "Symbols") do |div|
76
- clause_name(node, node.at(ns("./title")), div, nil)
76
+ clause_name(node, node.at(ns("./fmt-title")), div, nil)
77
77
  node.elements.each do |e|
78
- parse(e, div) unless e.name == "title"
78
+ parse(e, div) unless e.name == "fmt-title"
79
79
  end
80
80
  end
81
81
  end
@@ -88,10 +88,10 @@ module IsoDoc
88
88
  def introduction(clause, out)
89
89
  page_break(out)
90
90
  out.div class: "Section3", id: clause["id"] do |div|
91
- clause_name(clause, clause.at(ns("./title")), div,
91
+ clause_name(clause, clause.at(ns("./fmt-title")), div,
92
92
  { class: "IntroTitle" })
93
93
  clause.elements.each do |e|
94
- parse(e, div) unless e.name == "title"
94
+ parse(e, div) unless e.name == "fmt-title"
95
95
  end
96
96
  end
97
97
  end
@@ -99,9 +99,9 @@ module IsoDoc
99
99
  def foreword(clause, out)
100
100
  page_break(out)
101
101
  out.div **attr_code(id: clause["id"]) do |s|
102
- clause_name(clause, clause.at(ns("./title")), s,
102
+ clause_name(clause, clause.at(ns("./fmt-title")), s,
103
103
  { class: "ForewordTitle" })
104
- clause.elements.each { |e| parse(e, s) unless e.name == "title" }
104
+ clause.elements.each { |e| parse(e, s) unless e.name == "fmt-title" }
105
105
  end
106
106
  end
107
107
 
@@ -109,9 +109,9 @@ module IsoDoc
109
109
  title_attr = { class: "IntroTitle" }
110
110
  page_break(out)
111
111
  out.div class: "Section3", id: clause["id"] do |div|
112
- clause_name(clause, clause.at(ns("./title")), div, title_attr)
112
+ clause_name(clause, clause.at(ns("./fmt-title")), div, title_attr)
113
113
  clause.elements.each do |e|
114
- parse(e, div) unless e.name == "title"
114
+ parse(e, div) unless e.name == "fmt-title"
115
115
  end
116
116
  end
117
117
  end
@@ -119,9 +119,9 @@ module IsoDoc
119
119
  def abstract(clause, out)
120
120
  page_break(out)
121
121
  out.div **attr_code(id: clause["id"]) do |s|
122
- clause_name(clause, clause.at(ns("./title")), s,
122
+ clause_name(clause, clause.at(ns("./fmt-title")), s,
123
123
  { class: "AbstractTitle" })
124
- clause.elements.each { |e| parse(e, s) unless e.name == "title" }
124
+ clause.elements.each { |e| parse(e, s) unless e.name == "fmt-title" }
125
125
  end
126
126
  end
127
127
 
@@ -141,10 +141,10 @@ module IsoDoc
141
141
  def preface_normal(clause, out)
142
142
  page_break(out)
143
143
  out.div **attr_code(preface_attrs(clause)) do |div|
144
- clause_name(clause, clause.at(ns("./title")), div,
144
+ clause_name(clause, clause.at(ns("./fmt-title")), div,
145
145
  { class: "IntroTitle" })
146
146
  clause.elements.each do |e|
147
- parse(e, div) unless e.name == "title"
147
+ parse(e, div) unless e.name == "fmt-title"
148
148
  end
149
149
  end
150
150
  end
@@ -153,10 +153,10 @@ module IsoDoc
153
153
  @bare and return
154
154
  page_break(out)
155
155
  out.div **attr_code(preface_attrs(clause)) do |div|
156
- clause_name(clause, clause.at(ns("./title")), div,
156
+ clause_name(clause, clause.at(ns("./fmt-title")), div,
157
157
  { class: "IntroTitle" })
158
158
  clause.elements.each do |e|
159
- parse(e, div) unless e.name == "title"
159
+ parse(e, div) unless e.name == "fmt-title"
160
160
  end
161
161
  end
162
162
  end
@@ -165,10 +165,10 @@ module IsoDoc
165
165
  @seen_colophon or page_break(out)
166
166
  @seen_colophon = true
167
167
  out.div class: "Section3", id: node["id"] do |div|
168
- clause_name(node, node.at(ns("./title")), div,
168
+ clause_name(node, node.at(ns("./fmt-title")), div,
169
169
  { class: "IntroTitle" })
170
170
  node.elements.each do |e|
171
- parse(e, div) unless e.name == "title"
171
+ parse(e, div) unless e.name == "fmt-title"
172
172
  end
173
173
  end
174
174
  end
@@ -18,18 +18,24 @@ module IsoDoc
18
18
  end
19
19
  end
20
20
 
21
+ def sections_names
22
+ %w[clause annex terms references definitions
23
+ acknowledgements introduction abstract foreword appendix]
24
+ end
25
+
21
26
  def freestanding_title(node, out)
22
- parents = node.ancestors("clause, annex, terms, references, " \
23
- "definitions, acknowledgements, introduction, " \
24
- "foreword")
27
+ # node.parent.at(ns("./fmt-title[@source = '#{node['id']}']")) and
28
+ # return # this title is already being rendered as fmt-title
29
+ # For testing convenience, let's just go by parent
30
+ sections_names.include?(node.parent.name) and return
31
+ parents = node.ancestors(sections_names.join(", "))
25
32
  clause_parse_title(parents.empty? ? node : parents.first,
26
33
  out, node, out)
27
34
  end
28
35
 
29
36
  # used for subclauses
30
37
  def clause_parse_title(node, div, title, out, header_class = {})
31
- return if title.nil?
32
-
38
+ title.nil? and return
33
39
  if node["inline-header"] == "true"
34
40
  inline_header_title(out, node, title)
35
41
  else
@@ -46,9 +52,7 @@ module IsoDoc
46
52
  end
47
53
 
48
54
  def clause_title_depth(node, title)
49
- depth = node.ancestors("clause, annex, terms, references, " \
50
- "definitions, acknowledgements, introduction, " \
51
- "foreword").size + 1
55
+ depth = node.ancestors(sections_names.join(", ")).size + 1
52
56
  depth = title["depth"] if title && title["depth"]
53
57
  depth
54
58
  end
@@ -67,8 +71,8 @@ module IsoDoc
67
71
  header_class = {} if header_class.nil?
68
72
  div.h1 **attr_code(header_class) do |h1|
69
73
  if title.is_a?(String) then h1 << title
70
- else
71
- title&.children&.each { |c2| parse(c2, h1) }
74
+ elsif title
75
+ children_parse(title, h1)
72
76
  clause_parse_subtitle(title, h1)
73
77
  end
74
78
  end
@@ -76,8 +80,7 @@ module IsoDoc
76
80
  end
77
81
 
78
82
  def annex_name(_annex, name, div)
79
- return if name.nil?
80
-
83
+ name.nil? and return
81
84
  div.h1 class: "Annex" do |t|
82
85
  name.children.each { |c2| parse(c2, t) }
83
86
  clause_parse_subtitle(name, t)
@@ -2,7 +2,7 @@ module IsoDoc
2
2
  module Function
3
3
  module Table
4
4
  def table_title_parse(node, out)
5
- name = node.at(ns("./name")) or return
5
+ name = node.at(ns("./fmt-name")) or return
6
6
  out.p class: "TableTitle", style: "text-align:center;" do |p|
7
7
  name&.children&.each { |n| parse(n, p) }
8
8
  end