isodoc 2.3.6 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -52,11 +52,17 @@ module IsoDoc
52
52
  @wordstylesheet.unlink if @wordstylesheet.is_a?(Tempfile)
53
53
  end
54
54
 
55
+ def sourcecode_style
56
+ "Sourcecode"
57
+ end
58
+
55
59
  def wordstylesheet_update
56
60
  return if @wordstylesheet.nil?
57
61
 
58
62
  f = File.open(@wordstylesheet.path, "a")
59
63
  @landscapestyle.empty? or f.write(@landscapestyle)
64
+ s = @meta.get[:code_css] and
65
+ f.write(s.gsub(/sourcecode/, "p.#{sourcecode_style}"))
60
66
  if @wordstylesheet_override && @wordstylesheet
61
67
  f.write(@wordstylesheet_override.read)
62
68
  @wordstylesheet_override.close
@@ -70,13 +76,15 @@ module IsoDoc
70
76
  def word_admonition_images(docxml)
71
77
  docxml.xpath("//div[@class = 'Admonition']//img").each do |i|
72
78
  i["width"], i["height"] =
73
- Html2Doc.new({}).image_resize(i, image_localfile(i), @maxheight, 300)
79
+ Html2Doc.new({}).image_resize(i, image_localfile(i), @maxheight,
80
+ 300)
74
81
  end
75
82
  end
76
83
 
77
84
  def word_cleanup(docxml)
78
85
  word_annex_cleanup(docxml)
79
86
  word_preface(docxml)
87
+ word_sourcecode_table(docxml)
80
88
  word_nested_tables(docxml)
81
89
  word_colgroup(docxml)
82
90
  word_table_align(docxml)
@@ -93,6 +101,27 @@ module IsoDoc
93
101
  docxml
94
102
  end
95
103
 
104
+ def word_sourcecode_table(docxml)
105
+ docxml.xpath("//p[@class='Sourcecode']/div[@class='table_container']")
106
+ .each do |d|
107
+ pre = d.at(".//p[@class='Sourcecode']")
108
+ to_sourcecode_para(pre)
109
+ d["id"] = d.parent["id"]
110
+ d.parent.replace(d)
111
+ end
112
+ end
113
+
114
+ def to_sourcecode_para(pre)
115
+ @sourcecode = true
116
+ pre.traverse do |x|
117
+ x.text? or next
118
+ ret = []
119
+ text_parse(x, ret)
120
+ x.replace(ret.join)
121
+ end
122
+ @sourcecode = false
123
+ end
124
+
96
125
  def word_tab_clean(docxml)
97
126
  docxml.xpath("//p[@class='Biblio']//span[@style='mso-tab-count:1']")
98
127
  .each do |s|
@@ -155,7 +184,7 @@ module IsoDoc
155
184
  .each do |t|
156
185
  if t&.previous_element&.name == "img"
157
186
  img = t.previous_element
158
- t.previous_element.swap("<p class=\'figure\'>#{img.to_xml}</p>")
187
+ t.previous_element.swap("<p class='figure'>#{img.to_xml}</p>")
159
188
  end
160
189
  style_update(t&.previous_element, "page-break-after:avoid;")
161
190
  end
@@ -231,7 +260,7 @@ module IsoDoc
231
260
  docxml.xpath("//a[@epub:type = 'footnote']").each do |x|
232
261
  footnote_reference_format(x)
233
262
  end
