isodoc 0.9.16 → 0.9.17

Sign up to get free protection for your applications and to get access to all the features.
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