isodoc 0.9.16 → 0.9.17

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b26664ab07349891d3a840f0c98f4a9bea787bc176dd6beb8580608564d4cd1c
4
- data.tar.gz: aa45cdbd35faeed78af75730ec6cac6275e7b91e40bcc8f9e1d08f7484de8846
3
+ metadata.gz: 3db2fc3806a2953f1cd51c3edc7a3f8abe930e7a85562f1e3786452a987eb427
4
+ data.tar.gz: 92247d33287542fec1bc39186ba8670dd2570e797895a49cfe3257156840099a
5
5
  SHA512:
6
- metadata.gz: fc0285784f98018d1d9c333fd5fa3e54ef5de5867447cbbcb5c1749038b5c749169c1d9c69a72af9ef6dc6a4073a62c5bedcabca23a88a943171e1e8f08b796b
7
- data.tar.gz: 94e7ec97ed84bcece612a9e3237c053780de2d6b2e534049a7147a5409699b3129ba3c07e5c88fa9464a851b10133c70d9001d795102e065af2b827a4230afb2
6
+ metadata.gz: 2a59a21657f9148c4ce184b4429aa1583b096b7ad2925c23be8b0744522efbd74e63aba7d958a9fdcb16ba6bf1d0165ef8e8ffeb059f0406c0068dbdad589188
7
+ data.tar.gz: 4c3dcacbc1e711db4618070f17f6b9e8d1b97c72745ed959b620e705fe4eb878a54c3f2ccdf17ff3fea6e3d510e0faf36afa1a7a2d87b2de1c979f3dfc2fee0b
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- isodoc (0.9.16)
4
+ isodoc (0.9.17)
5
5
  asciimath
6
6
  html2doc (~> 0.8.6)
7
7
  htmlentities (~> 4.3.4)
@@ -61,8 +61,9 @@ GEM
61
61
  rb-inotify (~> 0.9, >= 0.9.7)
62
62
  ruby_dep (~> 1.2)
63
63
  lumberjack (1.0.13)
64
- metanorma (0.3.7)
64
+ metanorma (0.3.8)
65
65
  asciidoctor
66
+ htmlentities
66
67
  method_source (0.9.2)
67
68
  mime-types (3.2.2)
68
69
  mime-types-data (~> 3.2015)
@@ -116,11 +116,17 @@ module IsoDoc::Function
116
116
  end
117
117
 
118
118
  def sourcecode_name_parse(_node, div, name)
119
- div.p **{ class: "FigureTitle", align: "center" } do |p|
119
+ div.p **{ class: "SourceTitle", align: "center" } do |p|
120
120
  name.children.each { |n| parse(n, p) }
121
121
  end
122
122
  end
123
123
 
124
+ def admonition_name_parse(_node, div, name)
125
+ div.p **{ class: "AdmonitionTitle", align: "center" } do |p|
126
+ name.children.each { |n| parse(n, p) }
127
+ end
128
+ end
129
+
124
130
  def sourcecode_parse(node, out)
125
131
  name = node.at(ns("./name"))
126
132
  out.p **attr_code(id: node["id"], class: "Sourcecode") do |div|
@@ -151,12 +157,21 @@ module IsoDoc::Function
151
157
  "Admonition"
152
158
  end
153
159
 
160
+ def admonition_name(node, type)
161
+ name = node&.at(ns("./name")) and return name
162
+ name = Nokogiri::XML::Node.new('name', node.document)
163
+ return unless type && @admonition[type]
164
+ name << @admonition[type]&.upcase
165
+ name
166
+ end
167
+
154
168
  def admonition_parse(node, out)
155
- name = node["type"]
169
+ type = node["type"]
170
+ name = admonition_name(node, type)
156
171
  out.div **{ class: admonition_class(node) } do |t|
157
- t.title { |b| b << @admonition[name].upcase } if name
172
+ admonition_name_parse(node, t, name) if name
158
173
  node.children.each do |n|
159
- parse(n, t)
174
+ parse(n, t) unless n.name == "name"
160
175
  end
161
176
  end
162
177
  end
@@ -212,7 +227,8 @@ module IsoDoc::Function
212
227
  author = node.at(ns("./author"))
213
228
  source = node.at(ns("./source"))
214
229
  out.p **{ class: "QuoteAttribution" } do |p|
215
- p << "&mdash; #{author.text}, " if author
230
+ p << "&mdash; #{author.text}" if author
231
+ p << ", " if author && source
216
232
  eref_parse(source, p) if source