234
- docxml.xpath("//a[@class = 'TableFootnoteRef'] | "\
263
+ docxml.xpath("//a[@class = 'TableFootnoteRef'] | " \
235
264
  "//span[@class = 'TableFootnoteRef']").each do |x|
236
265
  table_footnote_reference_format(x)
237
266
  end
@@ -15,39 +15,50 @@ module IsoDoc
15
15
  table.at(".//tr").xpath("./td | ./th").each do |td|
16
16
  cols += (td["colspan"] ? td["colspan"].to_i : 1)
17
17
  end
18
- style = "border-top:0pt;mso-border-top-alt:0pt;"\
18
+ style = "border-top:0pt;mso-border-top-alt:0pt;" \
19
19
  "border-bottom:#{SW1} 1.5pt;mso-border-bottom-alt:#{SW1} 1.5pt;"
20
20
  tfoot.add_child("<tr><td colspan='#{cols}' style='#{style}'/></tr>")
21
21
  tfoot.xpath(".//td").last
22
22
  end
23
23
 
24
- def make_tr_attr(td, row, totalrows, _header)
25
- style = td.name == "th" ? "font-weight:bold;" : ""
26
- rowmax = td["rowspan"] ? row + td["rowspan"].to_i - 1 : row
27
- style += <<~STYLE
24
+ def make_tr_attr(cell, row, totalrows, header, bordered)
25
+ style = cell.name == "th" ? "font-weight:bold;" : ""
26
+ rowmax = cell["rowspan"] ? row + cell["rowspan"].to_i - 1 : row
27
+ style += make_tr_attr_style(row, rowmax, totalrows, header, bordered)
28
+ { rowspan: cell["rowspan"], colspan: cell["colspan"],
29
+ valign: cell["valign"], align: cell["align"], style: style }
30
+ end
31
+
32
+ def make_tr_attr_style(row, rowmax, totalrows, header, bordered)
33
+ ret = <<~STYLE.gsub(/\n/, "")
28
34
  border-top:#{row.zero? ? "#{SW1} 1.5pt;" : 'none;'}
29
35
  mso-border-top-alt:#{row.zero? ? "#{SW1} 1.5pt;" : 'none;'}
30
- border-bottom:#{SW1} #{rowmax == totalrows ? '1.5' : '1.0'}pt;
31
- mso-border-bottom-alt:#{SW1} #{rowmax == totalrows ? '1.5' : '1.0'}pt;
36
+ border-bottom:#{SW1} #{rowmax >= totalrows ? '1.5' : '1.0'}pt;
37
+ mso-border-bottom-alt:#{SW1} #{rowmax >= totalrows ? '1.5' : '1.0'}pt;
32
38
  STYLE
33
- { rowspan: td["rowspan"], colspan: td["colspan"], valign: td["valign"],
34
- align: td["align"], style: style.gsub(/\n/, "") }
39
+ bordered or ret = ""
40
+ pb = header || (totalrows <= 10 && rowmax < totalrows) ? "avoid" : "auto"
41
+ "#{ret}page-break-after:#{pb};"
35
42
  end
36
43
 
37
44
  def table_attrs(node)
45
+ c = node["class"]
46
+ bordered = "border-spacing:0;border-width:1px;"
47
+ (%w(modspec).include?(c) || !c) or bordered = nil
38
48
  ret = {
39
49
  summary: node["summary"],
40
50
  width: node["width"],
41
- style: "mso-table-anchor-horizontal:column;mso-table-overlap:never;"\
42
- "border-spacing:0;border-width:1px;#{keep_style(node)}",
51
+ style: "mso-table-anchor-horizontal:column;mso-table-overlap:never;" \
52
+ "#{bordered}#{keep_style(node)}",
43
53
  class: (node.text.length > 4000 ? "MsoISOTableBig" : "MsoISOTable"),
44
54
  }
55
+ bordered or ret.delete(:class)
45
56
  super.merge(attr_code(ret))
46
57
  end
47
58
 
48
- def colgroup(node, t)
59
+ def colgroup(node, table)
49
60
  colgroup = node.at(ns("./colgroup")) or return
50
- t.colgroup do |cg|
61
+ table.colgroup do |cg|
51
62
  colgroup.xpath(ns("./col")).each do |c|
52
63
  cg.col **{ width: c["width"] }
53
64
  end
@@ -62,7 +62,7 @@ module IsoDoc
62
62
  @anchors[n["id"]] =
63
63
  { label: termnote_label(c.print), type: "termnote",
64
64
  value: c.print, elem: @labels["termnote"],
65
- xref: l10n("#{anchor(t['id'], :xref)}, "\
65
+ xref: l10n("#{anchor(t['id'], :xref)}, " \
66
66
  "#{@labels['note_xref']} #{c.print}") }
67
67
  end
68
68
  end
@@ -82,10 +82,10 @@ module IsoDoc
82
82
  end
83
83
 
84
84
  SECTIONS_XPATH =
85
- "//foreword | //introduction | //acknowledgements | "\
86
- "//preface/terms | preface/definitions | preface/references | "\
87
- "//preface/clause | //sections/terms | //annex | "\
88
- "//sections/clause | //sections/definitions | "\
85
+ "//foreword | //introduction | //acknowledgements | " \
86
+ "//preface/terms | preface/definitions | preface/references | " \
87
+ "//preface/clause | //sections/terms | //annex | " \
88
+ "//sections/clause | //sections/definitions | " \
89
89
  "//bibliography/references | //bibliography/clause".freeze
90
90
 
91
91
  def sections_xpath
@@ -93,8 +93,8 @@ module IsoDoc
93
93
  end
94
94
 
95
95
  CHILD_NOTES_XPATH =
96
- "./*[not(self::xmlns:clause) and not(self::xmlns:appendix) and "\
97
- "not(self::xmlns:terms) and not(self::xmlns:definitions)]//xmlns:note | "\
96
+ "./*[not(self::xmlns:clause) and not(self::xmlns:appendix) and " \
97
+ "not(self::xmlns:terms) and not(self::xmlns:definitions)]//xmlns:note | " \
98
98
  "./xmlns:note".freeze
99
99
 
100
100
  def note_anchor_names(sections)
@@ -117,11 +117,11 @@ module IsoDoc
117
117
  end
118
118
 
119
119
  CHILD_EXAMPLES_XPATH =
120
- "./*[not(self::xmlns:clause) and not(self::xmlns:appendix) and "\
121
- "not(self::xmlns:terms) and not(self::xmlns:definitions)]//"\
120
+ "./*[not(self::xmlns:clause) and not(self::xmlns:appendix) and " \
121
+ "not(self::xmlns:terms) and not(self::xmlns:definitions)]//" \
122
122
  "xmlns:example | ./xmlns:example".freeze
123
123
 
124
- CHILD_SECTIONS = "./clause | ./appendix | ./terms | ./definitions | "\
124
+ CHILD_SECTIONS = "./clause | ./appendix | ./terms | ./definitions | " \
125
125
  "./references".freeze
126
126
 
127
127
  def example_anchor_names(sections)
@@ -205,7 +205,7 @@ module IsoDoc
205
205
  label = dterm.dup
206
206
  label.xpath(ns(".//p")).each { |x| x.replace(x.children) }
207
207
  label.xpath(ns(".//index")).each(&:remove)
208
- label.children.to_xml
208
+ Common::to_xml(label.children)
209
209
  end
210
210
 
211
211
  def bookmark_anchor_names(xml)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.6
4
+ version: 2.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-21 00:00:00.000000000 Z
11
+ date: 2022-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciimath
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 0.2.0
131
+ version: 0.3.1
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 0.2.0
138
+ version: 0.3.1
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: relaton-cli
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rouge
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '4.0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '4.0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: thread_safe
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -497,7 +511,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
497
511
  - !ruby/object:Gem::Version
498
512
  version: '0'
499
513
  requirements: []
500
- rubygems_version: 3.3.7
514
+ rubygems_version: 3.3.26
501
515
  signing_key:
502
516
  specification_version: 4
503
517
  summary: Convert documents in IsoDoc into Word and HTML in AsciiDoc.