metanorma-ogc 1.0.2 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +10 -10
  3. data/.github/workflows/ubuntu.yml +25 -11
  4. data/.github/workflows/windows.yml +11 -12
  5. data/README.adoc +3 -2
  6. data/lib/asciidoctor/ogc/biblio.rng +131 -46
  7. data/lib/asciidoctor/ogc/boilerplate.xml +33 -50
  8. data/lib/asciidoctor/ogc/converter.rb +6 -10
  9. data/lib/asciidoctor/ogc/front.rb +10 -5
  10. data/lib/asciidoctor/ogc/isodoc.rng +37 -4
  11. data/lib/asciidoctor/ogc/ogc.rng +0 -4
  12. data/lib/asciidoctor/ogc/validate.rb +12 -10
  13. data/lib/isodoc/ogc/base_convert.rb +12 -107
  14. data/lib/isodoc/ogc/biblio.rb +13 -2
  15. data/lib/isodoc/ogc/html/html_ogc_titlepage.html +9 -8
  16. data/lib/isodoc/ogc/html/htmlstyle.scss +44 -13
  17. data/lib/isodoc/ogc/html/scripts.html +14 -27
  18. data/lib/isodoc/ogc/html/word_ogc_titlepage.html +13 -4
  19. data/lib/isodoc/ogc/i18n-en.yaml +3 -0
  20. data/lib/isodoc/ogc/metadata.rb +1 -23
  21. data/lib/isodoc/ogc/ogc.abstract-specification-topic.xsl +3225 -0
  22. data/lib/isodoc/ogc/ogc.best-practice.xsl +3225 -0
  23. data/lib/isodoc/ogc/ogc.change-request-supporting-document.xsl +3225 -0
  24. data/lib/isodoc/ogc/ogc.community-practice.xsl +3225 -0
  25. data/lib/isodoc/ogc/ogc.community-standard.xsl +3225 -0
  26. data/lib/isodoc/ogc/ogc.discussion-paper.xsl +3225 -0
  27. data/lib/isodoc/ogc/ogc.engineering-report.xsl +3225 -0
  28. data/lib/isodoc/ogc/ogc.other.xsl +3225 -0
  29. data/lib/isodoc/ogc/ogc.policy.xsl +3225 -0
  30. data/lib/isodoc/ogc/ogc.reference-model.xsl +3225 -0
  31. data/lib/isodoc/ogc/ogc.release-notes.xsl +3225 -0
  32. data/lib/isodoc/ogc/ogc.standard.xsl +3225 -0
  33. data/lib/isodoc/ogc/ogc.test-suite.xsl +3225 -0
  34. data/lib/isodoc/ogc/ogc.user-guide.xsl +3225 -0
  35. data/lib/isodoc/ogc/ogc.white-paper.xsl +3225 -0
  36. data/lib/isodoc/ogc/pdf_convert.rb +18 -77
  37. data/lib/isodoc/ogc/reqt.rb +76 -36
  38. data/lib/isodoc/ogc/sections.rb +111 -0
  39. data/lib/isodoc/ogc/word_convert.rb +20 -9
  40. data/lib/metanorma/ogc/processor.rb +8 -0
  41. data/lib/metanorma/ogc/version.rb +1 -1
  42. data/metanorma-ogc.gemspec +2 -3
  43. metadata +22 -21
  44. data/lib/isodoc/ogc/html/scripts.pdf.html +0 -72
@@ -1,96 +1,37 @@
1
1
  require_relative "base_convert"
2
- require "fileutils"
3
2
  require "isodoc"
4
- require_relative "metadata"
5
3
 
6
4
  module IsoDoc
7
5
  module Ogc
8
6
  # A {Converter} implementation that generates PDF HTML output, and a
9
7
  # document schema encapsulation of the document for validation
10
- class PdfConvert < IsoDoc::PdfConvert
8
+ class PdfConvert < IsoDoc::XslfoPdfConvert
11
9
  def initialize(options)
12
10
  @libdir = File.dirname(__FILE__)
13
11
  super
14
- #FileUtils.cp html_doc_path('logo.jpg'), "logo.jpg"
15
- #@files_to_delete << "logo.jpg"
16
12
  end
17
13
 