217
233
  end
218
234
  end
@@ -24,7 +24,7 @@ module IsoDoc::Function
24
24
  end
25
25
 
26
26
  def tbody_parse(node, t)
27
- tbody = node.at(ns("./tbody"))
27
+ tbody = node.at(ns("./tbody")) || return
28
28
  t.tbody do |h|
29
29
  tbody.element_children.each_with_index do |n, i|
30
30
  tr_parse(n, h, i, tbody.element_children.size, false)
@@ -140,7 +140,8 @@ module IsoDoc::Function
140
140
  gsub(/\s*\[\/TERMREF\]\s*/, l10n("]")).
141
141
  gsub(/\s*\[MODIFICATION\]/, l10n(", #{@modified_lbl} &mdash; "))
142
142
  template = liquid(docxml)
143
- template.render(meta.map { |k, v| [k.to_s, empty2nil(v)] }.to_h)
143
+ template.render(meta.map { |k, v| [k.to_s, empty2nil(v)] }.to_h).
144
+ gsub('&lt;', '&#x3c;').gsub('&gt;', '&#x3e;').gsub('&amp;', '&#x26;')
144
145
  end
145
146
  end
146
147
  end
@@ -112,10 +112,47 @@ module IsoDoc::HtmlFunction
112
112
  d.children.empty? or d.children.first.previous = html_button()
113
113
  end
114
114
 
115
+ def sourcecode_highlighter
116
+ '<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>'
117
+ end
118
+
119
+ def sourcecodelang(lang)
120
+ return unless lang
121
+ case lang.downcase
122
+ when "javascript" then "lang-js"
123
+ when "c" then "lang-c"
124
+ when "c+" then "lang-cpp"
125
+ when "console" then "lang-bsh"
126
+ when "ruby" then "lang-rb"
127
+ when "html" then "lang-html"
128
+ when "java" then "lang-java"
129
+ when "xml" then "lang-xml"
130
+ when "perl" then "lang-perl"
131
+ when "python" then "lang-py"
132
+ when "xsl" then "lang-xsl"
133
+ else
134
+ ""
135
+ end
136
+ end
137
+
138
+ def sourcecode_parse(node, out)
139
+ name = node.at(ns("./name"))
140
+ out.pre **attr_code(id: node["id"],
141
+ class: "prettyprint #{sourcecodelang(node&.at(ns('./@lang'))&.value)}") do |div|
142
+ @sourcecode = true
143
+ node.children.each do |n|
144
+ parse(n, div) unless n.name == "name"
145
+ end
146
+ @sourcecode = false
147
+ sourcecode_name_parse(node, div, name) if name
148
+ end
149
+ end
150
+
115
151
  def html_preface(docxml)
116
152
  html_cover(docxml) if @htmlcoverpage
117
153
  html_intro(docxml) if @htmlintropage
118
154
  docxml.at("//body") << mathjax(@openmathdelim, @closemathdelim)
155
+ docxml.at("//body") << sourcecode_highlighter
119
156
  if @scripts
120
157
  scripts = File.read(@scripts, encoding: "UTF-8")
121
158
  a = docxml.at("//body").add_child docxml.create_cdata(scripts)
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "0.9.16".freeze
2
+ VERSION = "0.9.17".freeze
3
3
  end
@@ -397,7 +397,7 @@ B</pre>
397
397
  expect(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)).to be_equivalent_to <<~"OUTPUT"
398
398
  <iso-standard xmlns="http://riboseinc.com/isoxml">
399
399
  <preface><foreword>
400
- <sourcecode id="samplecode">
400
+ <sourcecode lang="ruby" id="samplecode">
401
401
  <name>Ruby <em>code</em></name>
402
402
  puts x
403
403
  </sourcecode>
@@ -408,7 +408,7 @@ B</pre>
408
408
  <br/>
409
409
  <div>
410
410
  <h1 class="ForewordTitle">Foreword</h1>
411
- <p id="samplecode" class="Sourcecode"><br/>&#160;&#160;&#160; <br/>&#160; puts x<br/><p class="FigureTitle" align="center">Ruby <i>code</i></p></p>
411
+ <pre id="samplecode" class="prettyprint lang-rb"><br/>&#160;&#160;&#160; <br/>&#160; puts x<br/><p class="SourceTitle" align="center">Ruby <i>code</i></p></pre>
412
412
  </div>
