isodoc 0.5.5 → 0.5.7
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.
- checksums.yaml +4 -4
- data/CODE_OF_CONDUCT.md +46 -0
- data/LICENSE +25 -0
- data/README.adoc +1 -1
- data/Rakefile +6 -0
- data/isodoc.gemspec +1 -0
- data/lib/isodoc.rb +4 -95
- data/lib/isodoc/cleanup.rb +14 -10
- data/lib/isodoc/{notes.rb → comments.rb} +0 -73
- data/lib/isodoc/convert.rb +97 -0
- data/lib/isodoc/footnotes.rb +74 -0
- data/lib/isodoc/html.rb +41 -4
- data/lib/isodoc/i18n-en.yaml +1 -0
- data/lib/isodoc/i18n-fr.yaml +1 -0
- data/lib/isodoc/i18n-zh-Hans.yaml +1 -0
- data/lib/isodoc/i18n.rb +1 -0
- data/lib/isodoc/inline.rb +4 -12
- data/lib/isodoc/iso2wordhtml.rb +26 -13
- data/lib/isodoc/metadata.rb +23 -10
- data/lib/isodoc/references.rb +20 -22
- data/lib/isodoc/section.rb +4 -3
- data/lib/isodoc/table.rb +0 -2
- data/lib/isodoc/terms.rb +2 -13
- data/lib/isodoc/utils.rb +24 -3
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/wordconvert/comments.rb +155 -0
- data/lib/isodoc/wordconvert/convert.rb +31 -0
- data/lib/isodoc/wordconvert/footnotes.rb +80 -0
- data/lib/isodoc/wordconvert/wordconvertmodule.rb +212 -0
- data/lib/isodoc/xref_gen.rb +50 -79
- data/lib/isodoc/xref_sect_gen.rb +82 -0
- data/spec/assets/header.html +7 -0
- data/spec/assets/html.css +2 -0
- data/spec/assets/htmlcover.html +4 -0
- data/spec/assets/htmlintro.html +5 -0
- data/spec/assets/i18n.yaml +2 -0
- data/spec/assets/iso.xml +8 -0
- data/spec/assets/rice_image1.png +0 -0
- data/spec/assets/std.css +2 -0
- data/spec/assets/word.css +2 -0
- data/spec/assets/wordcover.html +3 -0
- data/spec/assets/wordintro.html +4 -0
- data/spec/isodoc/blocks_spec.rb +130 -47
- data/spec/isodoc/cleanup_spec.rb +693 -0
- data/spec/isodoc/footnotes_spec.rb +282 -0
- data/spec/isodoc/i18n_spec.rb +662 -0
- data/spec/isodoc/inline_spec.rb +344 -0
- data/spec/isodoc/lists_spec.rb +81 -18
- data/spec/isodoc/metadata_spec.rb +141 -0
- data/spec/isodoc/postproc_spec.rb +444 -0
- data/spec/isodoc/ref_spec.rb +158 -0
- data/spec/isodoc/section_spec.rb +275 -112
- data/spec/isodoc/table_spec.rb +146 -8
- data/spec/isodoc/terms_spec.rb +118 -0
- data/spec/isodoc/xref_spec.rb +490 -114
- metadata +46 -4
- data/lib/isodoc/postprocessing.rb +0 -176
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: 0.5.
|
4
|
+
version: 0.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciimath
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: roman-numerals
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: bundler
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -306,13 +320,19 @@ files:
|
|
306
320
|
- ".rubocop.ribose.yml"
|
307
321
|
- ".rubocop.tb.yml"
|
308
322
|
- ".rubocop.yml"
|
323
|
+
- CODE_OF_CONDUCT.md
|
309
324
|
- Gemfile
|
325
|
+
- LICENSE
|
310
326
|
- README.adoc
|
327
|
+
- Rakefile
|
311
328
|
- bin/rspec
|
312
329
|
- isodoc.gemspec
|
313
330
|
- lib/isodoc.rb
|
314
331
|
- lib/isodoc/blocks.rb
|
315
332
|
- lib/isodoc/cleanup.rb
|
333
|
+
- lib/isodoc/comments.rb
|
334
|
+
- lib/isodoc/convert.rb
|
335
|
+
- lib/isodoc/footnotes.rb
|
316
336
|
- lib/isodoc/html.rb
|
317
337
|
- lib/isodoc/i18n-en.yaml
|
318
338
|
- lib/isodoc/i18n-fr.yaml
|
@@ -322,19 +342,41 @@ files:
|
|
322
342
|
- lib/isodoc/iso2wordhtml.rb
|
323
343
|
- lib/isodoc/lists.rb
|
324
344
|
- lib/isodoc/metadata.rb
|
325
|
-
- lib/isodoc/notes.rb
|
326
|
-
- lib/isodoc/postprocessing.rb
|
327
345
|
- lib/isodoc/references.rb
|
328
346
|
- lib/isodoc/section.rb
|
329
347
|
- lib/isodoc/table.rb
|
330
348
|
- lib/isodoc/terms.rb
|
331
349
|
- lib/isodoc/utils.rb
|
332
350
|
- lib/isodoc/version.rb
|
351
|
+
- lib/isodoc/wordconvert/comments.rb
|
352
|
+
- lib/isodoc/wordconvert/convert.rb
|
353
|
+
- lib/isodoc/wordconvert/footnotes.rb
|
354
|
+
- lib/isodoc/wordconvert/wordconvertmodule.rb
|
333
355
|
- lib/isodoc/xref_gen.rb
|
356
|
+
- lib/isodoc/xref_sect_gen.rb
|
357
|
+
- spec/assets/header.html
|
358
|
+
- spec/assets/html.css
|
359
|
+
- spec/assets/htmlcover.html
|
360
|
+
- spec/assets/htmlintro.html
|
361
|
+
- spec/assets/i18n.yaml
|
362
|
+
- spec/assets/iso.xml
|
363
|
+
- spec/assets/rice_image1.png
|
364
|
+
- spec/assets/std.css
|
365
|
+
- spec/assets/word.css
|
366
|
+
- spec/assets/wordcover.html
|
367
|
+
- spec/assets/wordintro.html
|
334
368
|
- spec/isodoc/blocks_spec.rb
|
369
|
+
- spec/isodoc/cleanup_spec.rb
|
370
|
+
- spec/isodoc/footnotes_spec.rb
|
371
|
+
- spec/isodoc/i18n_spec.rb
|
372
|
+
- spec/isodoc/inline_spec.rb
|
335
373
|
- spec/isodoc/lists_spec.rb
|
374
|
+
- spec/isodoc/metadata_spec.rb
|
375
|
+
- spec/isodoc/postproc_spec.rb
|
376
|
+
- spec/isodoc/ref_spec.rb
|
336
377
|
- spec/isodoc/section_spec.rb
|
337
378
|
- spec/isodoc/table_spec.rb
|
379
|
+
- spec/isodoc/terms_spec.rb
|
338
380
|
- spec/isodoc/xref_spec.rb
|
339
381
|
- spec/spec_helper.rb
|
340
382
|
homepage: https://github.com/riboseinc/isodoc
|
@@ -1,176 +0,0 @@
|
|
1
|
-
require "html2doc"
|
2
|
-
require "htmlentities"
|
3
|
-
require "nokogiri"
|
4
|
-
require "liquid"
|
5
|
-
require "pp"
|
6
|
-
|
7
|
-
module IsoDoc
|
8
|
-
class Convert
|
9
|
-
def postprocess(result, filename, dir)
|
10
|
-
generate_header(filename, dir)
|
11
|
-
result = from_xhtml(cleanup(to_xhtml(result)))
|
12
|
-
toWord(result, filename, dir)
|
13
|
-
toHTML(result, filename)
|
14
|
-
end
|
15
|
-
|
16
|
-
def toWord(result, filename, dir)
|
17
|
-
result = from_xhtml(word_cleanup(to_xhtml(result)))
|
18
|
-
result = populate_template(result, :word)
|
19
|
-
Html2Doc.process(result, filename: filename, stylesheet: @wordstylesheet,
|
20
|
-
header_file: "header.html", dir: dir,
|
21
|
-
asciimathdelims: [@openmathdelim, @closemathdelim],
|
22
|
-
liststyles: { ul: @ulstyle, ol: @olstyle })
|
23
|
-
end
|
24
|
-
|
25
|
-
def word_cleanup(docxml)
|
26
|
-
word_preface(docxml)
|
27
|
-
word_annex_cleanup(docxml)
|
28
|
-
word_dl_cleanup(docxml)
|
29
|
-
docxml
|
30
|
-
end
|
31
|
-
|
32
|
-
def word_dl_cleanup1(dtd, tr)
|
33
|
-
dtd[:dt].name = "td"
|
34
|
-
dtd[:dt]["valign"] = "top"
|
35
|
-
dtd[:dt].parent = tr
|
36
|
-
dtd[:dd].name = "td"
|
37
|
-
dtd[:dd]["valign"] = "top"
|
38
|
-
dtd[:dd].parent = tr
|
39
|
-
end
|
40
|
-
|
41
|
-
def word_dl_cleanup(docxml)
|
42
|
-
docxml.xpath("//dl").each do |dl|
|
43
|
-
dl.name = "table"
|
44
|
-
extract_symbols_list(dl).each do |dtd|
|
45
|
-
tr = dl.add_child("<tr></tr>").first
|
46
|
-
word_dl_cleanup1(dtd, tr)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
# force Annex h2 to be p.h2Annex, so it is not picked up by ToC
|
52
|
-
def word_annex_cleanup(docxml)
|
53
|
-
docxml.xpath("//h2[ancestor::*[@class = 'Section3']]").each do |h2|
|
54
|
-
h2.name = "p"
|
55
|
-
h2["class"] = "h2Annex"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def word_preface(docxml)
|
60
|
-
cover = to_xhtml_fragment(File.read(@wordcoverpage, encoding: "UTF-8"))
|
61
|
-
docxml.at('//div[@class="WordSection1"]').children.first.previous =
|
62
|
-
cover.to_xml(encoding: "US-ASCII")
|
63
|
-
intro = to_xhtml_fragment(File.read(@wordintropage, encoding: "UTF-8").
|
64
|
-
sub(/WORDTOC/, make_WordToC(docxml)))
|
65
|
-
docxml.at('//div[@class="WordSection2"]').children.first.previous =
|
66
|
-
intro.to_xml(encoding: "US-ASCII")
|
67
|
-
end
|
68
|
-
|
69
|
-
def populate_template(docxml, _format)
|
70
|
-
meta = get_metadata
|
71
|
-
docxml = docxml.
|
72
|
-
gsub(/\[TERMREF\]\s*/, l10n("[#{@source_lbl}: ")).
|
73
|
-
gsub(/\s*\[\/TERMREF\]\s*/, l10n("]")).
|
74
|
-
gsub(/\s*\[ISOSECTION\]/, l10n(", ")).
|
75
|
-
gsub(/\s*\[MODIFICATION\]/, l10n(", #{@modified_lbl} — "))
|
76
|
-
template = Liquid::Template.parse(docxml)
|
77
|
-
template.render(meta.map { |k, v| [k.to_s, v] }.to_h)
|
78
|
-
end
|
79
|
-
|
80
|
-
def generate_header(filename, _dir)
|
81
|
-
template = Liquid::Template.parse(File.read(@header, encoding: "UTF-8"))
|
82
|
-
meta = get_metadata
|
83
|
-
meta[:filename] = filename
|
84
|
-
params = meta.map { |k, v| [k.to_s, v] }.to_h
|
85
|
-
File.open("header.html", "w") do |f|
|
86
|
-
f.write(template.render(params))
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
# these are in fact preprocess,
|
91
|
-
# but they are extraneous to main HTML file
|
92
|
-
def html_header(html, docxml, filename, dir)
|
93
|
-
anchor_names docxml
|
94
|
-
define_head html, filename, dir
|
95
|
-
end
|
96
|
-
|
97
|
-
# isodoc.css overrides any CSS injected by Html2Doc, which
|
98
|
-
# is inserted before this CSS.
|
99
|
-
def define_head(html, filename, _dir)
|
100
|
-
html.head do |head|
|
101
|
-
head.title { |t| t << filename }
|
102
|
-
return unless @standardstylesheet
|
103
|
-
head.style do |style|
|
104
|
-
stylesheet = File.read(@standardstylesheet).
|
105
|
-
gsub("FILENAME", filename)
|
106
|
-
style.comment "\n#{stylesheet}\n"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def titlepage(_docxml, div)
|
112
|
-
titlepage = File.read(@wordcoverpage, encoding: "UTF-8")
|
113
|
-
div.parent.add_child titlepage
|
114
|
-
end
|
115
|
-
|
116
|
-
def word_toc_entry(toclevel, heading)
|
117
|
-
bookmark = Random.rand(1000000000)
|
118
|
-
<<~TOC
|
119
|
-
<p class="MsoToc#{toclevel}"><span class="MsoHyperlink"><span
|
120
|
-
lang="EN-GB" style='mso-no-proof:yes'>
|
121
|
-
<a href="#_Toc#{bookmark}">#{heading}<span lang="EN-GB"
|
122
|
-
class="MsoTocTextSpan">
|
123
|
-
<span style='mso-tab-count:1 dotted'>. </span>
|
124
|
-
</span><span lang="EN-GB" class="MsoTocTextSpan">
|
125
|
-
<span style='mso-element:field-begin'></span></span>
|
126
|
-
<span lang="EN-GB"
|
127
|
-
class="MsoTocTextSpan"> PAGEREF _Toc#{bookmark} \\h </span>
|
128
|
-
<span lang="EN-GB" class="MsoTocTextSpan"><span
|
129
|
-
style='mso-element:field-separator'></span></span><span
|
130
|
-
lang="EN-GB" class="MsoTocTextSpan">1</span>
|
131
|
-
<span lang="EN-GB"
|
132
|
-
class="MsoTocTextSpan"></span><span
|
133
|
-
lang="EN-GB" class="MsoTocTextSpan"><span
|
134
|
-
style='mso-element:field-end'></span></span></a></span></span></p>
|
135
|
-
|
136
|
-
TOC
|
137
|
-
end
|
138
|
-
|
139
|
-
WORD_TOC_PREFACE = <<~TOC.freeze
|
140
|
-
<span lang="EN-GB"><span
|
141
|
-
style='mso-element:field-begin'></span><span
|
142
|
-
style='mso-spacerun:yes'> </span>TOC
|
143
|
-
\\o "1-2" \\h \\z \\u <span
|
144
|
-
style='mso-element:field-separator'></span></span>
|
145
|
-
TOC
|
146
|
-
|
147
|
-
WORD_TOC_SUFFIX = <<~TOC.freeze
|
148
|
-
<p class="MsoToc1"><span lang="EN-GB"><span
|
149
|
-
style='mso-element:field-end'></span></span><span
|
150
|
-
lang="EN-GB"><o:p> </o:p></span></p>
|
151
|
-
TOC
|
152
|
-
|
153
|
-
def header_strip(h)
|
154
|
-
h = h.to_s.gsub(%r{<br/>}, " ").
|
155
|
-
sub(/<h[12][^>]*>/, "").sub(%r{</h[12]>}, "")
|
156
|
-
h1 = to_xhtml_fragment(h)
|
157
|
-
h1.xpath(".//*").each do |x|
|
158
|
-
if x.name == "span" && x["style"] == "MsoCommentReference"
|
159
|
-
x.children.remove
|
160
|
-
x.content = ""
|
161
|
-
end
|
162
|
-
end
|
163
|
-
from_xhtml(h1)
|
164
|
-
end
|
165
|
-
|
166
|
-
def make_WordToC(docxml)
|
167
|
-
toc = ""
|
168
|
-
docxml.xpath("//h1 | //h2[not(ancestor::*[@class = 'Section3'])]").
|
169
|
-
each do |h|
|
170
|
-
toc += word_toc_entry(h.name == "h1" ? 1 : 2, header_strip(h))
|
171
|
-
end
|
172
|
-
toc.sub(/(<p class="MsoToc1">)/,
|
173
|
-
%{\\1#{WORD_TOC_PREFACE}}) + WORD_TOC_SUFFIX
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|