Class: IsoDoc::Iec::WordConvert
- Inherits:
-
IsoDoc::Iso::WordConvert
- Object
- IsoDoc::Iso::WordConvert
- IsoDoc::Iec::WordConvert
show all
- Includes:
- BaseConvert, Init
- Defined in:
- lib/isodoc/iec/word_convert.rb
Constant Summary
collapse
- WORD_TOC_TABLE_PREFACE1 =
" <span lang=\"EN-GB\"><span\nstyle='mso-element:field-begin'></span><span\nstyle='mso-spacerun:yes'> </span>TOC\n\\\\h \\\\z \\\\t "TableTitle,tabletitle" <span\nstyle='mso-element:field-separator'></span></span>\n".freeze
- WORD_TOC_FIGURE_PREFACE1 =
" <span lang=\"EN-GB\"><span\nstyle='mso-element:field-begin'></span><span\nstyle='mso-spacerun:yes'> </span>TOC\n\\\\h \\\\z \\\\t "FigureTitle,figuretitle" <span\nstyle='mso-element:field-separator'></span></span>\n".freeze
- BOILERPLATE_PARAS =
Incredibly, the numbered boilerplate list in IEC is NOT A LIST, and it violates numbering conventions for ordered lists (arabic not alpha)
"//div[@class = 'boilerplate_legal']//li/p".freeze
Instance Method Summary
collapse
-
#annex_name(_annex, name, div) ⇒ Object
-
#authority_cleanup(docxml) ⇒ Object
-
#bibliography_attrs ⇒ Object
-
#default_file_locations(_options) ⇒ Object
-
#default_fonts(options) ⇒ Object
-
#figure_name_attrs(_node) ⇒ Object
-
#font_choice(options) ⇒ Object
-
#formula_parse1(node, out) ⇒ Object
-
#header_strip(hdr) ⇒ Object
-
#initialize(options) ⇒ WordConvert
constructor
A new instance of WordConvert.
-
#insert_toc(intro, docxml, level) ⇒ Object
-
#make_body1(body, _docxml) ⇒ Object
-
#make_FigureWordToC(docxml) ⇒ Object
-
#make_TableWordToC(docxml) ⇒ Object
-
#make_tr_attr(cell, row, totalrows, header) ⇒ Object
-
#non_annex_h1(docxml) ⇒ Object
-
#para_class(_node) ⇒ Object
-
#style_cleanup(docxml) ⇒ Object
-
#table_title_attrs(_node) ⇒ Object
-
#termref_attrs ⇒ Object
-
#tr_parse(node, out, ord, totalrows, header) ⇒ Object
-
#word_annex_cleanup(docxml) ⇒ Object
-
#word_cleanup(docxml) ⇒ Object
-
#word_cover(docxml) ⇒ Object
-
#word_foreword_cleanup(docxml) ⇒ Object
-
#word_table_cleanup(docxml) ⇒ Object
-
#word_table_cleanup1(docxml, style) ⇒ Object
-
#word_toc_preface(level) ⇒ Object
Methods included from Init
#convert1, #i18n_init, #metadata_init, #xref_init
#admitted_term_parse, #biblio_list, #bibliography, #boilerplate, #deprecated_term_parse, #foreword, #iec_orgname, #middle_title, #set_termdomain, #term_parse, #term_suffix, #termref_cleanup, #terms_parse
Constructor Details
#initialize(options) ⇒ WordConvert
9
10
11
12
|
# File 'lib/isodoc/iec/word_convert.rb', line 9
def initialize(options)
super
@libdir = File.dirname(__FILE__)
end
|
Instance Method Details
#annex_name(_annex, name, div) ⇒ Object
223
224
225
226
227
228
229
|
# File 'lib/isodoc/iec/word_convert.rb', line 223
def annex_name(_annex, name, div)
return if name.nil?
div.h1 **{ class: "Annex" } do |t|
name.children.each { |c2| parse(c2, t) }
end
end
|
#authority_cleanup(docxml) ⇒ Object
187
188
189
190
191
192
|
# File 'lib/isodoc/iec/word_convert.rb', line 187
def authority_cleanup(docxml)
auth = docxml.at("//div[@id = 'boilerplate-feedback' or "\
"@class = 'boilerplate-feedback']")
auth&.remove
super
end
|
#bibliography_attrs ⇒ Object
200
201
202
|
# File 'lib/isodoc/iec/word_convert.rb', line 200
def bibliography_attrs
{ class: "Section3" }
end
|
#default_file_locations(_options) ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/isodoc/iec/word_convert.rb', line 32
def default_file_locations(_options)
@libdir = File.dirname(__FILE__)
{
wordstylesheet: html_doc_path("wordstyle.scss"),
standardstylesheet: html_doc_path("isodoc.scss"),
header: html_doc_path("header.html"),
wordcoverpage: html_doc_path("word_iec_titlepage.html"),
wordintropage: html_doc_path("word_iec_intro.html"),
ulstyle: "l22",
olstyle: "l2",
}
end
|
#default_fonts(options) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/isodoc/iec/word_convert.rb', line 20
def default_fonts(options)
{
bodyfont: font_choice(options),
headerfont: font_choice(options),
monospacefont: '"Courier New",monospace',
normalfontsize: "10.0pt",
footnotefontsize: "8.0pt",
smallerfontsize: "8.0pt",
monospacefontsize: "9.0pt",
}
end
|
208
209
210
|
# File 'lib/isodoc/iec/word_convert.rb', line 208
def figure_name_attrs(_node)
{ class: "FigureTitle", style: "text-align:center;" }
end
|
#font_choice(options) ⇒ Object
14
15
16
17
18
|
# File 'lib/isodoc/iec/word_convert.rb', line 14
def font_choice(options)
if options[:script] == "Hans" then '"Source Han Sans",serif'
else '"Arial",sans-serif'
end
end
|
231
232
233
234
235
236
237
238
239
240
241
242
|
# File 'lib/isodoc/iec/word_convert.rb', line 231
def formula_parse1(node, out)
out.div **attr_code(class: "formula") do |div|
div.p **attr_code(class: "formula") do |_p|
insert_tab(div, 1)
parse(node.at(ns("./stem")), div)
if lbl = node&.at(ns("./name"))&.text
insert_tab(div, 1)
div << "(#{lbl})"
end
end
end
end
|
101
102
103
104
|
# File 'lib/isodoc/iec/word_convert.rb', line 101
def (hdr)
hdr = hdr.to_s.gsub(/<\/?p[^>]*>/, "")
super
end
|
#insert_toc(intro, docxml, level) ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/isodoc/iec/word_convert.rb', line 45
def insert_toc(intro, docxml, level)
toc = ""
toc += make_WordToC(docxml, level)
if docxml.at("//p[@class = 'TableTitle']")
toc += make_TableWordToC(docxml)
end
if docxml.at("//p[@class = 'FigureTitle']")
toc += make_FigureWordToC(docxml)
end
intro.sub(/WORDTOC/, toc)
end
|
#make_body1(body, _docxml) ⇒ Object
194
|
# File 'lib/isodoc/iec/word_convert.rb', line 194
def make_body1(body, _docxml); end
|
82
83
84
85
86
87
88
89
|
# File 'lib/isodoc/iec/word_convert.rb', line 82
def make_FigureWordToC(docxml)
toc = ""
docxml.xpath("//p[@class = 'FigureTitle']").each do |h|
toc += word_toc_entry(1, (h))
end
toc.sub(/(<p class="MsoToc1">)/,
%{\\1#{WORD_TOC_FIGURE_PREFACE1}}) + WORD_TOC_SUFFIX1
end
|
#make_TableWordToC(docxml) ⇒ Object
73
74
75
76
77
78
79
80
|
# File 'lib/isodoc/iec/word_convert.rb', line 73
def make_TableWordToC(docxml)
toc = ""
docxml.xpath("//p[@class = 'TableTitle']").each do |h|
toc += word_toc_entry(1, (h))
end
toc.sub(/(<p class="MsoToc1">)/,
%{\\1#{WORD_TOC_TABLE_PREFACE1}}) + WORD_TOC_SUFFIX1
end
|
#make_tr_attr(cell, row, totalrows, header) ⇒ Object
112
113
114
115
116
117
|
# File 'lib/isodoc/iec/word_convert.rb', line 112
def make_tr_attr(cell, row, totalrows, )
ret = super
css_class =
cell.name == "th" || ? "TABLE-col-heading" : "TABLE-cell"
ret.merge("class": css_class)
end
|
#non_annex_h1(docxml) ⇒ Object
159
160
161
162
163
164
165
166
|
# File 'lib/isodoc/iec/word_convert.rb', line 159
def non_annex_h1(docxml)
docxml.xpath("//h1[not(@class)]").each do |h1|
h1["class"] = "main"
end
docxml.xpath("//h1[@class = 'Section3']").each do |h1|
h1["class"] = "main"
end
end
|
#para_class(_node) ⇒ Object
216
217
218
219
220
221
|
# File 'lib/isodoc/iec/word_convert.rb', line 216
def para_class(_node)
classtype = nil
classtype = "MsoCommentText" if
classtype = "Sourcecode" if @annotation
classtype
end
|
#style_cleanup(docxml) ⇒ Object
198
|
# File 'lib/isodoc/iec/word_convert.rb', line 198
def style_cleanup(docxml); end
|
#table_title_attrs(_node) ⇒ Object
212
213
214
|
# File 'lib/isodoc/iec/word_convert.rb', line 212
def table_title_attrs(_node)
{ class: "TableTitle", style: "text-align:center;" }
end
|
#termref_attrs ⇒ Object
204
205
206
|
# File 'lib/isodoc/iec/word_convert.rb', line 204
def termref_attrs
{}
end
|
#tr_parse(node, out, ord, totalrows, header) ⇒ Object
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/isodoc/iec/word_convert.rb', line 119
def tr_parse(node, out, ord, totalrows, )
out.tr do |r|
node.elements.each do |td|
attrs = make_tr_attr(td, ord, totalrows - 1, )
attrs[:class] = "TABLE-col-heading" if
r.send td.name, **attr_code(attrs) do |entry|
td.children.each { |n| parse(n, entry) }
end
end
end
end
|
#word_annex_cleanup(docxml) ⇒ Object
154
155
156
157
|
# File 'lib/isodoc/iec/word_convert.rb', line 154
def word_annex_cleanup(docxml)
super
non_annex_h1(docxml)
end
|
#word_cleanup(docxml) ⇒ Object
106
107
108
109
110
|
# File 'lib/isodoc/iec/word_convert.rb', line 106
def word_cleanup(docxml)
word_foreword_cleanup(docxml)
word_table_cleanup(docxml)
super
end
|
#word_cover(docxml) ⇒ Object
196
|
# File 'lib/isodoc/iec/word_convert.rb', line 196
def word_cover(docxml); end
|
#word_foreword_cleanup(docxml) ⇒ Object
173
174
175
176
177
178
179
180
181
182
183
184
185
|
# File 'lib/isodoc/iec/word_convert.rb', line 173
def word_foreword_cleanup(docxml)
docxml.xpath(BOILERPLATE_PARAS).each_with_index do |l, i|
l["class"] = "FOREWORD"
l.children.first.add_previous_sibling(
%{#{i + 1})<span style="mso-tab-count:1">  </span>},
)
end
docxml.xpath("//div[@class = 'boilerplate_legal']//li").each do |l|
l.replace(l.children)
end
b = docxml.at("div[@class = 'boilerplate_legal']")
b.replace(b.children)
end
|
#word_table_cleanup(docxml) ⇒ Object
131
132
133
134
135
136
137
138
|
# File 'lib/isodoc/iec/word_convert.rb', line 131
def word_table_cleanup(docxml)
docxml.xpath("//table//*[@class = 'Sourcecode']").each do |p|
p["class"] = "CODE-TableCell"
end
%w(TABLE-col-heading TABLE-cell).each do |style|
word_table_cleanup1(docxml, style)
end
end
|
#word_table_cleanup1(docxml, style) ⇒ Object
140
141
142
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/isodoc/iec/word_convert.rb', line 140
def word_table_cleanup1(docxml, style)
%w(td th).each do |tdh|
docxml.xpath("//#{tdh}[@class = '#{style}'][not(descendant::p)]")
.each do |td|
p = Nokogiri::XML::Element.new("p", docxml)
td.children.each { |c| c.parent = p }
p.parent = td
end
docxml.xpath("//#{tdh}[@class = '#{style}']//p").each do |p|
p["class"] ||= style
end
end
end
|
#word_toc_preface(level) ⇒ Object
91
92
93
94
95
96
97
98
99
|
# File 'lib/isodoc/iec/word_convert.rb', line 91
def word_toc_preface(level)
" <span lang=\"EN-GB\"><span\n style='mso-element:field-begin'></span><span\n style='mso-spacerun:yes'> </span>TOC\n \\\\o "1-\#{level}" \\\\h \\\\z \\\\u <span\n style='mso-element:field-separator'></span></span>\n TOC\nend\n".freeze
|