413
413
  <p class="zzSTDTitle1"/>
414
414
  </div>
@@ -417,6 +417,47 @@ B</pre>
417
417
  OUTPUT
418
418
  end
419
419
 
420
+ it "processes sourcecode (Word)" do
421
+ expect(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true)).to be_equivalent_to <<~"OUTPUT"
422
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
423
+ <preface><foreword>
424
+ <sourcecode lang="ruby" id="samplecode">
425
+ <name>Ruby <em>code</em></name>
426
+ puts x
427
+ </sourcecode>
428
+ </foreword></preface>
429
+ </iso-standard>
430
+ INPUT
431
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
432
+ <head/>
433
+ <body lang="EN-US" link="blue" vlink="#954F72">
434
+ <div class="WordSection1">
435
+ <p>&#160;</p>
436
+ </div>
437
+ <p>
438
+ <br clear="all" class="section"/>
439
+ </p>
440
+ <div class="WordSection2">
441
+ <p>
442
+ <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
443
+ </p>
444
+ <div>
445
+ <h1 class="ForewordTitle">Foreword</h1>
446
+ <p id="samplecode" class="Sourcecode"><br/>&#160;&#160;&#160; <br/>&#160; puts x<br/><p class="SourceTitle" align="center">Ruby <i>code</i></p></p>
447
+ </div>
448
+ <p>&#160;</p>
449
+ </div>
450
+ <p>
451
+ <br clear="all" class="section"/>
452
+ </p>
453
+ <div class="WordSection3">
454
+ <p class="zzSTDTitle1"/>
455
+ </div>
456
+ </body>
457
+ </html>
458
+ OUTPUT
459
+ end
460
+
420
461
  it "processes sourcecode with escapes preserved" do
421
462
  expect(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)).to be_equivalent_to <<~"OUTPUT"
422
463
  <iso-standard xmlns="http://riboseinc.com/isoxml">
@@ -432,7 +473,7 @@ B</pre>
432
473
  <br/>
433
474
  <div>
434
475
  <h1 class="ForewordTitle">Foreword</h1>
435
- <p id="samplecode" class="Sourcecode"><br/>&#160;&#160;&#160; <br/>&#160; &lt;xml&gt;<br/><p class="FigureTitle" align="center">XML code</p></p>
476
+ <pre id="samplecode" class="prettyprint "><br/>&#160;&#160;&#160; <br/>&#160; &lt;xml&gt;<br/><p class="SourceTitle" align="center">XML code</p></pre>
436
477
  </div>
437
478
  <p class="zzSTDTitle1"/>
438
479
  </div>
@@ -460,11 +501,11 @@ B</pre>
460
501
  <br/>
461
502
  <div>
462
503
  <h1 class="ForewordTitle">Foreword</h1>
463
- <p id="_" class="Sourcecode">puts "Hello, world." &lt;1&gt;<br/>&#160;&#160; %w{a b c}.each do |x|<br/>&#160;&#160;&#160;&#160; puts x &lt;2&gt;<br/>&#160;&#160; end<span class="zzMoveToFollowing">&lt;1&gt; </span>
504
+ <pre id="_" class="prettyprint ">puts "Hello, world." &lt;1&gt;<br/>&#160;&#160; %w{a b c}.each do |x|<br/>&#160;&#160;&#160;&#160; puts x &lt;2&gt;<br/>&#160;&#160; end<span class="zzMoveToFollowing">&lt;1&gt; </span>
464
505
  <p class="Sourcecode" id="_">This is one callout</p>
465
506
  <span class="zzMoveToFollowing">&lt;2&gt; </span>
466
507
  <p class="Sourcecode" id="_">This is another callout</p>
467
- </p>
508
+ </pre>
468
509
  </div>
469
510
  <p class="zzSTDTitle1"/>
470
511
  </div>
@@ -487,7 +528,7 @@ B</pre>
487
528
  <br/>
488
529
  <div>
489
530
  <h1 class="ForewordTitle">Foreword</h1>
490
- <div class="Admonition"><title>CAUTION</title>
531
+ <div class="Admonition"><p class="AdmonitionTitle" align="center">CAUTION</p>
491
532
  <p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p>
492
533
  </div>
493
534
  </div>
@@ -498,6 +539,33 @@ B</pre>
498
539
  OUTPUT
499
540
  end
500
541
 