18
- def default_fonts(options)
19
- {
20
- bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' : '"Overpass",sans-serif'),
21
- headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' : '"Overpass",sans-serif'),
22
- monospacefont: '"Space Mono",monospace'
23
- }
14
+ def pdf_stylesheet(docxml)
15
+ doctype = docxml&.at(ns("//bibdata/ext/doctype"))&.text
16
+ doctype = "other" unless %w(abstract-specification-topic best-practice
17
+ change-request-supporting-document community-practice community-standard
18
+ discussion-paper engineering-report policy reference-model release-notes
19
+ standard user-guide test-suite white-paper).include? doctype
20
+ "ogc.#{doctype}.xsl"
24
21
  end
25
22
 
26
- def default_file_locations(_options)
27
- {
28
- htmlstylesheet: html_doc_path("htmlstyle.scss"),
29
- htmlcoverpage: html_doc_path("html_ogc_titlepage.html"),
30
- htmlintropage: html_doc_path("html_ogc_intro.html"),
31
- scripts_pdf: html_doc_path("scripts.pdf.html"),
32
- }
33
- end
34
-
35
- def metadata_init(lang, script, labels)
36
- @meta = Metadata.new(lang, script, labels)
37
- end
38
-
39
- def googlefonts
40
- <<~HEAD.freeze
41
- <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i|Space+Mono:400,700" rel="stylesheet" />
42
- <link href="https://fonts.googleapis.com/css?family=Overpass:300,300i,600,900" rel="stylesheet" />
43
- <link href="https://fonts.googleapis.com/css?family=Teko:300,400,500" rel="stylesheet">
44
- HEAD
45
- end
46
-
47
- def admonition_class(node)
48
- case node["type"]
49
- when "important" then "Admonition.Important"
50
- when "warning" then "Admonition.Warning"
51
- else
52
- "Admonition"
23
+ def convert(filename, file = nil, debug = false)
24
+ file = File.read(filename, encoding: "utf-8") if file.nil?
25
+ docxml, outname_html, dir = convert_init(file, filename, debug)
26
+ /\.xml$/.match(filename) or
27
+ filename = Tempfile.open([outname_html, ".xml"], encoding: "utf-8") do |f|
28
+ f.write file
29
+ f.path
53
30
  end
31
+ FileUtils.rm_rf dir
32
+ ::Metanorma::Output::XslfoPdf.new.convert(
33
+ filename, outname_html + ".pdf", File.join(@libdir, pdf_stylesheet(docxml)))
54
34
  end
55
-
56
- def make_body(xml, docxml)
57
- body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72", "xml:lang": "EN-US", class: "container" }
58
- xml.body **body_attr do |body|
59
- make_body1(body, docxml)
60
- make_body2(body, docxml)
61
- make_body3(body, docxml)
62
- end
63
- end
64
-
65
- def html_toc(docxml)
66
- docxml
67
- end
68
-
69
- def make_body3(body, docxml)
70
- body.div **{ class: "main-section" } do |div3|
71
- @prefacenum = 0
72
- boilerplate docxml, div3
73
- abstract docxml, div3
74
- keywords docxml, div3
75
- foreword docxml, div3
76
- introduction docxml, div3
77
- submittingorgs docxml, div3
78
- submitters docxml, div3
79
- preface docxml, div3
80
- acknowledgements docxml, div3
81
- middle docxml, div3
82
- footnotes div3
83
- comments div3
84
- end
85
- end
86
-
87
- def authority_cleanup(docxml)
88
- authority_cleanup1(docxml, "contact")
89
- super
90
- end
91
-
92
- include BaseConvert
93
35
  end
94
36
  end
95
37
  end
96
-
@@ -7,7 +7,9 @@ module IsoDoc
7
7
  module BaseConvert
8
8
  def recommend_class(node)
9
9
  return "recommendtest" if node["type"] == "verification"
10
+ return "recommendtest" if node["type"] == "abstracttest"
10
11
  return "recommendclass" if node["type"] == "class"
12
+ return "recommendclass" if node["type"] == "conformanceclass"
11
13
  "recommend"
12
14
  end
13
15
 
@@ -22,7 +24,7 @@ module IsoDoc
22
24
 
23
25
  def recommendation_name(node, out, type)
24
26
  label, title, lbl = recommendation_labels(node)
25
- out.p **{ class: node["type"] == "verification" ?
27
+ out.p **{ class: %w(verification abstracttest).include?(node["type"]) ?
26
28
  "RecommendationTestTitle" : "RecommendationTitle" } do |b|
27
29
  lbl = anchor(node['id'], :label, false)
28
30
  b << (lbl.nil? ? l10n("#{type}:") : l10n("#{type} #{lbl}:"))
@@ -47,25 +49,45 @@ module IsoDoc
47
49
  def recommendation_attributes1(node)
48
50
  out = []
49
51
  oblig = node["obligation"] and out << ["Obligation", oblig]
50
- subj = node&.at(ns("./subject"))&.text and
51
- out << [node["type"] == "class" ? "Target Type" : "Subject", subj]
52
- node.xpath(ns("./inherit")).each { |i| out << ["Dependency", i.text] }
52
+ subj = node&.at(ns("./subject"))&.text and out << [rec_subj(node), subj]
53
+ node.xpath(ns("./inherit")).each do |i|
54
+ out << recommendation_attr_parse(i, "Dependency")
55
+ end
53
56
  node.xpath(ns("./classification")).each do |c|
54
- tag = c.at(ns("./tag")) or next
55
- value = c.at(ns("./value")) or next
56
- out << [tag.text.capitalize, value.text]
57
+ line = recommendation_attr_keyvalue(c, "tag", "value") and out << line
57
58
  end
58
59
  out
59
60
  end
60
61
 
62
+ def rec_subj(node)
63
+ %w(class conformanceclass).include?(node["type"]) ?
64
+ "Target Type" : "Subject"
65
+ end
66
+
67
+ def recommendation_attr_parse(node, label)
68
+ text = noko do |xml|
69
+ node.children.each { |n| parse(n, xml) }
70
+ end.join
71
+ [label, text]
72
+ end
73
+
74
+ def recommendation_attr_keyvalue(node, key, value)
75
+ tag = node.at(ns("./#{key}")) or return nil
76
+ value = node.at(ns("./#{value}")) or return nil
77
+ [tag.text.capitalize, value.text]
78
+ end
61
79
 
62
80
  def recommendation_attributes(node, out)
63
81
  ret = recommendation_attributes1(node)
64
82
  return if ret.empty?
65
83
  ret.each do |i|
66
84
  out.tr do |tr|
67
- tr.td i[0], **REQ_TBL_ATTR
68
- tr.td i[1], **REQ_TBL_ATTR
85
+ tr.td **REQ_TBL_ATTR do |td|
86
+ td << i[0]
87
+ end
88
+ tr.td **REQ_TBL_ATTR do |td|
89
+ td << i[1]
90
+ end
69
91
  end
70
92
  end
71
93
  end
@@ -122,6 +144,8 @@ module IsoDoc
122
144
  label = case node["type"]
123
145
  when "verification" then @labels["recommendationtest"]
124
146
  when "class" then @labels["recommendationclass"]
147
+ when "abstracttest" then @labels["abstracttest"]
148
+ when "conformanceclass" then @labels["conformanceclass"]
125
149
  else
126
150
  @recommendation_lbl
127
151
  end
@@ -132,6 +156,8 @@ module IsoDoc
132
156
  label = case node["type"]
133
157
  when "verification" then @labels["requirementtest"]
134
158
  when "class" then @labels["requirementclass"]
159
+ when "abstracttest" then @labels["abstracttest"]
160
+ when "conformanceclass" then @labels["conformanceclass"]
135
161
  else
136
162
  @requirement_lbl
137
163
  end
@@ -142,6 +168,8 @@ module IsoDoc
142
168
  label = case node["type"]
143
169
  when "verification" then @labels["permissiontest"]
144
170
  when "class" then @labels["permissionclass"]
171
+ when "abstracttest" then @labels["abstracttest"]
172
+ when "conformanceclass" then @labels["conformanceclass"]
145
173
  else
146
174
  @permission_lbl
147
175
  end
@@ -160,16 +188,30 @@ module IsoDoc
160
188
  end
161
189
  end
162
190
 
191
+ def req_class_paths
192
+ {
193
+ "class" => "@type = 'class'",
194
+ "test" => "@type = 'verification'",
195
+ "" => "not(@type = 'verification' or @type = 'class' or @type = 'abstracttest' or @type = 'conformanceclass')",
196
+ }
197
+ end
198
+
199
+ def req_class_paths2
200
+ {
201
+ "abstracttest" => "@type = 'abstracttest'",
202
+ "conformanceclass" => "@type = 'conformanceclass'",
203
+ }
204
+ end
205
+
163
206
  def sequential_permission_children(t, id)
164
- sequential_permission_names1(t, id, "permission[not(@type = 'verification' or @type = 'class')]", @permission_lbl)
165
- sequential_permission_names1(t, id, "requirement[not(@type = 'verification' or @type = 'class')]", @requirement_lbl)
166
- sequential_permission_names1(t, id, "recommendation[not(@type = 'verification' or @type = 'class')]", @recommendation_lbl)
167
- sequential_permission_names1(t, id, "permission[@type = 'verification']", @labels["permissiontest"])
168
- sequential_permission_names1(t, id, "requirement[@type = 'verification']", @labels["requirementtest"])
169
- sequential_permission_names1(t, id, "recommendation[@type = 'verification']", @labels["recommendationtest"])
170
- sequential_permission_names1(t, id, "permission[@type = 'class']", @labels["permissionclass"])
171
- sequential_permission_names1(t, id, "requirement[@type = 'class']", @labels["requirementclass"])
172
- sequential_permission_names1(t, id, "recommendation[@type = 'class']", @labels["recommendationclass"])
207
+ req_class_paths.each do |k, v|
208
+ sequential_permission_names1(t, id, "permission[#{v}]", @labels["permission#{k}"])
209
+ sequential_permission_names1(t, id, "requirement[#{v}]", @labels["requirement#{k}"])
210
+ sequential_permission_names1(t, id, "recommendation[#{v}]", @labels["recommendation#{k}"])
211
+ end
212
+ req_class_paths2.each do |k, v|
213
+ sequential_permission_names1(t, id, "*[#{v}]", @labels[k])
214
+ end
173
215
  end
174
216
 
175
217
  def sequential_permission_names1(block, lbl, klass, label)
@@ -186,30 +228,28 @@ module IsoDoc
186
228
  sequential_table_names(clause)
187
229
  sequential_figure_names(clause)
188
230
  sequential_formula_names(clause)
189
- sequential_permission_names(clause, "permission[not(@type = 'verification' or @type = 'class')]", @permission_lbl)
190
- sequential_permission_names(clause, "requirement[not(@type = 'verification' or @type = 'class')]", @requirement_lbl)
191
- sequential_permission_names(clause, "recommendation[not(@type = 'verification' or @type = 'class')]", @recommendation_lbl)
192
- sequential_permission_names(clause, "permission[@type = 'verification']", @labels["permissiontest"])
193
- sequential_permission_names(clause, "requirement[@type = 'verification']", @labels["requirementtest"])
194
- sequential_permission_names(clause, "recommendation[@type = 'verification']", @labels["recommendationtest"])
195
- sequential_permission_names(clause, "permission[@type = 'class']", @labels["permissionclass"])
196
- sequential_permission_names(clause, "requirement[@type = 'class']", @labels["requirementclass"])
197
- sequential_permission_names(clause, "recommendation[@type = 'class']", @labels["recommendationclass"])
231
+ req_class_paths.each do |k, v|
232
+ sequential_permission_names(clause, "permission[#{v}]", @labels["permission#{k}"])
233
+ sequential_permission_names(clause, "requirement[#{v}]", @labels["requirement#{k}"])
234
+ sequential_permission_names(clause, "recommendation[#{v}]", @labels["recommendation#{k}"])
235
+ end
236
+ req_class_paths2.each do |k, v|
237
+ sequential_permission_names(clause, "*[#{v}]", @labels[k])
238
+ end
198
239
  end
199
240
 
200
241
  def hierarchical_asset_names(clause, num)
201
242
  hierarchical_table_names(clause, num)
202
243
  hierarchical_figure_names(clause, num)
203
244
  hierarchical_formula_names(clause, num)
204
- hierarchical_permission_names(clause, num, "permission[not(@type = 'verification' or @type = 'class')]", @permission_lbl)
205
- hierarchical_permission_names(clause, num, "requirement[not(@type = 'verification' or @type = 'class')]", @requirement_lbl)
206
- hierarchical_permission_names(clause, num, "recommendation[not(@type = 'verification' or @type = 'class')]", @recommendation_lbl)
207
- hierarchical_permission_names(clause, num, "permission[@type = 'verification']", @labels["permissiontest"])
208
- hierarchical_permission_names(clause, num, "requirement[@type = 'verification']", @labels["requirementtest"])
209
- hierarchical_permission_names(clause, num, "recommendation[@type = 'verification']", @labels["recommendationtest"])
210
- hierarchical_permission_names(clause, num, "permission[@type = 'class']", @labels["permissionclass"])
211
- hierarchical_permission_names(clause, num, "requirement[@type = 'class']", @labels["requirementclass"])
212
- hierarchical_permission_names(clause, num, "recommendation[@type = 'class']", @labels["recommendationclass"])
245
+ req_class_paths.each do |k, v|
246
+ hierarchical_permission_names(clause, num, "permission[#{v}]", @labels["permission#{k}"])
247
+ hierarchical_permission_names(clause, num, "requirement[#{v}]", @labels["requirement#{k}"])
248
+ hierarchical_permission_names(clause, num, "recommendation[#{v}]", @labels["recommendation#{k}"])
249
+ end
250
+ req_class_paths2.each do |k, v|
251
+ hierarchical_permission_names(clause, num, "*[#{v}]", @labels[k])
252
+ end
213
253
  end
214
254
 
215
255
  def hierarchical_permission_names(clause, num, klass, label)
@@ -0,0 +1,111 @@
1
+ module IsoDoc
2
+ module Ogc
3
+ module BaseConvert
4
+ def annex_name(annex, name, div)
5
+ div.h1 **{ class: "Annex" } do |t|
6
+ t << "#{anchor(annex['id'], :label)} "
7
+ t.br
8
+ t.b do |b|
9
+ name&.children&.each { |c2| parse(c2, b) }
10
+ end
11
+ end
12
+ end
13
+
14
+ def keywords(_docxml, out)
15
+ kw = @meta.get[:keywords]
16
+ kw.empty? and return
17
+ @prefacenum += 1
18
+ out.div **{ class: "Section3" } do |div|
19
+ clause_name(RomanNumerals.to_roman(@prefacenum).downcase,
20
+ "Keywords", div, class: "IntroTitle")
21
+ div.p "The following are keywords to be used by search engines and "\
22
+ "document catalogues."
23
+ div.p kw.join(", ")
24
+ end
25
+ end
26
+
27
+ SUBMITTINGORGS =
28
+ "//bibdata/contributor[role/@type = 'author']/organization/name".freeze
29
+
30
+ def submittingorgs(docxml, out)
31
+ orgs = []
32
+ docxml.xpath(ns(SUBMITTINGORGS)).each { |org| orgs << org.text }
33
+ return if orgs.empty?
34
+ @prefacenum += 1
35
+ out.div **{ class: "Section3" } do |div|
36
+ clause_name(RomanNumerals.to_roman(@prefacenum).downcase,
37
+ "Submitting Organizations", div, class: "IntroTitle")
38
+ div.p "The following organizations submitted this Document to the "\
39
+ "Open Geospatial Consortium (OGC):"
40
+ div.ul do |ul|
41
+ orgs.each { |org| ul.li org }
42
+ end
43
+ end
44
+ end
45
+
46
+ def submitters(docxml, out)
47
+ f = docxml.at(ns("//submitters")) || return
48
+ @prefacenum += 1
49
+ out.div **{ class: "Section3" } do |div|
50
+ clause_name(anchor(f['id'], :label), "Submitters", div,
51
+ class: "IntroTitle")
52
+ f.elements.each { |e| parse(e, div) unless e.name == "title" }
53
+ end
54
+ end
55
+
56
+ def preface(isoxml, out)
57
+ title_attr = { class: "IntroTitle" }
58
+ isoxml.xpath(ns("//preface/clause")).each do |f|
59
+ @prefacenum += 1
60
+ out.div **{ class: "Section3", id: f["id"] } do |div|
61
+ clause_name(RomanNumerals.to_roman(@prefacenum).downcase,
62
+ f&.at(ns("./title")), div, title_attr)
63
+ f.elements.each { |e| parse(e, div) unless e.name == "title" }
64
+ end
65
+ end
66
+ end
67
+
68
+ def abstract(isoxml, out)
69
+ f = isoxml.at(ns("//preface/abstract")) || return
70
+ @prefacenum += 1
71
+ page_break(out)
72
+ out.div **attr_code(id: f["id"]) do |s|
73
+ clause_name(anchor(f["id"], :label), @abstract_lbl, s,
74
+ class: "AbstractTitle")
75
+ f.elements.each { |e| parse(e, s) unless e.name == "title" }
76
+ end
77
+ end
78
+
79
+ def foreword(isoxml, out)
80
+ f = isoxml.at(ns("//foreword")) || return
81
+ @prefacenum += 1
82
+ page_break(out)
83
+ out.div **attr_code(id: f["id"]) do |s|
84
+ clause_name(anchor(f["id"], :label), @foreword_lbl, s,
85
+ class: "ForewordTitle")
86
+ f.elements.each { |e| parse(e, s) unless e.name == "title" }
87
+ end
88
+ end
89
+
90
+ def acknowledgements(isoxml, out)
91
+ f = isoxml.at(ns("//acknowledgements")) || return
92
+ @prefacenum += 1
93
+ out.div **{ class: "Section3", id: f["id"] } do |div|
94
+ clause_name(anchor(f["id"], :label), f&.at(ns("./title")), div,
95
+ class: "IntroTitle")
96
+ f.elements.each { |e| parse(e, div) unless e.name == "title" }
97
+ end
98
+ end
99
+
100
+ def conformance(isoxml, out, num)
101
+ f = isoxml.at(ns("//clause[title = 'Conformance']")) or return num
102
+ out.div **attr_code(id: f["id"]) do |div|
103
+ num = num + 1
104
+ clause_name(num, "Conformance", div, nil)
105
+ f.elements.each { |e| parse(e, div) unless e.name == "title" }
106
+ end
107
+ num
108
+ end
109
+ end
110
+ end
111
+ end
@@ -12,13 +12,14 @@ module IsoDoc
12
12
  def initialize(options)
13
13
  @libdir = File.dirname(__FILE__)
14
14
  super
15
- #FileUtils.cp html_doc_path('logo.jpg'), "logo.jpg"
16
15
  end
17
16
 
18
17
  def default_fonts(options)
19
18
  {
20
- bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' : '"Times New Roman",serif'),
21
- headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' : '"Times New Roman",serif'),
19
+ bodyfont: (options[:script] == "Hans" ? '"SimSun",serif' :
20
+ '"Times New Roman",serif'),
21
+ headerfont: (options[:script] == "Hans" ? '"SimHei",sans-serif' :
22
+ '"Times New Roman",serif'),
22
23
  monospacefont: '"Courier New",monospace'
23
24
  }
24
25
  end
@@ -35,7 +36,6 @@ module IsoDoc
35
36
  }
