isodoc 1.5.5 → 1.6.4

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -4,18 +4,19 @@ module IsoDoc
4
4
  from = date.at(ns("./from"))
5
5
  to = date.at(ns("./to"))
6
6
  on = date.at(ns("./on"))
7
- return date.text unless (from || on || to)
7
+ return date.text unless from || on || to
8
8
  return on.text if on
9
+
9
10
  ret = "#{from.text}–"
10
11
  ret += to.text if to
11
12
  ret
12
13
  end
13
14
 
14
15
  def ns(xpath)
15
- xpath.gsub(%r{/([a-zA-z])}, "/xmlns:\\1").
16
- gsub(%r{::([a-zA-z])}, "::xmlns:\\1").
17
- gsub(%r{\[([a-zA-z][a-z0-9A-Z@/]* ?=)}, "[xmlns:\\1").
18
- gsub(%r{\[([a-zA-z][a-z0-9A-Z@/]*\])}, "[xmlns:\\1")
16
+ xpath.gsub(%r{/([a-zA-z])}, "/xmlns:\\1")
17
+ .gsub(%r{::([a-zA-z])}, "::xmlns:\\1")
18
+ .gsub(%r{\[([a-zA-z][a-z0-9A-Z@/]* ?=)}, "[xmlns:\\1")
19
+ .gsub(%r{\[([a-zA-z][a-z0-9A-Z@/]*\])}, "[xmlns:\\1")
19
20
  end
20
21
 
21
22
  def liquid(doc)
data/lib/isodoc/common.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require_relative "./function/blocks"
2
2
  require_relative "./function/cleanup"
3
+ require_relative "./function/form"
3
4
  require_relative "./function/inline"
4
5
  require_relative "./function/lists"
5
6
  require_relative "./function/references"
@@ -15,6 +16,7 @@ module IsoDoc
15
16
  class Common
16
17
  include Function::Blocks
17
18
  include Function::Cleanup
19
+ include Function::Form
18
20
  include Function::Inline
19
21
  include Function::Lists
20
22
  include Function::References
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "isodoc/common"
3
4
  require "fileutils"
4
5
  require "tempfile"
@@ -7,9 +8,7 @@ require_relative "css"
7
8
 
8
9
  module IsoDoc
9
10
  class Convert < ::IsoDoc::Common
10
- attr_accessor :options
11
- attr_accessor :i18n
12
- attr_accessor :meta
11
+ attr_accessor :options, :i18n, :meta, :xrefs
13
12
 
14
13
  # htmlstylesheet: Generic stylesheet for HTML
15
14
  # htmlstylesheet_override: Override stylesheet for HTML
@@ -33,16 +32,17 @@ module IsoDoc
33
32
  # monospace: font to use for monospace text
34
33
  # suppressheadingnumbers: suppress heading numbers for clauses
35
34
  # scripts: Scripts file for HTML
35
+ # scripts_override: Override scripts file for HTML
36
36
  # scripts_pdf: Scripts file for PDF (not used in XSLT PDF)
37
37
  # datauriimage: Encode images in HTML output as data URIs
38
38
  # break_up_urls_in_tables: whether to insert spaces in URLs in tables
39
39
  # every 40-odd chars
40
+ # bare: do not insert any prefatory material (coverpage, boilerplate)
40
41
  def initialize(options)
41
- @libdir ||= File.dirname(__FILE__)
42
+ @libdir ||= File.dirname(__FILE__) # rubocop:disable Lint/DisjunctiveAssignmentInConstructor
42
43
  options.merge!(default_fonts(options)) do |_, old, new|
43
44
  old || new
44
- end
45
- .merge!(default_file_locations(options)) do |_, old, new|
45
+ end.merge!(default_file_locations(options)) do |_, old, new|
46
46
  old || new
47
47
  end
48
48
  @options = options
@@ -53,6 +53,7 @@ module IsoDoc
53
53
  @htmlstylesheet_override_name = options[:htmlstylesheet_override]
54
54
  @wordstylesheet_override_name = options[:wordstylesheet_override]
55
55
  @standardstylesheet_name = options[:standardstylesheet]
56
+ @sourcefilename = options[:sourcefilename]
56
57
  @header = options[:header]
57
58
  @htmlcoverpage = options[:htmlcoverpage]
58
59
  @wordcoverpage = options[:wordcoverpage]
@@ -62,15 +63,18 @@ module IsoDoc
62
63
  @smallerfontsize = options[:smallerfontsize]
63
64
  @monospacefontsize = options[:monospacefontsize]
64
65
  @footnotefontsize = options[:footnotefontsize]
65
- @scripts = options[:scripts]
66
+ @scripts = options[:scripts] ||
67
+ File.join(File.dirname(__FILE__), "base_style", "scripts.html")
66
68
  @scripts_pdf = options[:scripts_pdf]
69
+ @scripts_override = options[:scripts_override]
67
70
  @i18nyaml = options[:i18nyaml]
68
71
  @ulstyle = options[:ulstyle]
69
72
  @olstyle = options[:olstyle]
70
73
  @datauriimage = options[:datauriimage]
71
74
  @suppressheadingnumbers = options[:suppressheadingnumbers]
72
- @break_up_urls_in_tables = options[:break_up_urls_in_tables] == 'true'
73
- @termdomain = ''
75
+ @break_up_urls_in_tables = options[:break_up_urls_in_tables] == "true"
76
+ @bare = options[:bare]
77
+ @termdomain = ""
74
78
  @termexample = false
75
79
  @note = false
76
80
  @sourcecode = false
@@ -92,17 +96,17 @@ module IsoDoc
92
96
  @wordToClevels = 2 if @wordToClevels.zero?
93
97
  @htmlToClevels = options[:htmltoclevels].to_i
94
98
  @htmlToClevels = 2 if @htmlToClevels.zero?
95
- @bookmarks_allocated = { 'X' => true }
99
+ @bookmarks_allocated = { "X" => true }
96
100
  @fn_bookmarks = {}
97
101
  end
98
102
 
99
103
  def tmpimagedir_suffix
100
- '_images'
104
+ "_images"
101
105
  end
102
106
 
103
107
  def html_doc_path(*file)
104
108
  file.each do |f|
105
- ret = File.join(@libdir, File.join('html', f))
109
+ ret = File.join(@libdir, File.join("html", f))
106
110
  File.exist?(ret) and return ret
107
111
  end
108
112
  nil
@@ -112,7 +116,7 @@ module IsoDoc
112
116
  @xrefs.parse docxml
113
117
  noko do |xml|
114
118
  xml.html **{ lang: @lang.to_s } do |html|
115
- html.parent.add_namespace('epub', 'http://www.idpf.org/2007/ops')
119
+ html.parent.add_namespace("epub", "http://www.idpf.org/2007/ops")
116
120
  info docxml, nil
117
121
  populate_css
118
122
  html.head { |head| define_head head, filename, dir }
@@ -134,8 +138,8 @@ module IsoDoc
134
138
  @i18n = I18n.new(lang, script, i18nyaml || @i18nyaml)
135
139
  end
136
140
 
137
- def l10n(x, lang = @lang, script = @script)
138
- @i18n.l10n(x, lang, script)
141
+ def l10n(expr, lang = @lang, script = @script)
142
+ @i18n.l10n(expr, lang, script)
139
143
  end
140
144
 
141
145
  def convert_init(file, input_filename, debug)
@@ -157,14 +161,23 @@ module IsoDoc
157
161
  docxml, filename, dir = convert_init(file, input_filename, debug)
158
162
  result = convert1(docxml, filename, dir)
159
163
  return result if debug
164
+
160
165
  output_filename ||= "#{filename}.#{@suffix}"
161
166
  postprocess(result, output_filename, dir)
162
167
  FileUtils.rm_rf dir
163
168
  end
164
169
 
165
- def middle_clause(docxml = nil)
170
+ def middle_clause(_docxml = nil)
166
171
  "//clause[parent::sections][not(@type = 'scope')]"\
167
- '[not(descendant::terms)]'
172
+ "[not(descendant::terms)]"
173
+ end
174
+
175
+ def target_pdf(node)
176
+ if /#/.match?(node["target"])
177
+ node["target"].sub(/#/, ".pdf#")
178
+ else
179
+ "##{node['target']}"
180
+ end
168
181
  end
169
182
  end
170
183
  end
data/lib/isodoc/css.rb CHANGED
@@ -6,32 +6,40 @@ module IsoDoc
6
6
  def precompiled_style_or_original(stylesheet_path)
7
7
  # Already have compiled stylesheet, use it
8
8
  return stylesheet_path if stylesheet_path.nil? ||
9
- File.extname(stylesheet_path) == '.css'
10
- basename = File.basename(stylesheet_path, '.*')
9
+ File.extname(stylesheet_path) == ".css"
10
+
11
+ basename = File.basename(stylesheet_path, ".*")
11
12
  compiled_path = File.join(File.dirname(stylesheet_path),
12
13
  "#{basename}.css")
13
14
  return stylesheet_path unless File.file?(compiled_path)
15
+
14
16
  compiled_path
15
17
  end
16
18
 
19
+ def localpath(path)
20
+ return path if %r{^[A-Z]:|^/|^file:/}.match?(path)
21
+ return path unless (@sourcedir || @localdir) && path
22
+
23
+ File.expand_path(File.join((@sourcedir || @localdir), path))
24
+ end
25
+
17
26
  # run this after @meta is populated
18
27
  def populate_css
19
- @htmlstylesheet = generate_css(@htmlstylesheet_name, true)
20
- @wordstylesheet = generate_css(@wordstylesheet_name, false)
21
- @standardstylesheet = generate_css(@standardstylesheet_name, false)
22
- if @htmlstylesheet_override_name
23
- @htmlstylesheet_override = File.open(@htmlstylesheet_override_name)
24
- end
25
- if @wordstylesheet_override_name
26
- @wordstylesheet_override = File.open(@wordstylesheet_override_name)
27
- end
28
+ @htmlstylesheet = generate_css(localpath(@htmlstylesheet_name), true)
29
+ @wordstylesheet = generate_css(localpath(@wordstylesheet_name), false)
30
+ @standardstylesheet =
31
+ generate_css(localpath(@standardstylesheet_name), false)
32
+ @htmlstylesheet_override_name and @htmlstylesheet_override =
33
+ File.open(localpath(@htmlstylesheet_override_name))
34
+ @wordstylesheet_override_name and @wordstylesheet_override =
35
+ File.open(localpath(@wordstylesheet_override_name))
28
36
  end
29
37
 
30
38
  def default_fonts(_options)
31
39
  {
32
- bodyfont: 'Arial',
33
- headerfont: 'Arial',
34
- monospacefont: 'Courier',
40
+ bodyfont: "Arial",
41
+ headerfont: "Arial",
42
+ monospacefont: "Courier",
35
43
  }
36
44
  end
37
45
 
@@ -43,35 +51,35 @@ module IsoDoc
43
51
 
44
52
  def fonts_options
45
53
  {
46
- 'bodyfont' => options[:bodyfont] || 'Arial',
47
- 'headerfont' => options[:headerfont] || 'Arial',
48
- 'monospacefont' => options[:monospacefont] || 'Courier',
54
+ "bodyfont" => options[:bodyfont] || "Arial",
55
+ "headerfont" => options[:headerfont] || "Arial",
56
+ "monospacefont" => options[:monospacefont] || "Courier",
49
57
  "normalfontsize" => options[:normalfontsize],
50
58
  "monospacefontsize" => options[:monospacefontsize],
51
59
  "smallerfontsize" => options[:smallerfontsize],
52
- "footnotefontsize" => options[:footnotefontsize]
60
+ "footnotefontsize" => options[:footnotefontsize],
53
61
  }
54
62
  end
55
63
 
56
64
  def scss_fontheader(is_html_css)
57
- b = options[:bodyfont] || 'Arial'
58
- h = options[:headerfont] || 'Arial'
59
- m = options[:monospacefont] || 'Courier'
60
- ns = options[:normalfontsize] || (is_html_css ? "1.0em" : '12.0pt')
61
- ms = options[:monospacefontsize] || (is_html_css ? "0.8em" : '11.0pt')
62
- ss = options[:smallerfontsize] || (is_html_css ? "0.9em" : '10.0pt')
63
- fs = options[:footnotefontsize] || (is_html_css ? "0.9em" : '9.0pt')
65
+ b = options[:bodyfont] || "Arial"
66
+ h = options[:headerfont] || "Arial"
67
+ m = options[:monospacefont] || "Courier"
68
+ ns = options[:normalfontsize] || (is_html_css ? "1.0em" : "12.0pt")
69
+ ms = options[:monospacefontsize] || (is_html_css ? "0.8em" : "11.0pt")
70
+ ss = options[:smallerfontsize] || (is_html_css ? "0.9em" : "10.0pt")
71
+ fs = options[:footnotefontsize] || (is_html_css ? "0.9em" : "9.0pt")
64
72
  "$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"\
65
73
  "$normalfontsize: #{ns};\n$monospacefontsize: #{ms};\n"\
66
74
  "$smallerfontsize: #{ss};\n$footnotefontsize: #{fs};\n"
67
75
  end
68
76
 
69
77
  def convert_scss(filename, stylesheet, stripwordcss)
70
- require 'sassc'
71
- require 'isodoc/sassc_importer'
78
+ require "sassc"
79
+ require "isodoc/sassc_importer"
72
80
 
73
- [File.join(Gem.loaded_specs['isodoc'].full_gem_path,
74
- 'lib', 'isodoc'),
81
+ [File.join(Gem.loaded_specs["isodoc"].full_gem_path,
82
+ "lib", "isodoc"),
75
83
  File.dirname(filename)].each do |name|
76
84
  SassC.load_paths << name
77
85
  end
@@ -83,15 +91,16 @@ module IsoDoc
83
91
  # stripwordcss if HTML stylesheet, !stripwordcss if DOC stylesheet
84
92
  def generate_css(filename, stripwordcss)
85
93
  return nil if filename.nil?
94
+
86
95
  filename = precompiled_style_or_original(filename)
87
- stylesheet = File.read(filename, encoding: 'UTF-8')
96
+ stylesheet = File.read(filename, encoding: "UTF-8")
88
97
  stylesheet = populate_template(stylesheet, :word)
89
- stylesheet.gsub!(/(\s|\{)mso-[^:]+:[^;]+;/m, '\\1') if stripwordcss
90
- if File.extname(filename) == '.scss'
98
+ stylesheet.gsub!(/(\s|\{)mso-[^:]+:[^;]+;/m, "\\1") if stripwordcss
99
+ if File.extname(filename) == ".scss"
91
100
  stylesheet = convert_scss(filename, stylesheet, stripwordcss)
92
101
  end
93
- Tempfile.open([File.basename(filename, '.*'), 'css'],
94
- encoding: 'utf-8') do |f|
102
+ Tempfile.open([File.basename(filename, ".*"), "css"],
103
+ encoding: "utf-8") do |f|
95
104
  f.write(stylesheet)
96
105
  f
97
106
  end
@@ -4,6 +4,16 @@ module IsoDoc::Function
4
4
  module Blocks
5
5
  @annotation = false
6
6
 
7
+ def middle_title(_isoxml, out)
8
+ out.p(**{ class: "zzSTDTitle1" }) { |p| p << @meta.get[:doctitle] }
9
+ end
10
+
11
+ def middle_admonitions(isoxml, out)
12
+ isoxml.xpath(ns("//sections/note | //sections/admonition")).each do |x|
13
+ parse(x, out)
14
+ end
15
+ end
16
+
7
17
  def figure_name_parse(node, div, name)
8
18
  return if name.nil?
9
19
  div.p **{ class: "FigureTitle", style: "text-align:center;" } do |p|
@@ -24,6 +34,7 @@ module IsoDoc::Function
24
34
  def figure_parse(node, out)
25
35
  return pseudocode_parse(node, out) if node["class"] == "pseudocode" ||
26
36
  node["type"] == "pseudocode"
37
+
27
38
  @in_figure = true
28
39
  out.div **figure_attrs(node) do |div|
29
40
  node.children.each do |n|
@@ -51,6 +62,7 @@ module IsoDoc::Function
51
62
 
52
63
  def sourcecode_name_parse(node, div, name)
53
64
  return if name.nil?
65
+
54
66
  div.p **{ class: "SourceTitle", style: "text-align:center;" } do |p|
55
67
  name.children.each { |n| parse(n, p) }
56
68
  end
@@ -91,14 +103,15 @@ module IsoDoc::Function
91
103
  @annotation = false
92
104
  end
93
105
 
94
- def admonition_class(node)
106
+ def admonition_class(_node)
95
107
  "Admonition"
96
108
  end
97
109
 
98
110
  def admonition_name(node, type)
99
111
  name = node&.at(ns("./name")) and return name
100
- name = Nokogiri::XML::Node.new('name', node.document)
112
+ name = Nokogiri::XML::Node.new("name", node.document)
101
113
  return unless type && @i18n.admonition[type]
114
+
102
115
  name << @i18n.admonition[type]&.upcase
103
116
  name
104
117
  end
@@ -119,7 +132,8 @@ module IsoDoc::Function
119
132
 
120
133
  def formula_where(dl, out)
121
134
  return unless dl
122
- out.p **{ style: "page-break-after:avoid;"} do |p|
135
+
136
+ out.p **{ style: "page-break-after:avoid;" } do |p|
123
137
  p << @i18n.where
124
138
  end
125
139
  parse(dl, out)
@@ -148,6 +162,7 @@ module IsoDoc::Function
148
162
  formula_where(node.at(ns("./dl")), div)
149
163
  node.children.each do |n|
150
164
  next if %w(stem dl name).include? n.name
165
+
151
166
  parse(n, div)
152
167
  end
153
168
  end
@@ -182,6 +197,7 @@ module IsoDoc::Function
182
197
  author = node.at(ns("./author"))
183
198
  source = node.at(ns("./source"))
184
199
  return if author.nil? && source.nil?
200
+
185
201
  out.p **{ class: "QuoteAttribution" } do |p|
186
202
  p << "&mdash; #{author.text}" if author
187
203
  p << ", " if author && source
@@ -201,8 +217,9 @@ module IsoDoc::Function
201
217
  end
202
218
 
203
219
  def passthrough_parse(node, out)
204
- return if node["format"] and
220
+ return if node["format"] &&
205
221
  !(node["format"].split(/,/).include? @format.to_s)
222
+
206
223
  out.passthrough node.text
207
224
  end
208
225
 
@@ -59,7 +59,7 @@ module IsoDoc::Function
59
59
  name = node&.at(ns("./name"))&.remove
60
60
  div.p do |p|
61
61
  name and p.span **{ class: "note_label" } do |s|
62
- name and name.children.each { |n| parse(n, s) }
62
+ name.children.each { |n| parse(n, s) }
63
63
  s << note_delim
64
64
  end
65
65
  insert_tab(p, 1)
@@ -98,7 +98,7 @@ module IsoDoc::Function
98
98
  @note = true
99
99
  out.div **note_attrs(node) do |div|
100
100
  node&.at(ns("./*[local-name() != 'name'][1]"))&.name == "p" ?
101
- #node.first_element_child.name == "p" ?
101
+ # node.first_element_child.name == "p" ?
102
102
  note_p_parse(node, div) : note_parse1(node, div)
103
103
  end
104
104
  @note = false
@@ -1,16 +1,17 @@
1
1
  module IsoDoc::Function
2
2
  module Cleanup
3
3
  def textcleanup(docxml)
4
- docxml = termref_cleanup(passthrough_cleanup(docxml))
4
+ termref_cleanup(passthrough_cleanup(docxml))
5
5
  end
6
6
 
7
7
  def termref_cleanup(docxml)
8
- docxml.
9
- gsub(/\s*\[MODIFICATION\]\s*\[\/TERMREF\]/, l10n(", #{@i18n.modified} [/TERMREF]")).
10
- gsub(%r{\s*\[/TERMREF\]\s*</p>\s*<p>\s*\[TERMREF\]}, "; ").
11
- gsub(/\[TERMREF\]\s*/, l10n("[#{@i18n.source}: ")).
12
- gsub(%r{\s*\[\/TERMREF\]\s*}, l10n("]")).
13
- gsub(/\s*\[MODIFICATION\]/, l10n(", #{@i18n.modified} &mdash; "))
8
+ docxml
9
+ .gsub(/\s*\[MODIFICATION\]\s*\[\/TERMREF\]/,
10
+ l10n(", #{@i18n.modified} [/TERMREF]"))
11
+ .gsub(%r{\s*\[/TERMREF\]\s*</p>\s*<p>\s*\[TERMREF\]}, "; ")
12
+ .gsub(/\[TERMREF\]\s*/, l10n("[#{@i18n.source}: "))
13
+ .gsub(%r{\s*\[/TERMREF\]\s*}, l10n("]"))
14
+ .gsub(/\s*\[MODIFICATION\]/, l10n(", #{@i18n.modified} &mdash; "))
14
15
  end
15
16
 
16
17
  def passthrough_cleanup(docxml)
@@ -21,7 +22,7 @@ module IsoDoc::Function
21
22
  end
22
23
 
23
24
  def cleanup(docxml)
24
- @i18n ||= i18n_init(@lang, @script)
25
+ @i18n ||= i18n_init(@lang, @script)
25
26
  comment_cleanup(docxml)
26
27
  footnote_cleanup(docxml)
27
28
  inline_header_cleanup(docxml)
@@ -34,30 +35,36 @@ module IsoDoc::Function
34
35
 
35
36
  def table_long_strings_cleanup(docxml)
36
37
  return unless @break_up_urls_in_tables == true
38
+
37
39
  docxml.xpath("//td | //th").each do |d|
38
40
  d.traverse do |n|
39
41
  next unless n.text?
42
+
40
43
  n.replace(HTMLEntities.new.encode(
41
- break_up_long_strings(n.text)))
44
+ break_up_long_strings(n.text),
45
+ ))
42
46
  end
43
47
  end
44
48
  end
45
49
 
46
- def break_up_long_strings(t)
47
- return t if t.match(/^\s*$/)
48
- t.split(/(?=\s)/).map do |w|
49
- (/^\s*$/.match(t) or w.size < 30) ? w :
50
+ def break_up_long_strings(text)
51
+ return text if /^\s*$/.match?(text)
52
+
53
+ text.split(/(?=\s)/).map do |w|
54
+ if /^\s*$/.match(text) || (w.size < 30) then w
55
+ else
50
56
  w.scan(/.{,30}/).map do |w1|
51
- (w1.size < 30) ? w1 : break_up_long_strings1(w1)
52
- end.join
57
+ w1.size < 30 ? w1 : break_up_long_strings1(w1)
58
+ end.join
59
+ end
53
60
  end.join
54
61
  end
55
62
 
56
- def break_up_long_strings1(w1)
57
- s = w1.split(%r{(?<=[,.?+;/=])})
58
- if s.size == 1 then w1 + " "
63
+ def break_up_long_strings1(text)
64
+ s = text.split(%r{(?<=[,.?+;/=])})
65
+ if s.size == 1 then "#{text} "
59
66
  else
60
- s[-1] = " " + s[-1]
67
+ s[-1] = " #{s[-1]}"
61
68
  s.join
62
69
  end
63
70
  end
@@ -78,11 +85,11 @@ module IsoDoc::Function
78
85
  docxml
79
86
  end
80
87
 
81
- def figure_get_or_make_dl(t)
82
- dl = t.at(".//dl")
88
+ def figure_get_or_make_dl(elem)
89
+ dl = elem.at(".//dl")
83
90
  if dl.nil?
84
- t.add_child("<p><b>#{@i18n.key}</b></p><dl></dl>")
85
- dl = t.at(".//dl")
91
+ elem.add_child("<p><b>#{@i18n.key}</b></p><dl></dl>")
92
+ dl = elem.at(".//dl")
86
93
  end
87
94
  dl
88
95
  end
@@ -91,10 +98,10 @@ module IsoDoc::Function
91
98
  "//div[@class = 'figure'][descendant::aside]"\
92
99
  "[not(descendant::div[@class = 'figure'])]".freeze
93
100
 
94
- def figure_aside_process(f, aside, key)
101
+ def figure_aside_process(elem, aside, key)
95
102
  # get rid of footnote link, it is in diagram
96
- f&.at("./a[@class='TableFootnoteRef']")&.remove
97
- fnref = f.at(".//span[@class='TableFootnoteRef']/..")
103
+ elem&.at("./a[@class='TableFootnoteRef']")&.remove
104
+ fnref = elem.at(".//span[@class='TableFootnoteRef']/..")
98
105
  dt = key.add_child("<dt></dt>").first
99
106
  dd = key.add_child("<dd></dd>").first
100
107
  fnref.parent = dt
@@ -109,6 +116,7 @@ module IsoDoc::Function
109
116
  def figure_cleanup(docxml)
110
117
  docxml.xpath(FIGURE_WITH_FOOTNOTES).each do |f|
111
118
  next unless f.at(".//aside[not(ancestor::p[@class = 'FigureTitle'])]")
119
+
112
120
  key = figure_get_or_make_dl(f)
113
121
  f.xpath(".//aside").each do |aside|
114
122
  figure_aside_process(f, aside, key)
@@ -137,12 +145,13 @@ module IsoDoc::Function
137
145
  docxml
138
146
  end
139
147
 
140
- def merge_fnref_into_fn_text(a)
141
- fn = a.at('.//span[@class="TableFootnoteRef"]/..')
148
+ def merge_fnref_into_fn_text(elem)
149
+ fn = elem.at('.//span[@class="TableFootnoteRef"]/..')
142
150
  n = fn.next_element
143
151
  n&.children&.first&.add_previous_sibling(fn.remove)
144
152
  end
145
153
 
154
+ # preempt html2doc putting MsoNormal under TableFootnote class
146
155
  def table_footnote_cleanup(docxml)
147
156
  docxml.xpath("//table[descendant::aside]").each do |t|
148
157
  t.xpath(".//aside").each do |a|
@@ -152,36 +161,36 @@ module IsoDoc::Function
152
161
  t << a.remove
153
162
  end
154
163
  end
155
- # preempt html2doc putting MsoNormal there
156
164
  docxml.xpath("//p[not(self::*[@class])]"\
157
165
  "[ancestor::*[@class = 'TableFootnote']]").each do |p|
158
166
  p["class"] = "TableFootnote"
159
167
  end
160
168
  end
161
169
 
162
- def remove_bottom_border(td)
163
- td["style"] =
164
- td["style"].gsub(/border-bottom:[^;]+;/, "border-bottom:0pt;")
170
+ def remove_bottom_border(cell)
171
+ cell["style"] =
172
+ cell["style"].gsub(/border-bottom:[^;]+;/, "border-bottom:0pt;")
165
173
  end
166
174
 
167
- def table_get_or_make_tfoot(t)
168
- tfoot = t.at(".//tfoot")
175
+ def table_get_or_make_tfoot(table)
176
+ tfoot = table.at(".//tfoot")
169
177
  if tfoot.nil?
170
- t.add_child("<tfoot></tfoot>")
171
- tfoot = t.at(".//tfoot")
178
+ table.add_child("<tfoot></tfoot>")
179
+ tfoot = table.at(".//tfoot")
172
180
  else
173
181
  tfoot.xpath(".//td | .//th").each { |td| remove_bottom_border(td) }
174
182
  end
175
183
  tfoot
176
184
  end
177
185
 
178
- def new_fullcolspan_row(t, tfoot)
186
+ def new_fullcolspan_row(table, tfoot)
179
187
  # how many columns in the table?
180
188
  cols = 0
181
- t.at(".//tr").xpath("./td | ./th").each do |td|
189
+ table.at(".//tr").xpath("./td | ./th").each do |td|
182
190
  cols += (td["colspan"] ? td["colspan"].to_i : 1)
183
191
  end
184
- style = %{border-top:0pt;border-bottom:#{IsoDoc::Function::Table::SW} 1.5pt;}
192
+ style =
193
+ %{border-top:0pt;border-bottom:#{IsoDoc::Function::Table::SW} 1.5pt;}
185
194
  tfoot.add_child("<tr><td colspan='#{cols}' style='#{style}'/></tr>")
186
195
  tfoot.xpath(".//td").last
187
196
  end
@@ -204,15 +213,14 @@ module IsoDoc::Function
204
213
  docxml
205
214
  end
206
215
 
207
- def symbols_cleanup(docxml)
208
- end
216
+ def symbols_cleanup(docxml); end
209
217
 
210
- def table_footnote_reference_format(a)
211
- a
218
+ def table_footnote_reference_format(link)
219
+ link
212
220
  end
213
221
 
214
- def footnote_reference_format(a)
215
- a
222
+ def footnote_reference_format(link)
223
+ link
216
224
  end
217
225
  end
218
226
  end