review 3.1.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby-win.yml +45 -0
- data/.github/workflows/ruby.yml +27 -0
- data/.rubocop.yml +161 -34
- data/.travis.yml +16 -15
- data/Dockerfile +21 -5
- data/NEWS.ja.md +394 -0
- data/NEWS.md +395 -1
- data/README.md +10 -7
- data/appveyor.yml +1 -3
- data/bin/review-catalog-converter +5 -5
- data/bin/review-check +10 -12
- data/bin/review-checkdep +2 -2
- data/bin/review-compile +17 -23
- data/bin/review-epubmaker +3 -35
- data/bin/review-idgxmlmaker +16 -0
- data/bin/review-index +2 -89
- data/bin/review-preproc +13 -13
- data/bin/review-validate +4 -4
- data/bin/review-vol +4 -78
- data/doc/config.yml.sample +47 -12
- data/doc/config.yml.sample-simple +3 -2
- data/doc/format.ja.md +120 -17
- data/doc/format.md +119 -27
- data/doc/makeindex.ja.md +2 -2
- data/doc/pdfmaker.ja.md +43 -1
- data/doc/pdfmaker.md +42 -1
- data/doc/quickstart.ja.md +45 -25
- data/doc/quickstart.md +37 -16
- data/lib/epubmaker/content.rb +3 -2
- data/lib/epubmaker/epubcommon.rb +34 -27
- data/lib/epubmaker/epubv2.rb +5 -6
- data/lib/epubmaker/epubv3.rb +21 -18
- data/lib/epubmaker/producer.rb +2 -1
- data/lib/review/book.rb +2 -2
- data/lib/review/book/base.rb +91 -96
- data/lib/review/book/bib.rb +21 -0
- data/lib/review/book/book_unit.rb +155 -0
- data/lib/review/book/chapter.rb +48 -29
- data/lib/review/book/index.rb +46 -240
- data/lib/review/book/index/item.rb +46 -0
- data/lib/review/book/page_metric.rb +7 -7
- data/lib/review/book/part.rb +45 -10
- data/lib/review/book/volume.rb +4 -5
- data/lib/review/builder.rb +172 -56
- data/lib/review/catalog.rb +14 -17
- data/lib/review/compiler.rb +219 -121
- data/lib/review/configure.rb +39 -7
- data/lib/review/converter.rb +1 -1
- data/lib/review/epub2html.rb +43 -5
- data/lib/review/epubmaker.rb +69 -27
- data/lib/review/extentions/string.rb +0 -4
- data/lib/review/htmlbuilder.rb +112 -101
- data/lib/review/htmlutils.rb +9 -13
- data/lib/review/i18n.rb +3 -3
- data/lib/review/idgxmlbuilder.rb +202 -78
- data/lib/review/idgxmlmaker.rb +186 -0
- data/lib/review/index_builder.rb +653 -0
- data/lib/review/init-web/finish.html +10 -0
- data/lib/review/init-web/index.html +190 -0
- data/lib/review/init-web/review-layout-design.js +691 -0
- data/lib/review/init.rb +129 -46
- data/lib/review/latexbuilder.rb +255 -92
- data/lib/review/lineinput.rb +1 -1
- data/lib/review/location.rb +32 -0
- data/lib/review/logger.rb +4 -8
- data/lib/review/makerhelper.rb +35 -5
- data/lib/review/markdownbuilder.rb +50 -38
- data/lib/review/md2inaobuilder.rb +3 -5
- data/lib/review/pdfmaker.rb +60 -57
- data/lib/review/plaintextbuilder.rb +154 -87
- data/lib/review/preprocessor.rb +20 -42
- data/lib/review/rstbuilder.rb +57 -38
- data/lib/review/sec_counter.rb +13 -0
- data/lib/review/textmaker.rb +23 -15
- data/lib/review/textutils.rb +76 -2
- data/lib/review/tocprinter.rb +230 -102
- data/lib/review/topbuilder.rb +139 -60
- data/lib/review/update.rb +24 -24
- data/lib/review/version.rb +1 -1
- data/lib/review/volumeprinter.rb +98 -0
- data/lib/review/webmaker.rb +20 -24
- data/lib/review/webtocprinter.rb +38 -35
- data/lib/review/yamlloader.rb +26 -16
- data/review.gemspec +6 -4
- data/samples/sample-book/README.md +7 -2
- data/samples/sample-book/src/.gitignore +154 -0
- data/samples/sample-book/src/config-ebook.yml +4 -0
- data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
- data/samples/sample-book/src/config-jlreq.yml +6 -0
- data/samples/sample-book/src/config.yml +2 -2
- data/samples/sample-book/src/lib/tasks/review.rake +29 -14
- data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
- data/samples/syntax-book/Gemfile +1 -1
- data/samples/syntax-book/ch01.re +4 -2
- data/samples/syntax-book/ch02.re +8 -16
- data/samples/syntax-book/ch03.re +3 -6
- data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
- data/samples/syntax-book/config-jlreq.yml +5 -0
- data/samples/syntax-book/config-print.yml +3 -0
- data/samples/syntax-book/config.yml +1 -1
- data/samples/syntax-book/lib/tasks/review.rake +30 -15
- data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
- data/templates/latex/config.erb +39 -25
- data/templates/latex/layout.tex.erb +1 -0
- data/templates/latex/review-jlreq/README.md +3 -1
- data/templates/latex/review-jlreq/review-base.sty +161 -50
- data/templates/latex/review-jlreq/review-jlreq.cls +21 -22
- data/templates/latex/review-jlreq/review-style.sty +4 -1
- data/templates/latex/review-jsbook/README.md +46 -5
- data/templates/latex/review-jsbook/review-base.sty +123 -35
- data/templates/latex/review-jsbook/review-jsbook.cls +10 -4
- data/templates/latex/review-jsbook/review-style.sty +5 -2
- data/templates/opf/epubv3.opf.erb +1 -0
- data/templates/web/html/layout-html5.html.erb +3 -3
- data/test/assets/test_template.tex +19 -7
- data/test/assets/test_template_backmatter.tex +19 -7
- data/test/book_test_helper.rb +11 -5
- data/test/test_book.rb +124 -79
- data/test/test_book_chapter.rb +97 -54
- data/test/test_book_part.rb +3 -3
- data/test/test_builder.rb +38 -13
- data/test/test_catalog.rb +24 -42
- data/test/test_catalog_converter_cmd.rb +1 -1
- data/test/test_converter.rb +1 -0
- data/test/test_epub3maker.rb +2 -2
- data/test/test_epubmaker.rb +8 -0
- data/test/test_epubmaker_cmd.rb +14 -7
- data/test/test_helper.rb +18 -7
- data/test/test_htmlbuilder.rb +1491 -205
- data/test/test_htmlutils.rb +0 -12
- data/test/test_i18n.rb +37 -37
- data/test/test_idgxmlbuilder.rb +744 -42
- data/test/test_idgxmlmaker_cmd.rb +46 -0
- data/test/test_image_finder.rb +52 -70
- data/test/test_index.rb +94 -44
- data/test/test_indexbuilder.rb +52 -0
- data/test/test_latexbuilder.rb +1784 -161
- data/test/test_latexbuilder_v2.rb +671 -102
- data/test/test_logger.rb +17 -4
- data/test/test_makerhelper.rb +2 -14
- data/test/test_markdownbuilder.rb +137 -16
- data/test/test_md2inaobuilder.rb +32 -9
- data/test/test_pdfmaker.rb +30 -12
- data/test/test_pdfmaker_cmd.rb +100 -6
- data/test/test_plaintextbuilder.rb +791 -30
- data/test/test_preprocessor.rb +2 -16
- data/test/test_review_ext.rb +2 -1
- data/test/test_rstbuilder.rb +274 -27
- data/test/test_sec_counter.rb +156 -0
- data/test/test_textmaker_cmd.rb +54 -0
- data/test/test_textutils.rb +109 -2
- data/test/test_topbuilder.rb +724 -34
- data/test/test_update.rb +20 -11
- data/test/test_webtocprinter.rb +75 -43
- data/test/test_yamlloader.rb +13 -0
- data/vendor/gentombow/LICENSE +1 -1
- data/vendor/gentombow/Makefile +0 -1
- data/vendor/gentombow/bounddvi-en.pdf +0 -0
- data/vendor/gentombow/bounddvi-en.tex +1 -0
- data/vendor/gentombow/bounddvi.pdf +0 -0
- data/vendor/gentombow/bounddvi.sty +30 -7
- data/vendor/gentombow/bounddvi.tex +1 -0
- data/vendor/gentombow/create_archive.sh +1 -0
- data/vendor/gentombow/gentombow-ja.pdf +0 -0
- data/vendor/gentombow/gentombow-ja.tex +9 -0
- data/vendor/gentombow/gentombow.pdf +0 -0
- data/vendor/gentombow/gentombow.sty +32 -10
- data/vendor/gentombow/gentombow.tex +8 -0
- data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
- data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
- data/vendor/jsclasses/LICENSE +1 -1
- data/vendor/jsclasses/Makefile +3 -2
- data/vendor/jsclasses/create_archive.sh +5 -5
- data/vendor/jsclasses/jis/Makefile +3 -2
- data/vendor/jsclasses/jis/jsarticle.cls +74 -31
- data/vendor/jsclasses/jis/jsbook.cls +74 -31
- data/vendor/jsclasses/jis/jsclasses.dtx +176 -36
- data/vendor/jsclasses/jis/jsclasses.ins +15 -5
- data/vendor/jsclasses/jis/jslogo.dtx +4 -4
- data/vendor/jsclasses/jis/jslogo.ins +9 -0
- data/vendor/jsclasses/jis/jslogo.sty +4 -16
- data/vendor/jsclasses/jis/jspf.cls +73 -30
- data/vendor/jsclasses/jis/jsreport.cls +74 -31
- data/vendor/jsclasses/jis/jsverb.ins +9 -0
- data/vendor/jsclasses/jis/jsverb.sty +1 -13
- data/vendor/jsclasses/jis/kiyou.cls +74 -31
- data/vendor/jsclasses/jis/minijs.sty +65 -22
- data/vendor/jsclasses/jis/okumacro.dtx +4 -5
- data/vendor/jsclasses/jis/okumacro.ins +9 -0
- data/vendor/jsclasses/jis/okumacro.sty +4 -17
- data/vendor/jsclasses/jis/okuverb.ins +9 -0
- data/vendor/jsclasses/jis/okuverb.sty +1 -13
- data/vendor/jsclasses/jis/winjis.sty +23 -19
- data/vendor/jsclasses/jsarticle.cls +74 -31
- data/vendor/jsclasses/jsbook.cls +74 -31
- data/vendor/jsclasses/jsclasses.dtx +176 -36
- data/vendor/jsclasses/jsclasses.ins +15 -5
- data/vendor/jsclasses/jsclasses.pdf +0 -0
- data/vendor/jsclasses/jslogo.dtx +4 -4
- data/vendor/jsclasses/jslogo.ins +9 -0
- data/vendor/jsclasses/jslogo.pdf +0 -0
- data/vendor/jsclasses/jslogo.sty +4 -16
- data/vendor/jsclasses/jspf.cls +73 -30
- data/vendor/jsclasses/jsreport.cls +74 -31
- data/vendor/jsclasses/jsverb.ins +9 -0
- data/vendor/jsclasses/jsverb.pdf +0 -0
- data/vendor/jsclasses/jsverb.sty +1 -13
- data/vendor/jsclasses/kiyou.cls +74 -31
- data/vendor/jsclasses/minijs.sty +68 -22
- data/vendor/jsclasses/okumacro.dtx +4 -5
- data/vendor/jsclasses/okumacro.ins +9 -0
- data/vendor/jsclasses/okumacro.pdf +0 -0
- data/vendor/jsclasses/okumacro.sty +4 -17
- data/vendor/jsclasses/okuverb.ins +9 -0
- data/vendor/jsclasses/okuverb.pdf +0 -0
- data/vendor/jsclasses/okuverb.sty +1 -13
- data/vendor/jsclasses/tests/relfont.tex +10 -0
- data/vendor/jsclasses/winjis.sty +23 -19
- metadata +65 -12
- data/.rubocop_todo.yml +0 -7
- data/lib/review/book/compilable.rb +0 -173
- data/lib/review/tocparser.rb +0 -271
- data/samples/syntax-book/review-ext.rb +0 -14
- data/test/test_tocparser.rb +0 -25
data/doc/quickstart.md
CHANGED
@@ -9,7 +9,7 @@ Re:VIEW is free software under the terms of the GNU Lesser General Public Licens
|
|
9
9
|
|
10
10
|
This article describes how to setup Re:VIEW and use it.
|
11
11
|
|
12
|
-
The supported version of the article is Re:VIEW
|
12
|
+
The supported version of the article is Re:VIEW 4.2.
|
13
13
|
|
14
14
|
## Set up Re:VIEW
|
15
15
|
|
@@ -59,7 +59,7 @@ $ git pull
|
|
59
59
|
|
60
60
|
## Writing Re:VIEW Document
|
61
61
|
|
62
|
-
### Generating template
|
62
|
+
### Generating template files
|
63
63
|
|
64
64
|
After setup, you can use `review-init` command to generate Re:VIEW project directory.
|
65
65
|
|
@@ -72,14 +72,23 @@ $ ls hello
|
|
72
72
|
Rakefile catalog.yml config.yml hello.re images/ layouts/ sty/ style.css
|
73
73
|
```
|
74
74
|
|
75
|
+
If your purpose is to create a PDF using TeX, it is a good idea to use the wizard mode for basic layouting in a web browser. Add `-w` option to review-init.
|
76
|
+
|
77
|
+
(notice: currently wizard UI supports only Japanese language)
|
78
|
+
|
79
|
+
```bash
|
80
|
+
$ review-init -w hello
|
81
|
+
(access http://localhost:18000 on Web browser)
|
82
|
+
```
|
83
|
+
|
75
84
|
In `hello` directory, many files are generated.
|
76
85
|
|
77
86
|
* `*.re` : Re:VIEW format file.
|
78
87
|
* config.yml : configuration file
|
88
|
+
* config-ebook.yml : configuration file for ebook (when using the wizard mode)
|
79
89
|
* catalog.yml : catalog file (for TOC)
|
80
90
|
* Rakefile : rule file for `rake` command
|
81
91
|
* images : folder for images
|
82
|
-
* layouts : forlder for layout files
|
83
92
|
* style.css : sample stylesheet
|
84
93
|
* sty : style files for LaTeX
|
85
94
|
* doc : various documents (including this document)
|
@@ -116,29 +125,38 @@ The web site of Re:VIEW is @<tt>{https://reviewml.org/}.
|
|
116
125
|
|
117
126
|
You should use UTF-8 as encodings in text files.
|
118
127
|
|
119
|
-
### generating PDF, EPUB,
|
128
|
+
### generating PDF, EPUB, plain-text, and InDesign XML
|
129
|
+
|
130
|
+
To convert files in the project, use review-*maker command.
|
120
131
|
|
121
|
-
|
132
|
+
- review-pdfmaker: generate PDF
|
133
|
+
- review-epubmaker: generate EPUB
|
134
|
+
- review-textmaker: genrate plaintext
|
135
|
+
- review-idgxmlmaker: genrate InDesign XML
|
122
136
|
|
123
|
-
To generate PDF, you should install TeXLive 2012 or later.
|
137
|
+
To generate PDF, you should install TeXLive 2012 or later. To generate EPUB, you should install zip command.
|
124
138
|
When you want to use MathML, you should install [MathML library](http://www.hinet.mydns.jp/?mathml.rb)
|
125
139
|
|
126
|
-
Each maker need `config.yml`, configuration YAML files.
|
140
|
+
Each maker need `config.yml`, configuration YAML files. `review-init` command generates `config.yml` in default.
|
127
141
|
|
128
142
|
```bash
|
129
|
-
$ review-pdfmaker config.yml
|
130
|
-
$ review-
|
131
|
-
$ review-
|
132
|
-
$ review-textmaker
|
143
|
+
$ review-pdfmaker config.yml ## generate PDF
|
144
|
+
$ review-pdfmaker config-ebook.yml ## generate PDF (for ebook)
|
145
|
+
$ review-epubmaker config.yml ## generate EPUB
|
146
|
+
$ review-textmaker config.yml ## generate text with decoration
|
147
|
+
$ review-textmaker -n config.yml ## generate text without decoration
|
148
|
+
$ review-idgxmlmaker config.yml ## generate InDesign XML
|
133
149
|
```
|
134
150
|
|
135
151
|
You also can generate them with Rake.
|
136
152
|
|
137
153
|
```bash
|
138
154
|
$ rake pdf ## generate PDF
|
155
|
+
$ REVIEW_CONFIG_FILE=config-ebook.yml rake pdf ## generate PDF (for ebook)
|
139
156
|
$ rake epub ## generate EPUB
|
140
157
|
$ rake text ## generate text with decoration
|
141
158
|
$ rake plaintext ## generate text without decoration
|
159
|
+
$ rake idgxml ## generate InDesign XML
|
142
160
|
```
|
143
161
|
|
144
162
|
There is a sample YAML file [config.yml.sample](https://github.com/kmuto/review/blob/master/doc/config.yml.sample) in the same directory of this document.
|
@@ -205,17 +223,20 @@ $ review-vol
|
|
205
223
|
You can also use `review-index` command to generate header list.
|
206
224
|
|
207
225
|
```bash
|
208
|
-
$ review-index --level <heading level>
|
226
|
+
$ review-index --level <heading level>
|
227
|
+
$ review-index --level <heading level> -d ## show volumes also
|
209
228
|
```
|
210
229
|
|
230
|
+
review-vol and review-index can have large differences in the number of characters, lines, and pages. While review-vol only estimates from the file, review-index actually compiles and calculates.
|
231
|
+
|
211
232
|
## how to update the document folder to the new Re:VIEW version
|
212
233
|
|
213
|
-
Re:VIEW is updated regularly. We Re:VIEW team watch the backward compatibility carefully, but if you want to use the features in the new version, you can use review-update command to update the
|
234
|
+
Re:VIEW is updated regularly. We Re:VIEW team watch the backward compatibility carefully, but if you want to use the features in the new version, you can use review-update command to update the project folder.
|
214
235
|
|
215
236
|
```bash
|
216
237
|
$ review-update
|
217
|
-
** review-update updates your project to
|
218
|
-
config.yml: Update 'review_version' to '
|
238
|
+
** review-update updates your project to 5.0.0 **
|
239
|
+
config.yml: Update 'review_version' to '5.0'? [y]/n
|
219
240
|
Rakefile will be overridden with Re:VIEW version (/.../review/samples/sample-book/src/Rakefile). Do you really proceed? [y]/n
|
220
241
|
lib/tasks/review.rake will be overridden with Re:VIEW version (/.../review/samples/sample-book/src/lib/tasks/review.rake). Do you really proceed? [y]/n
|
221
242
|
INFO: new file /.../sty/plistings.sty is created.
|
@@ -231,7 +252,7 @@ Finished.
|
|
231
252
|
|
232
253
|
## Copyright
|
233
254
|
|
234
|
-
The original author of Re:VIEW is Minero Aoki. The current maintainer is Kenshi Muto(@kmuto), and committers are Masayoshi Takahashi and Masanori Kado (
|
255
|
+
The original author of Re:VIEW is Minero Aoki. The current maintainer is Kenshi Muto(@kmuto), and committers are Masayoshi Takahashi and Masanori Kado (March 2020).
|
235
256
|
|
236
257
|
If you want to report bugs and patches, or to get more information, see:
|
237
258
|
|
data/lib/epubmaker/content.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# = content.rb -- Content object for EPUBMaker.
|
2
2
|
#
|
3
|
-
# Copyright (c) 2010-
|
3
|
+
# Copyright (c) 2010-2020 Kenshi Muto
|
4
4
|
#
|
5
5
|
# This program is free software.
|
6
6
|
# You can distribute or modify this program under the terms of
|
@@ -73,11 +73,12 @@ module EPUBMaker
|
|
73
73
|
# Complement other parameters by using file parameter.
|
74
74
|
def complement
|
75
75
|
if @id.nil?
|
76
|
-
@id = @file.gsub(%r{[
|
76
|
+
@id = @file.gsub(%r{[\\/. ]}, '-')
|
77
77
|
end
|
78
78
|
if @id =~ /\A[^a-z]/i
|
79
79
|
@id = "rv-#{@id}"
|
80
80
|
end
|
81
|
+
@id = CGI.escape(@id).gsub('%', '_25_')
|
81
82
|
|
82
83
|
if !@file.nil? && @media.nil?
|
83
84
|
@media = @file.sub(/.+\./, '').downcase
|
data/lib/epubmaker/epubcommon.rb
CHANGED
@@ -10,7 +10,11 @@
|
|
10
10
|
|
11
11
|
require 'review/i18n'
|
12
12
|
require 'review/template'
|
13
|
-
|
13
|
+
begin
|
14
|
+
require 'cgi/escape'
|
15
|
+
rescue LoadError
|
16
|
+
require 'cgi/util'
|
17
|
+
end
|
14
18
|
|
15
19
|
module EPUBMaker
|
16
20
|
# EPUBCommon is the common class for EPUB producer.
|
@@ -22,6 +26,10 @@ module EPUBMaker
|
|
22
26
|
@body_ext = nil
|
23
27
|
end
|
24
28
|
|
29
|
+
def h(str)
|
30
|
+
CGI.escapeHTML(str)
|
31
|
+
end
|
32
|
+
|
25
33
|
# Return mimetype content.
|
26
34
|
def mimetype
|
27
35
|
'application/epub+zip'
|
@@ -36,10 +44,9 @@ module EPUBMaker
|
|
36
44
|
if @producer.config['coverimage']
|
37
45
|
file = nil
|
38
46
|
@producer.contents.each do |item|
|
39
|
-
if !item.media.start_with?('image') || item.file !~ /#{@producer.config[
|
47
|
+
if !item.media.start_with?('image') || item.file !~ /#{@producer.config['coverimage']}\Z/
|
40
48
|
next
|
41
49
|
end
|
42
|
-
|
43
50
|
s << %Q( <meta name="cover" content="#{item.id}"/>\n)
|
44
51
|
file = item.file
|
45
52
|
break
|
@@ -60,10 +67,10 @@ module EPUBMaker
|
|
60
67
|
def ncx_doctitle
|
61
68
|
<<EOT
|
62
69
|
<docTitle>
|
63
|
-
<text>#{
|
70
|
+
<text>#{h(@producer.config['title'])}</text>
|
64
71
|
</docTitle>
|
65
72
|
<docAuthor>
|
66
|
-
<text>#{@producer.config['aut'].nil? ? '' :
|
73
|
+
<text>#{@producer.config['aut'].nil? ? '' : h(join_with_separator(@producer.config['aut'], ReVIEW::I18n.t('names_splitter')))}</text>
|
67
74
|
</docAuthor>
|
68
75
|
EOT
|
69
76
|
end
|
@@ -73,7 +80,7 @@ EOT
|
|
73
80
|
<navMap>
|
74
81
|
<navPoint id="top" playOrder="1">
|
75
82
|
<navLabel>
|
76
|
-
<text>#{
|
83
|
+
<text>#{h(@producer.config['title'])}</text>
|
77
84
|
</navLabel>
|
78
85
|
<content src="#{@producer.config['cover']}"/>
|
79
86
|
</navPoint>
|
@@ -85,7 +92,7 @@ EOT
|
|
85
92
|
s << <<EOT
|
86
93
|
<navPoint id="toc" playOrder="#{nav_count}">
|
87
94
|
<navLabel>
|
88
|
-
<text>#{
|
95
|
+
<text>#{h(@producer.res.v('toctitle'))}</text>
|
89
96
|
</navLabel>
|
90
97
|
<content src="#{@producer.config['bookname']}-toc.#{@producer.config['htmlext']}"/>
|
91
98
|
</navPoint>
|
@@ -101,7 +108,7 @@ EOT
|
|
101
108
|
s << <<EOT
|
102
109
|
<navPoint id="nav-#{nav_count}" playOrder="#{nav_count}">
|
103
110
|
<navLabel>
|
104
|
-
<text>#{indent[level]}#{
|
111
|
+
<text>#{indent[level]}#{h(item.title)}</text>
|
105
112
|
</navLabel>
|
106
113
|
<content src="#{item.file}"/>
|
107
114
|
</navPoint>
|
@@ -132,21 +139,21 @@ EOT
|
|
132
139
|
raise "coverimage #{@producer.config['coverimage']} not found. Abort." unless file
|
133
140
|
@body = <<-EOT
|
134
141
|
<div id="cover-image" class="cover-image">
|
135
|
-
<img src="#{file}" alt="#{
|
142
|
+
<img src="#{file}" alt="#{h(@producer.config.name_of('title'))}" class="max"/>
|
136
143
|
</div>
|
137
144
|
EOT
|
138
145
|
else
|
139
146
|
@body = <<-EOT
|
140
|
-
<h1 class="cover-title">#{
|
147
|
+
<h1 class="cover-title">#{h(@producer.config.name_of('title'))}</h1>
|
141
148
|
EOT
|
142
149
|
if @producer.config['subtitle']
|
143
150
|
@body << <<-EOT
|
144
|
-
<h2 class="cover-subtitle">#{
|
151
|
+
<h2 class="cover-subtitle">#{h(@producer.config.name_of('subtitle'))}</h2>
|
145
152
|
EOT
|
146
153
|
end
|
147
154
|
end
|
148
155
|
|
149
|
-
@title =
|
156
|
+
@title = h(@producer.config.name_of('title'))
|
150
157
|
@language = @producer.config['language']
|
151
158
|
@stylesheets = @producer.config['stylesheet']
|
152
159
|
tmplfile = if @producer.config['htmlversion'].to_i == 5
|
@@ -162,7 +169,7 @@ EOT
|
|
162
169
|
# NOTE: this method is not used yet.
|
163
170
|
# see lib/review/epubmaker.rb#build_titlepage
|
164
171
|
def titlepage
|
165
|
-
@title =
|
172
|
+
@title = h(@producer.config.name_of('title'))
|
166
173
|
|
167
174
|
@body = <<EOT
|
168
175
|
<h1 class="tp-title">#{@title}</h1>
|
@@ -170,7 +177,7 @@ EOT
|
|
170
177
|
|
171
178
|
if @producer.config['subtitle']
|
172
179
|
@body << <<EOT
|
173
|
-
<h2 class="tp-subtitle">#{
|
180
|
+
<h2 class="tp-subtitle">#{h(@producer.config.name_of('subtitle'))}</h2>
|
174
181
|
EOT
|
175
182
|
end
|
176
183
|
|
@@ -180,7 +187,7 @@ EOT
|
|
180
187
|
<br />
|
181
188
|
<br />
|
182
189
|
</p>
|
183
|
-
<h2 class="tp-author">#{
|
190
|
+
<h2 class="tp-author">#{h(join_with_separator(@producer.config.names_of('aut'), ReVIEW::I18n.t('names_splitter')))}</h2>
|
184
191
|
EOT
|
185
192
|
end
|
186
193
|
|
@@ -193,7 +200,7 @@ EOT
|
|
193
200
|
<br />
|
194
201
|
<br />
|
195
202
|
</p>
|
196
|
-
<h3 class="tp-publisher">#{
|
203
|
+
<h3 class="tp-publisher">#{h(join_with_separator(publisher, ReVIEW::I18n.t('names_splitter')))}</h3>
|
197
204
|
EOT
|
198
205
|
end
|
199
206
|
|
@@ -210,18 +217,18 @@ EOT
|
|
210
217
|
|
211
218
|
# Return colophon content.
|
212
219
|
def colophon
|
213
|
-
@title =
|
220
|
+
@title = h(@producer.res.v('colophontitle'))
|
214
221
|
@body = <<EOT
|
215
222
|
<div class="colophon">
|
216
223
|
EOT
|
217
224
|
|
218
225
|
if @producer.config['subtitle'].nil?
|
219
226
|
@body << <<EOT
|
220
|
-
<p class="title">#{
|
227
|
+
<p class="title">#{h(@producer.config.name_of('title'))}</p>
|
221
228
|
EOT
|
222
229
|
else
|
223
230
|
@body << <<EOT
|
224
|
-
<p class="title">#{
|
231
|
+
<p class="title">#{h(@producer.config.name_of('title'))}<br /><span class="subtitle">#{h(@producer.config.name_of('subtitle'))}</span></p>
|
225
232
|
EOT
|
226
233
|
end
|
227
234
|
|
@@ -230,7 +237,7 @@ EOT
|
|
230
237
|
@body << %Q( <table class="colophon">\n)
|
231
238
|
@body << @producer.config['colophon_order'].map do |role|
|
232
239
|
if @producer.config[role]
|
233
|
-
%Q( <tr><th>#{
|
240
|
+
%Q( <tr><th>#{h(@producer.res.v(role))}</th><td>#{h(join_with_separator(@producer.config.names_of(role), ReVIEW::I18n.t('names_splitter')))}</td></tr>\n)
|
234
241
|
else
|
235
242
|
''
|
236
243
|
end
|
@@ -239,7 +246,7 @@ EOT
|
|
239
246
|
@body << %Q( <tr><th>ISBN</th><td>#{@producer.isbn_hyphen}</td></tr>\n) if @producer.isbn_hyphen
|
240
247
|
@body << %Q( </table>\n)
|
241
248
|
if @producer.config['rights'] && !@producer.config['rights'].empty?
|
242
|
-
@body << %Q( <p class="copyright">#{join_with_separator(@producer.config.names_of('rights').map { |m|
|
249
|
+
@body << %Q( <p class="copyright">#{join_with_separator(@producer.config.names_of('rights').map { |m| h(m) }, '<br />')}</p>\n)
|
243
250
|
end
|
244
251
|
@body << %Q( </div>\n)
|
245
252
|
|
@@ -262,11 +269,11 @@ EOT
|
|
262
269
|
items.each_with_index do |item, rev|
|
263
270
|
editstr = edit == 0 ? ReVIEW::I18n.t('first_edition') : ReVIEW::I18n.t('nth_edition', (edit + 1).to_s)
|
264
271
|
revstr = ReVIEW::I18n.t('nth_impression', (rev + 1).to_s)
|
265
|
-
if item =~ /\A\d
|
272
|
+
if item =~ /\A\d+-\d+-\d+\Z/
|
266
273
|
buf << %Q( <p>#{ReVIEW::I18n.t('published_by1', [date_to_s(item), editstr + revstr])}</p>\n)
|
267
|
-
elsif item =~ /\A(\d
|
274
|
+
elsif item =~ /\A(\d+-\d+-\d+)[\s ](.+)/
|
268
275
|
# custom date with string
|
269
|
-
item.match(/\A(\d
|
276
|
+
item.match(/\A(\d+-\d+-\d+)[\s ](.+)/) do |m|
|
270
277
|
buf << %Q( <p>#{ReVIEW::I18n.t('published_by3', [date_to_s(m[1]), m[2]])}</p>\n)
|
271
278
|
end
|
272
279
|
else
|
@@ -290,9 +297,9 @@ EOT
|
|
290
297
|
|
291
298
|
# Return own toc content.
|
292
299
|
def mytoc
|
293
|
-
@title =
|
300
|
+
@title = h(@producer.res.v('toctitle'))
|
294
301
|
|
295
|
-
@body = %Q( <h1 class="toc-title">#{
|
302
|
+
@body = %Q( <h1 class="toc-title">#{h(@producer.res.v('toctitle'))}</h1>\n)
|
296
303
|
if @producer.config['epubmaker']['flattoc'].nil?
|
297
304
|
@body << hierarchy_ncx('ul')
|
298
305
|
else
|
@@ -386,7 +393,7 @@ EOT
|
|
386
393
|
@producer.contents.each do |item|
|
387
394
|
next if !item.notoc.nil? || item.level.nil? || item.file.nil? || item.title.nil? || item.level > @producer.config['toclevel'].to_i
|
388
395
|
is = indent == true ? ' ' * item.level : ''
|
389
|
-
s << %Q(<li><a href="#{item.file}">#{is}#{
|
396
|
+
s << %Q(<li><a href="#{item.file}">#{is}#{h(item.title)}</a></li>\n)
|
390
397
|
end
|
391
398
|
s << %Q(</#{type}>\n)
|
392
399
|
|
data/lib/epubmaker/epubv2.rb
CHANGED
@@ -9,14 +9,13 @@
|
|
9
9
|
#
|
10
10
|
|
11
11
|
require 'epubmaker/epubcommon'
|
12
|
-
require 'cgi'
|
13
12
|
require 'epubmaker/zip_exporter'
|
14
13
|
|
15
14
|
module EPUBMaker
|
16
15
|
# EPUBv2 is EPUB version 2 producer.
|
17
16
|
class EPUBv2 < EPUBCommon
|
18
17
|
# Construct object with parameter hash +config+ and message resource hash +res+.
|
19
|
-
def initialize(producer)
|
18
|
+
def initialize(producer) # rubocop:disable Lint/UselessMethodDefinition
|
20
19
|
super
|
21
20
|
end
|
22
21
|
|
@@ -37,9 +36,9 @@ module EPUBMaker
|
|
37
36
|
%w[title language date type format source description relation coverage subject rights].each do |item|
|
38
37
|
next unless @producer.config[item]
|
39
38
|
if @producer.config[item].is_a?(Array)
|
40
|
-
s << @producer.config.names_of(item).map { |i| %Q( <dc:#{item}>#{
|
39
|
+
s << @producer.config.names_of(item).map { |i| %Q( <dc:#{item}>#{h(i)}</dc:#{item}>\n) }.join
|
41
40
|
else
|
42
|
-
s << %Q( <dc:#{item}>#{
|
41
|
+
s << %Q( <dc:#{item}>#{h(@producer.config.name_of(item).to_s)}</dc:#{item}>\n)
|
43
42
|
end
|
44
43
|
end
|
45
44
|
|
@@ -54,7 +53,7 @@ module EPUBMaker
|
|
54
53
|
%w[aut a-adp a-ann a-arr a-art a-asn a-aqt a-aft a-aui a-ant a-bkp a-clb a-cmm a-dsr a-edt a-ill a-lyr a-mdc a-mus a-nrt a-oth a-pht a-prt a-red a-rev a-spn a-ths a-trc a-trl].each do |role|
|
55
54
|
next unless @producer.config[role]
|
56
55
|
@producer.config.names_of(role).each do |v|
|
57
|
-
s << %Q( <dc:creator opf:role="#{role.sub('a-', '')}">#{
|
56
|
+
s << %Q( <dc:creator opf:role="#{role.sub('a-', '')}">#{h(v)}</dc:creator>\n)
|
58
57
|
end
|
59
58
|
end
|
60
59
|
|
@@ -62,7 +61,7 @@ module EPUBMaker
|
|
62
61
|
%w[adp ann arr art asn aqt aft aui ant bkp clb cmm dsr edt ill lyr mdc mus nrt oth pht prt red rev spn ths trc trl].each do |role|
|
63
62
|
next unless @producer.config[role]
|
64
63
|
@producer.config.names_of(role).each do |v|
|
65
|
-
s << %Q( <dc:contributor opf:role="#{role}">#{
|
64
|
+
s << %Q( <dc:contributor opf:role="#{role}">#{h(v)}</dc:contributor>\n)
|
66
65
|
if role == 'prt'
|
67
66
|
s << %Q( <dc:publisher>#{v}</dc:publisher>\n)
|
68
67
|
end
|
data/lib/epubmaker/epubv3.rb
CHANGED
@@ -26,6 +26,7 @@ module EPUBMaker
|
|
26
26
|
# Return opf file content.
|
27
27
|
def opf
|
28
28
|
@opf_metainfo = opf_metainfo
|
29
|
+
@opf_coverimage = opf_coverimage
|
29
30
|
@opf_manifest = opf_manifest
|
30
31
|
@opf_toc = opf_tocx
|
31
32
|
@package_attrs = ''
|
@@ -39,6 +40,7 @@ module EPUBMaker
|
|
39
40
|
ReVIEW::Template.load(tmplfile).result(binding)
|
40
41
|
end
|
41
42
|
|
43
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
42
44
|
def opf_metainfo
|
43
45
|
s = ''
|
44
46
|
%w[title language date type format source description relation coverage subject rights].each do |item|
|
@@ -46,23 +48,23 @@ module EPUBMaker
|
|
46
48
|
if @producer.config[item].is_a?(Array)
|
47
49
|
@producer.config[item].each_with_index do |v, i|
|
48
50
|
if v.is_a?(Hash)
|
49
|
-
s << %Q( <dc:#{item} id="#{item}-#{i}">#{
|
51
|
+
s << %Q( <dc:#{item} id="#{item}-#{i}">#{h(v['name'])}</dc:#{item}>\n)
|
50
52
|
v.each_pair do |name, val|
|
51
53
|
next if name == 'name'
|
52
|
-
s << %Q( <meta refines="##{item}-#{i}" property="#{name}">#{
|
54
|
+
s << %Q( <meta refines="##{item}-#{i}" property="#{name}">#{h(val)}</meta>\n)
|
53
55
|
end
|
54
56
|
else
|
55
|
-
s << %Q( <dc:#{item} id="#{item}-#{i}">#{
|
57
|
+
s << %Q( <dc:#{item} id="#{item}-#{i}">#{h(v.to_s)}</dc:#{item}>\n)
|
56
58
|
end
|
57
59
|
end
|
58
60
|
elsif @producer.config[item].is_a?(Hash)
|
59
|
-
s << %Q( <dc:#{item} id="#{item}">#{
|
61
|
+
s << %Q( <dc:#{item} id="#{item}">#{h(@producer.config[item]['name'])}</dc:#{item}>\n)
|
60
62
|
@producer.config[item].each_pair do |name, val|
|
61
63
|
next if name == 'name'
|
62
|
-
s << %Q( <meta refines="##{item}" property="#{name}">#{
|
64
|
+
s << %Q( <meta refines="##{item}" property="#{name}">#{h(val)}</meta>\n)
|
63
65
|
end
|
64
66
|
else
|
65
|
-
s << %Q( <dc:#{item} id="#{item}">#{
|
67
|
+
s << %Q( <dc:#{item} id="#{item}">#{h(@producer.config[item].to_s)}</dc:#{item}>\n)
|
66
68
|
end
|
67
69
|
end
|
68
70
|
|
@@ -80,14 +82,14 @@ module EPUBMaker
|
|
80
82
|
next unless @producer.config[role]
|
81
83
|
@producer.config[role].each_with_index do |v, i|
|
82
84
|
if v.is_a?(Hash)
|
83
|
-
s << %Q( <dc:creator id="#{role}-#{i}">#{
|
85
|
+
s << %Q( <dc:creator id="#{role}-#{i}">#{h(v['name'])}</dc:creator>\n)
|
84
86
|
s << %Q( <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role.sub('a-', '')}</meta>\n)
|
85
87
|
v.each_pair do |name, val|
|
86
88
|
next if name == 'name'
|
87
|
-
s << %Q( <meta refines="##{role.sub('a-', '')}-#{i}" property="#{name}">#{
|
89
|
+
s << %Q( <meta refines="##{role.sub('a-', '')}-#{i}" property="#{name}">#{h(val)}</meta>\n)
|
88
90
|
end
|
89
91
|
else
|
90
|
-
s << %Q( <dc:creator id="#{role}-#{i}">#{
|
92
|
+
s << %Q( <dc:creator id="#{role}-#{i}">#{h(v)}</dc:creator>\n)
|
91
93
|
s << %Q( <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role.sub('a-', '')}</meta>\n)
|
92
94
|
end
|
93
95
|
end
|
@@ -98,27 +100,27 @@ module EPUBMaker
|
|
98
100
|
next unless @producer.config[role]
|
99
101
|
@producer.config[role].each_with_index do |v, i|
|
100
102
|
if v.is_a?(Hash)
|
101
|
-
s << %Q( <dc:contributor id="#{role}-#{i}">#{
|
103
|
+
s << %Q( <dc:contributor id="#{role}-#{i}">#{h(v['name'])}</dc:contributor>\n)
|
102
104
|
s << %Q( <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role}</meta>\n)
|
103
105
|
v.each_pair do |name, val|
|
104
106
|
next if name == 'name'
|
105
|
-
s << %Q( <meta refines="##{role}-#{i}" property="#{name}">#{
|
107
|
+
s << %Q( <meta refines="##{role}-#{i}" property="#{name}">#{h(val)}</meta>\n)
|
106
108
|
end
|
107
109
|
else
|
108
|
-
s << %Q( <dc:contributor id="#{role}-#{i}">#{
|
110
|
+
s << %Q( <dc:contributor id="#{role}-#{i}">#{h(v)}</dc:contributor>\n)
|
109
111
|
s << %Q( <meta refines="##{role}-#{i}" property="role" scheme="marc:relators">#{role}</meta>\n)
|
110
112
|
end
|
111
113
|
|
112
114
|
if %w[prt pbl].include?(role)
|
113
115
|
if v.is_a?(Hash)
|
114
|
-
s << %Q( <dc:publisher id="pub-#{role}-#{i}">#{
|
116
|
+
s << %Q( <dc:publisher id="pub-#{role}-#{i}">#{h(v['name'])}</dc:publisher>\n)
|
115
117
|
s << %Q( <meta refines="#pub-#{role}-#{i}" property="role" scheme="marc:relators">#{role}</meta>\n)
|
116
118
|
v.each_pair do |name, val|
|
117
119
|
next if name == 'name'
|
118
|
-
s << %Q( <meta refines="#pub-#{role}-#{i}" property="#{name}">#{
|
120
|
+
s << %Q( <meta refines="#pub-#{role}-#{i}" property="#{name}">#{h(val)}</meta>\n)
|
119
121
|
end
|
120
122
|
else
|
121
|
-
s << %Q( <dc:publisher id="pub-#{role}-#{i}">#{
|
123
|
+
s << %Q( <dc:publisher id="pub-#{role}-#{i}">#{h(v)}</dc:publisher>\n)
|
122
124
|
s << %Q( <meta refines="#pub-#{role}-#{i}" property="role" scheme="marc:relators">prt</meta>\n)
|
123
125
|
end
|
124
126
|
end
|
@@ -128,12 +130,13 @@ module EPUBMaker
|
|
128
130
|
## add custom <meta> element
|
129
131
|
if @producer.config['opf_meta'].present?
|
130
132
|
@producer.config['opf_meta'].each do |k, v|
|
131
|
-
s << %Q( <meta property="#{k}">#{
|
133
|
+
s << %Q( <meta property="#{k}">#{h(v)}</meta>\n)
|
132
134
|
end
|
133
135
|
end
|
134
136
|
|
135
137
|
s
|
136
138
|
end
|
139
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
137
140
|
|
138
141
|
def opf_manifest
|
139
142
|
s = ''
|
@@ -205,11 +208,11 @@ EOT
|
|
205
208
|
|
206
209
|
@body = <<EOT
|
207
210
|
<nav xmlns:epub="http://www.idpf.org/2007/ops" epub:type="toc" id="toc">
|
208
|
-
<h1 class="toc-title">#{
|
211
|
+
<h1 class="toc-title">#{h(@producer.res.v('toctitle'))}</h1>
|
209
212
|
#{ncx_main} </nav>
|
210
213
|
EOT
|
211
214
|
|
212
|
-
@title =
|
215
|
+
@title = h(@producer.res.v('toctitle'))
|
213
216
|
@language = @producer.config['language']
|
214
217
|
@stylesheets = @producer.config['stylesheet']
|
215
218
|
tmplfile = File.expand_path('./html/layout-html5.html.erb', ReVIEW::Template::TEMPLATE_DIR)
|