36
37
  end
37
38
 
38
-
39
39
  def metadata_init(lang, script, labels)
40
40
  @meta = Metadata.new(lang, script, labels)
41
41
  end
@@ -142,19 +142,29 @@ module IsoDoc
142
142
  end
143
143
 
144
144
  def word_cleanup(docxml)
145
- word_recommend_cleanup(docxml)
146
145
  super
146
+ word_recommend_cleanup(docxml)
147
+ word_copyright_cleanup(docxml)
147
148
  word_license_cleanup(docxml)
148
149
  word_term_cleanup(docxml)
149
150
  docxml
150
151
  end
151
152
 
152
153
  def word_license_cleanup(docxml)
153
- docxml.xpath("//div[@class = 'boilerplate-license']//p[not(@class)]").each do |p|
154
+ x = "//div[@class = 'boilerplate-license']//p[not(@class)]"
155
+ docxml.xpath(x).each do |p|
154
156
  p["class"] = "license"
155
157
  end
156
158
  end
157
159
 
160
+ # center only the Copyright notice
161
+ def word_copyright_cleanup(docxml)
162
+ x = "//div[@class = 'boilerplate-copyright']/div[1]/p[not(@class)]"
163
+ docxml.xpath(x).each do |p|
164
+ p["align"] = "center"
165
+ end
166
+ end
167
+
158
168
  def word_term_cleanup(docxml)
159
169
  docxml.xpath("//p[@class = 'TermNum']//p[@class = 'Terms']").each do |p|
160
170
  p.replace(p.children)
@@ -168,9 +178,10 @@ module IsoDoc
168
178
  docxml.xpath("//table[@class = 'recommend']/thead/tr").each do |tr|
169
179
  style_update(tr, "background:#A5A5A5;")
170
180
  end
171
- docxml.xpath("//table[@class = 'recommend']/tbody/tr").
172
- each_slice(2) do |tr1, tr2|
173
- tr2 && style_update(tr2, "background:#C9C9C9;")
181
+ docxml.xpath("//table[@class = 'recommend']/tbody").each do |tr|
182
+ tr.xpath("./tr").each_slice(2) do |tr1, tr2|
183
+ tr2 && style_update(tr2, "background:#C9C9C9;")
184
+ end
174
185
  end
175
186
  end
176
187