542
+ it "processes admonitions with titles" do
543
+ expect(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)).to be_equivalent_to <<~"OUTPUT"
544
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
545
+ <preface><foreword>
546
+ <admonition id="_70234f78-64e5-4dfc-8b6f-f3f037348b6a" type="caution">
547
+ <name>Title</name>
548
+ <p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p>
549
+ </admonition>
550
+ </foreword></preface>
551
+ </iso-standard>
552
+ INPUT
553
+ #{HTML_HDR}
554
+ <br/>
555
+ <div>
556
+ <h1 class="ForewordTitle">Foreword</h1>
557
+ <div class="Admonition"><p class="AdmonitionTitle" align="center">Title</p>
558
+ <p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p>
559
+ </div>
560
+ </div>
561
+ <p class="zzSTDTitle1"/>
562
+ </div>
563
+ </body>
564
+ </html>
565
+ OUTPUT
566
+ end
567
+
568
+
501
569
  it "processes formulae" do
502
570
  expect(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)).to be_equivalent_to <<~"OUTPUT"
503
571
  <iso-standard xmlns="http://riboseinc.com/isoxml">
@@ -153,6 +153,7 @@ RSpec.describe IsoDoc do
153
153
  });
154
154
  </script>
155
155
  <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=AM_HTMLorMML"></script>
156
+ <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>
156
157
  </body>
157
158
  OUTPUT
158
159
  end
@@ -683,4 +683,62 @@ ICAgICAgIDogRU5EIERPQyBJRAoKRklMRU5BTUU6IHRlc3QKCg==
683
683
  OUTPUT
684
684
  end
685
685
 
686
+ it "does not lose HTML escapes in postprocessing" do
687
+ FileUtils.rm_f "test.doc"
688
+ FileUtils.rm_f "test.html"
689
+ IsoDoc::HtmlConvert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.css"}).convert("test", <<~"INPUT", false)
690
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
691
+ <preface><foreword>
692
+ <sourcecode id="samplecode">
693
+ <name>XML code</name>
694
+ &lt;xml&gt; &amp;
695
+ </sourcecode>
696
+ </foreword></preface>
697
+ </iso-standard>
698
+ INPUT
699
+ html = File.read("test.html").sub(/^.*<main class="main-section">/m, '<main class="main-section">').
700
+ sub(%r{</main>.*$}m, "</main>")
701
+ expect(html).to be_equivalent_to <<~"OUTPUT"
702
+ <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
703
+ <br />
704
+ <div>
705
+ <h1 class="ForewordTitle">Foreword</h1>
706
+ <pre id="samplecode" class="prettyprint "><br />&#xA0;&#xA0;&#xA0; <br />&#xA0; &lt;xml&gt; &amp;<br /><p class="SourceTitle" align="center">XML code</p></pre>
707
+ </div>
708
+ <p class="zzSTDTitle1"></p>
709
+ </main>
710
+ OUTPUT
711
+ end
712
+
713
+
714
+ it "does not lose HTML escapes in postprocessing (Word)" do
715
+ FileUtils.rm_f "test.doc"
716
+ FileUtils.rm_f "test.html"
717
+ IsoDoc::WordConvert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.css"}).convert("test", <<~"INPUT", false)
718
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
719
+ <preface><foreword>
720
+ <sourcecode id="samplecode">
721
+ <name>XML code</name>
722
+ &lt;xml&gt; &amp;
723
+ </sourcecode>
724
+ </foreword></preface>
725
+ </iso-standard>
726
+ INPUT
727
+ word = File.read("test.doc").sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2">').
728
+ sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
729
+ expect(word).to be_equivalent_to <<~"OUTPUT"
730
+ <div class="WordSection2">
731
+ <p class="MsoNormal">
732
+ <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
733
+ </p>
734
+ <div>
735
+ <h1 class="ForewordTitle">Foreword</h1>
736
+ <p class="Sourcecode"><a name="samplecode" id="samplecode"></a><br/>&#xA0;&#xA0;&#xA0; <br/>&#xA0; &lt;xml&gt; &amp;<br/><p class="SourceTitle" align="center">XML code</p></p>
737
+ </div>
738
+ <p class="MsoNormal">&#xA0;</p>
739
+ </div>
740
+
741
+ OUTPUT
742
+ end
743
+
686
744
  end
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.9.16
4
+ version: 0.9.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-31 00:00:00.000000000 Z
11
+ date: 2019-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciimath