review 1.0.0 → 1.1.0
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.
- data/.travis.yml +1 -2
- data/ChangeLog +65 -0
- data/Gemfile +5 -0
- data/README.rdoc +6 -1
- data/Rakefile +14 -28
- data/bin/review-check +9 -21
- data/bin/review-compile +45 -12
- data/bin/review-epubmaker +477 -220
- data/bin/review-epubmaker-ng +5 -14
- data/bin/review-index +4 -2
- data/bin/review-init +94 -0
- data/bin/review-pdfmaker +70 -287
- data/bin/review-preproc +5 -2
- data/bin/review-vol +4 -11
- data/debian/changelog +3 -3
- data/debian/copyright +5 -3
- data/debian/docs +1 -0
- data/doc/format.rdoc +57 -11
- data/doc/quickstart.rdoc +4 -4
- data/doc/sample.yaml +11 -7
- data/lib/epubmaker.rb +1 -1
- data/lib/epubmaker/epubv2.rb +26 -27
- data/lib/epubmaker/epubv3.rb +13 -13
- data/lib/epubmaker/producer.rb +1 -1
- data/lib/review.rb +3 -4
- data/lib/review/book.rb +17 -581
- data/lib/review/book/base.rb +247 -0
- data/lib/review/book/chapter.rb +81 -0
- data/lib/review/book/compilable.rb +163 -0
- data/lib/review/book/index.rb +339 -0
- data/lib/review/book/page_metric.rb +38 -0
- data/lib/review/book/parameters.rb +97 -0
- data/lib/review/book/part.rb +44 -0
- data/lib/review/book/volume.rb +65 -0
- data/lib/review/builder.rb +34 -40
- data/lib/review/compiler.rb +32 -13
- data/lib/review/configure.rb +38 -0
- data/lib/review/ewbbuilder.rb +23 -21
- data/lib/review/extentions.rb +3 -0
- data/lib/review/extentions/object.rb +9 -0
- data/lib/review/{compat.rb → extentions/string.rb} +11 -0
- data/lib/review/htmlbuilder.rb +162 -74
- data/lib/review/htmlutils.rb +28 -1
- data/lib/review/i18n.yaml +11 -0
- data/lib/review/idgxmlbuilder.rb +119 -35
- data/lib/review/inaobuilder.rb +355 -0
- data/lib/review/latexbuilder.rb +133 -59
- data/lib/review/latexutils.rb +15 -6
- data/lib/review/makerhelper.rb +59 -0
- data/lib/review/markdownbuilder.rb +129 -0
- data/lib/review/preprocessor.rb +20 -7
- data/lib/review/review.tex.erb +250 -0
- data/lib/review/textutils.rb +28 -3
- data/lib/review/tocparser.rb +20 -12
- data/lib/review/tocprinter.rb +7 -3
- data/lib/review/topbuilder.rb +44 -27
- data/lib/review/version.rb +3 -0
- data/review.gemspec +20 -117
- data/test/book_test_helper.rb +35 -0
- data/test/sample-book/README.md +5 -0
- data/test/sample-book/src/CHAPS +2 -0
- data/test/sample-book/src/PREDEF +1 -0
- data/test/sample-book/src/Rakefile +26 -0
- data/test/sample-book/src/_cover.html +3 -0
- data/test/sample-book/src/ch01.re +71 -0
- data/test/sample-book/src/ch02.re +3 -0
- data/test/sample-book/src/config.yml +55 -0
- data/test/sample-book/src/images/ch01-imgsample.jpg +0 -0
- data/test/sample-book/src/images/cover.jpg +0 -0
- data/test/sample-book/src/main.css +251 -0
- data/test/sample-book/src/preface.re +15 -0
- data/test/sample-book/src/sty/jumoline.sty +310 -0
- data/test/sample-book/src/sty/samplemacro.sty +21 -0
- data/test/sample-book/src/vendor/jumoline/README +29 -0
- data/test/sample-book/src/vendor/jumoline/jumoline.dtx +2988 -0
- data/test/sample-book/src/vendor/jumoline/jumoline.ins +6 -0
- data/test/test_book.rb +26 -646
- data/test/test_book_chapter.rb +418 -0
- data/test/test_book_parameter.rb +42 -0
- data/test/test_book_part.rb +53 -0
- data/test/test_builder.rb +17 -10
- data/test/test_compiler.rb +46 -0
- data/test/test_epubmaker.rb +1 -1
- data/test/test_epubmaker_cmd.rb +36 -0
- data/test/test_helper.rb +17 -0
- data/test/test_htmlbuilder.rb +156 -24
- data/test/test_htmlutils.rb +4 -0
- data/test/test_i18n.rb +6 -2
- data/test/test_idgxmlbuilder.rb +33 -11
- data/test/test_inaobuilder.rb +247 -0
- data/test/test_index.rb +31 -0
- data/test/test_latexbuilder.rb +115 -35
- data/test/test_makerhelper.rb +50 -0
- data/test/test_pdfmaker_cmd.rb +36 -0
- data/test/test_preprocessor.rb +7 -7
- data/test/test_topbuilder.rb +6 -7
- data/test/test_uuid.rb +1 -0
- metadata +117 -12
- data/lib/review/index.rb +0 -323
- data/lib/review/volume.rb +0 -66
data/bin/review-preproc
CHANGED
@@ -24,8 +24,10 @@ require 'fileutils'
|
|
24
24
|
require 'optparse'
|
25
25
|
|
26
26
|
def sigmain
|
27
|
-
Signal.trap(:PIPE, 'IGNORE')
|
28
27
|
Signal.trap(:INT) { exit 1 }
|
28
|
+
if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
|
29
|
+
Signal.trap(:PIPE, 'IGNORE')
|
30
|
+
end
|
29
31
|
main
|
30
32
|
rescue Errno::EPIPE
|
31
33
|
exit 0
|
@@ -65,6 +67,7 @@ SJIS)') {|enc|
|
|
65
67
|
parser.on('--final', 'Unfold text and strip preprocessor tags. (deprecated)') {
|
66
68
|
mode = :final
|
67
69
|
}
|
70
|
+
parser.on('--tabwidth=WIDTH', "Replace tabs with space characters. (0: don't replace)") {|width| param["tabwidth"] = width.to_i }
|
68
71
|
parser.on('--help', 'Print this message and quit.') {
|
69
72
|
puts parser.help
|
70
73
|
exit 0
|
@@ -77,7 +80,7 @@ SJIS)') {|enc|
|
|
77
80
|
exit 1
|
78
81
|
end
|
79
82
|
|
80
|
-
pp = ReVIEW::Preprocessor.new(ReVIEW::Repository.new, param)
|
83
|
+
pp = ReVIEW::Preprocessor.new(ReVIEW::Repository.new(param), param)
|
81
84
|
current_file = nil
|
82
85
|
ARGV.each do |path|
|
83
86
|
current_file = path
|
data/bin/review-vol
CHANGED
@@ -15,10 +15,10 @@ require 'pathname'
|
|
15
15
|
bindir = Pathname.new(__FILE__).realpath.dirname
|
16
16
|
$LOAD_PATH.unshift((bindir + '../lib').realpath)
|
17
17
|
|
18
|
-
require 'review
|
19
|
-
require 'review/exception'
|
18
|
+
require 'review'
|
20
19
|
require 'optparse'
|
21
|
-
|
20
|
+
|
21
|
+
include ReVIEW::TextUtils
|
22
22
|
|
23
23
|
def main
|
24
24
|
$KCODE = 'UTF-8' unless defined?(Encoding)
|
@@ -85,14 +85,7 @@ end
|
|
85
85
|
|
86
86
|
def print_chapter_volume(chap)
|
87
87
|
vol = chap.volume
|
88
|
-
title = chap.title
|
89
|
-
if @param["outencoding"] =~ /^EUC$/i
|
90
|
-
title = NKF.nkf("-W -e", title)
|
91
|
-
elsif @param["outencoding"] =~ /^SJIS$/i
|
92
|
-
title = NKF.nkf("-W -s", title)
|
93
|
-
elsif @param["outencoding"] =~ /^JIS$/i
|
94
|
-
title = NKF.nkf("-W -j", title)
|
95
|
-
end
|
88
|
+
title = convert_outencoding(chap.title, @param["outencoding"])
|
96
89
|
printf "%s %3dKB %6dC %5dL %3dP %s %-s\n",
|
97
90
|
chapnumstr(chap.number), vol.kbytes, vol.chars, vol.lines, vol.page,
|
98
91
|
"#{chap.name} ".ljust(25, '.'), title
|
data/debian/changelog
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
review (0
|
1
|
+
review (1.0+20120212) unstable; urgency=low
|
2
2
|
|
3
|
-
* Initial Release. (closes: #)
|
3
|
+
* Initial Release. (closes: #XXXX)
|
4
4
|
|
5
|
-
-- Kenshi Muto <kmuto@debian.org>
|
5
|
+
-- Kenshi Muto <kmuto@debian.org> Sun, 12 Feb 2012 15:38:55 +0900
|
data/debian/copyright
CHANGED
@@ -8,12 +8,14 @@ It was downloaded from:
|
|
8
8
|
|
9
9
|
Upstream Author(s):
|
10
10
|
|
11
|
-
Minero Aoki
|
12
|
-
|
11
|
+
Minero Aoki, Kenshi Muto,
|
12
|
+
Masayoshi Takahashi, and
|
13
|
+
Masanori KADO <kdmsnr@gmail.com>.
|
13
14
|
|
14
15
|
Copyright:
|
15
16
|
|
16
|
-
Copyright (C) 2006-
|
17
|
+
Copyright (C) 2006-2012 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
|
18
|
+
Masanori KADO.
|
17
19
|
|
18
20
|
For lib/uuid.rb:
|
19
21
|
Copyright(c) 2005 URABE, Shyouhei
|
data/debian/docs
CHANGED
data/doc/format.rdoc
CHANGED
@@ -259,9 +259,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
259
259
|
表は //table[識別子][キャプション]{ 〜 //} です。ヘッダと内容を
|
260
260
|
分ける罫線は「------」で書き込んであります。
|
261
261
|
|
262
|
-
|
263
|
-
除されるので、カラムの先頭文字が「.」の場合は「.」をもう一つ余計に
|
264
|
-
付けてください。例えば「.」という内容のカラムは「..」と書きます。
|
262
|
+
カラム間は任意個数のタブで区切ります。また、カラム先頭の「.」は削除されるので、カラムの先頭文字が「.」の場合は「.」をもう一つ余計に付けてください。例えば「.」という内容のカラムは「..」と書きます。
|
265
263
|
また、空のカラムは「.」と書けます。
|
266
264
|
|
267
265
|
例:
|
@@ -311,12 +309,22 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
311
309
|
本文中の「@<fn>{site}」は脚注番号に置換され、「本書のサポート
|
312
310
|
サイト……」という文は実際の脚注に変換されます。
|
313
311
|
|
312
|
+
注意: PDFで、コラムや表など平文でないところで「@<fn>{~}」を使うには、footnotetextオプションを使う必要があります。
|
313
|
+
|
314
|
+
=== footnotetextオプション
|
315
|
+
|
316
|
+
footnotetextオプションを使うには、YAMLファイルのparamsに「--footnotetext」を追加します。
|
317
|
+
|
318
|
+
これでPDFのコラムや表のなかでも脚注が使えるようになります。
|
319
|
+
|
320
|
+
ただし、通常の脚注(footnote)ではなく、footnotemarkとfootnotetextを使うため、本文と脚注が別ページに分かれる可能性があるなど、いろいろな制約があります。
|
321
|
+
|
314
322
|
== 参考文献の定義
|
315
323
|
|
316
324
|
参考文献は同一ディレクトリ内の bib.re に定義します。
|
317
|
-
//bibpaper[
|
325
|
+
//bibpaper[cite][キャプション]{..コメント..}
|
318
326
|
コメントが無い場合も定義可能です。
|
319
|
-
//bibpaper[
|
327
|
+
//bibpaper[cite][キャプション]
|
320
328
|
|
321
329
|
例:
|
322
330
|
|
@@ -359,14 +367,12 @@ LaTeX の式を挿入するには、//texequation{ 〜 //} を使います。
|
|
359
367
|
|
360
368
|
出力される空白を制御するタグとしては、//noindentがあります。
|
361
369
|
|
362
|
-
//noindent::
|
370
|
+
//noindent:: その直後に来る段落冒頭のインデントをなくす(HTMLではnoindentクラスになる)
|
363
371
|
|
364
372
|
以前あった「//linebreak」(改行)、「//pagebreak」(改ページ)は廃止になります。
|
365
373
|
|
366
374
|
== コメント
|
367
375
|
|
368
|
-
以前は「//comment」というタグがありましたが、廃止されます。
|
369
|
-
|
370
376
|
最終結果に出力されないコメントを記述したい場合は「#@#」を使ってください。
|
371
377
|
|
372
378
|
例:
|
@@ -379,6 +385,12 @@ LaTeX の式を挿入するには、//texequation{ 〜 //} を使います。
|
|
379
385
|
|
380
386
|
#@warn(あとで書く)
|
381
387
|
|
388
|
+
最終結果に出力するコメントを記述したい場合は、//commentまたは@<comment>を使った上で、review-compileコマンドに--draftオプションを追加してください。
|
389
|
+
|
390
|
+
例:
|
391
|
+
|
392
|
+
@<comment>{あとで書く}
|
393
|
+
|
382
394
|
== 生データ行
|
383
395
|
|
384
396
|
ReVIEW のタグ範囲を越えて何か特別な行を挿入したい場合、//raw を使います。
|
@@ -413,7 +425,31 @@ ReVIEW は任意のブロックを追加可能なので、本によって専用
|
|
413
425
|
//prototype:: 関数プロトタイプ。『ふつうのLinuxプログラミング』で使用。
|
414
426
|
//type:: 関数の型宣言。『ふつうのHaskellプログラミング』で使用。
|
415
427
|
|
416
|
-
拡張文法はreview-ext.rb
|
428
|
+
拡張文法はreview-ext.rbというファイルで指定できます。
|
429
|
+
例えば、
|
430
|
+
|
431
|
+
# review-ext.rb
|
432
|
+
ReVIEW::Compiler.defblock :foo, 0..1
|
433
|
+
|
434
|
+
class ReVIEW::HTMLBuilder
|
435
|
+
def foo(lines, caption = nil)
|
436
|
+
puts lines.join(",")
|
437
|
+
end
|
438
|
+
end
|
439
|
+
|
440
|
+
のようにすると、以下のような文法を追加できます。
|
441
|
+
|
442
|
+
//foo{
|
443
|
+
A
|
444
|
+
B
|
445
|
+
C
|
446
|
+
//}
|
447
|
+
|
448
|
+
# 出力結果
|
449
|
+
A,B,C
|
450
|
+
|
451
|
+
詳しいことについては、ここでは触れません。
|
452
|
+
|
417
453
|
|
418
454
|
== 段落中で使う文法 (インライン命令)
|
419
455
|
|
@@ -428,12 +464,14 @@ ReVIEW は任意のブロックを追加可能なので、本によって専用
|
|
428
464
|
@<bou>{ふさわしい}:: 傍点。
|
429
465
|
@<ruby>{直截, ちょくせつ}:: ルビ。
|
430
466
|
@<ami>{重点ポイント}:: 文字に対するアミかけ。
|
431
|
-
@<b>{どうしても}::
|
432
|
-
@<em>{どうしても}:: 太字(強調)。
|
467
|
+
@<b>{どうしても}:: 太字 (ボールド)。
|
433
468
|
@<i>{どうしても}:: イタリック。
|
469
|
+
@<strong>{どうしても}:: 強調。
|
470
|
+
@<em>{どうしても}:: 強調。
|
434
471
|
@<tt>{foo($bar)}:: テキストをテレタイプ文字(等幅フォント)で出力する。
|
435
472
|
@<tti>{FooClass}:: テキストをテレタイプ文字(等幅フォント)のイタリックで出力する。
|
436
473
|
@<ttb>{BarClass}:: テキストをテレタイプ文字(等幅フォント)の太字で出力する。
|
474
|
+
@<u>{下線}:: 下線。
|
437
475
|
@<br>{}:: 段落中改行。
|
438
476
|
@<m>{a + \alpha}:: TeXインライン式。
|
439
477
|
@<icon>{samplephoto}:: インライン画像。
|
@@ -505,6 +543,14 @@ PART:
|
|
505
543
|
|
506
544
|
@<hd>{preface|はじめに|まずわ}
|
507
545
|
|
546
|
+
参照先にラベルが設定されている場合は、ラベルで参照します。
|
547
|
+
|
548
|
+
=={hajimeni} はじめに
|
549
|
+
:
|
550
|
+
=== まずわ
|
551
|
+
:
|
552
|
+
@<hd>{hajimeni|まずわ}
|
553
|
+
|
508
554
|
== リンク
|
509
555
|
|
510
556
|
Web ハイパーリンクを記述するには、リンクに @<href>、アンカーに //label
|
data/doc/quickstart.rdoc
CHANGED
@@ -140,7 +140,7 @@ sample.re を HTML に変換すると、次のようになります。
|
|
140
140
|
</body>
|
141
141
|
</html>
|
142
142
|
|
143
|
-
ReVIEW フォーマットについての詳細は、format.rdoc
|
143
|
+
ReVIEW フォーマットについての詳細は、 {format.rdoc}[https://github.com/kmuto/review/blob/master/doc/format.rdoc] を参照してください。
|
144
144
|
|
145
145
|
review-compile を含め、ほとんどのコマンドは --help オプションを付けるとオプションについてのヘルプが表示されます。review-compile には多数のオプションがあるので確認してください。
|
146
146
|
|
@@ -172,9 +172,9 @@ review-compile を含め、ほとんどのコマンドは --help オプション
|
|
172
172
|
|
173
173
|
review-pdfmaker コマンドで PDF ブックの作成、review-epubmaker コマンドで EPUB ファイルの作成ができます。
|
174
174
|
|
175
|
-
PDF を作成するには、pTeXLive2009 以上の環境が必要です。EPUB を作成するには、zip コマンドが必要です (MathML も使いたいときには、[
|
175
|
+
PDF を作成するには、pTeXLive2009 以上の環境が必要です。EPUB を作成するには、zip コマンドが必要です (MathML も使いたいときには、 {MathML ライブラリ}[http://www.hinet.mydns.jp/?mathml.rb]も必要です)。
|
176
176
|
|
177
|
-
いずれのコマンドも、必要な設定情報を記した YAML ファイルを引数に指定して実行します。YAML ファイルのサンプルは、sample.yaml
|
177
|
+
いずれのコマンドも、必要な設定情報を記した YAML ファイルを引数に指定して実行します。YAML ファイルのサンプルは、 {sample.yaml}[https://github.com/kmuto/review/blob/master/doc/sample.yaml] としてこのドキュメントと同じディレクトリに収録しています。
|
178
178
|
|
179
179
|
review-pdfmaker YAMLファイル ←PDFの作成
|
180
180
|
review-epubmaker YAMLファイル ←EPUBの作成
|
@@ -184,5 +184,5 @@ PDF を作成するには、pTeXLive2009 以上の環境が必要です。EPUB
|
|
184
184
|
ReVIEW は、青木峰郎によって最初に作成されました。武藤健志がこの開発・保守を引き継ぎ、2010年12月時点では、武藤健志、高橋征義、角征典が開発・保守を継続しています。
|
185
185
|
|
186
186
|
バグ・パッチの報告、開発者用メーリングリストなどについての情報は、
|
187
|
-
|
187
|
+
https://github.com/kmuto/review/wiki
|
188
188
|
を参照してください。
|
data/doc/sample.yaml
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# このファイルはUTF-8エンコーディングで記述してください。
|
6
6
|
|
7
7
|
# ブック名(ファイル名になるもの。ASCII範囲の文字を使用)
|
8
|
-
bookname: sample
|
8
|
+
bookname: review-sample
|
9
9
|
# 書名
|
10
10
|
booktitle: ReVIEW EPUBサンプル
|
11
11
|
# 著者
|
@@ -44,15 +44,19 @@ secnolevel: 2
|
|
44
44
|
epubversion: 2
|
45
45
|
# HTMLのバージョン(現時点では4または5。デフォルトは4。epubversionを3にした場合は自動で5に設定される)
|
46
46
|
htmlversion: 4
|
47
|
+
# 表紙を出力するか
|
48
|
+
titlepage: true
|
49
|
+
# 目次を出力するか
|
50
|
+
toc: true
|
47
51
|
# EPUB標準の目次以外に目次を作成するか
|
48
|
-
|
52
|
+
mytoc: null
|
49
53
|
# 奥付を作成するか。デフォルトでは作成されない。trueを指定するとデフォルトの奥付、ファイル名を指定するとそれがcolophon.htmlとしてコピーされる
|
50
|
-
|
54
|
+
colophon: null
|
51
55
|
# XHTML生成後に実行するプログラム。$1:HTMLの生成されたディレクトリ $2:ReVIEWファイルのあるディレクトリ $3:起動時指定のyamlファイル名
|
52
56
|
# posthook: hook.sh
|
53
|
-
# EPUB
|
54
|
-
|
57
|
+
# EPUBで表紙をコンテンツに含めるか。デフォルトでは作成されない。yesにするとiBooks等でも最初に表紙が表示されるようになる
|
58
|
+
cover_linear: null
|
55
59
|
# review-compileに渡すパラメータ
|
56
60
|
params: --stylesheet=sample.css
|
57
|
-
# デバッグフラグ。
|
58
|
-
|
61
|
+
# デバッグフラグ。nullでないときには一時ファイルをカレントディレクトリに作成し、削除もしない
|
62
|
+
debug: null
|
data/lib/epubmaker.rb
CHANGED
data/lib/epubmaker/epubv2.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# = epubv2.rb -- EPUB version 2 producer.
|
3
3
|
#
|
4
|
-
# Copyright (c) 2010 Kenshi Muto and Masayoshi Takahashi
|
4
|
+
# Copyright (c) 2010-2012 Kenshi Muto and Masayoshi Takahashi
|
5
5
|
#
|
6
6
|
# This program is free software.
|
7
7
|
# You can distribute or modify this program under the terms of
|
@@ -10,6 +10,7 @@
|
|
10
10
|
#
|
11
11
|
|
12
12
|
require 'epubmaker/producer'
|
13
|
+
require 'cgi'
|
13
14
|
|
14
15
|
module EPUBMaker
|
15
16
|
|
@@ -22,9 +23,7 @@ module EPUBMaker
|
|
22
23
|
|
23
24
|
# Return mimetype content.
|
24
25
|
def mimetype
|
25
|
-
return
|
26
|
-
application/epub+zip
|
27
|
-
EOT
|
26
|
+
return "application/epub+zip"
|
28
27
|
end
|
29
28
|
|
30
29
|
# Return opf file content.
|
@@ -37,9 +36,9 @@ EOT
|
|
37
36
|
%w[title language date type format source description relation coverage subject rights].each do |item|
|
38
37
|
next if @producer.params[item].nil?
|
39
38
|
if @producer.params[item].instance_of?(Array)
|
40
|
-
s << @producer.params[item].map {|i| %Q[ <dc:#{item}>#{i}</dc:#{item}>\n]}.join
|
39
|
+
s << @producer.params[item].map {|i| %Q[ <dc:#{item}>#{CGI.escapeHTML(i.to_s)}</dc:#{item}>\n]}.join
|
41
40
|
else
|
42
|
-
s << %Q[ <dc:#{item}>#{@producer.params[item]}</dc:#{item}>\n]
|
41
|
+
s << %Q[ <dc:#{item}>#{CGI.escapeHTML(@producer.params[item].to_s)}</dc:#{item}>\n]
|
43
42
|
end
|
44
43
|
end
|
45
44
|
|
@@ -54,14 +53,14 @@ EOT
|
|
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 if @producer.params[role].nil?
|
56
55
|
@producer.params[role].each do |v|
|
57
|
-
s << %Q[ <dc:creator opf:role="#{role.sub('a-', '')}">#{v}</dc:creator>\n]
|
56
|
+
s << %Q[ <dc:creator opf:role="#{role.sub('a-', '')}">#{CGI.escapeHTML(v)}</dc:creator>\n]
|
58
57
|
end
|
59
58
|
end
|
60
59
|
# contributor
|
61
60
|
%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|
|
62
61
|
next if @producer.params[role].nil?
|
63
62
|
@producer.params[role].each do |v|
|
64
|
-
s << %Q[ <dc:contributor opf:role="#{role}">#{v}</dc:contributor>\n]
|
63
|
+
s << %Q[ <dc:contributor opf:role="#{role}">#{CGI.escapeHTML(v)}</dc:contributor>\n]
|
65
64
|
if role == "prt"
|
66
65
|
s << %Q[ <dc:publisher>#{v}</dc:publisher>\n]
|
67
66
|
end
|
@@ -135,15 +134,15 @@ EOT
|
|
135
134
|
s << <<EOT
|
136
135
|
</head>
|
137
136
|
<docTitle>
|
138
|
-
<text>#{@producer.params["title"]}</text>
|
137
|
+
<text>#{CGI.escapeHTML(@producer.params["title"])}</text>
|
139
138
|
</docTitle>
|
140
139
|
<docAuthor>
|
141
|
-
<text>#{@producer.params["aut"].nil? ? "" : @producer.params["aut"].join(", ")}</text>
|
140
|
+
<text>#{@producer.params["aut"].nil? ? "" : CGI.escapeHTML(@producer.params["aut"].join(", "))}</text>
|
142
141
|
</docAuthor>
|
143
142
|
<navMap>
|
144
143
|
<navPoint id="top" playOrder="1">
|
145
144
|
<navLabel>
|
146
|
-
<text>#{@producer.params["title"]}</text>
|
145
|
+
<text>#{CGI.escapeHTML(@producer.params["title"])}</text>
|
147
146
|
</navLabel>
|
148
147
|
<content src="#{@producer.params["cover"]}"/>
|
149
148
|
</navPoint>
|
@@ -203,13 +202,13 @@ EOT
|
|
203
202
|
def cover
|
204
203
|
s = common_header
|
205
204
|
s << <<EOT
|
206
|
-
<title>#{@producer.params["title"]}</title>
|
205
|
+
<title>#{CGI.escapeHTML(@producer.params["title"])}</title>
|
207
206
|
</head>
|
208
207
|
<body>
|
209
208
|
EOT
|
210
209
|
if @producer.params["coverimage"].nil?
|
211
210
|
s << <<EOT
|
212
|
-
<h1 class="cover-title">#{@producer.params["title"]}</h1>
|
211
|
+
<h1 class="cover-title">#{CGI.escapeHTML(@producer.params["title"])}</h1>
|
213
212
|
EOT
|
214
213
|
else
|
215
214
|
file = nil
|
@@ -222,7 +221,7 @@ EOT
|
|
222
221
|
raise "coverimage #{@producer.params["coverimage"]} not found. Abort." if file.nil?
|
223
222
|
s << <<EOT
|
224
223
|
<div id="cover-image" class="cover-image">
|
225
|
-
<img src="#{file}" alt="#{@producer.params["title"]}" class="max"/>
|
224
|
+
<img src="#{file}" alt="#{CGI.escapeHTML(@producer.params["title"])}" class="max"/>
|
226
225
|
</div>
|
227
226
|
EOT
|
228
227
|
end
|
@@ -238,10 +237,10 @@ EOT
|
|
238
237
|
def titlepage
|
239
238
|
s = common_header
|
240
239
|
s << <<EOT
|
241
|
-
<title>#{@producer.params["title"]}</title>
|
240
|
+
<title>#{CGI.escapeHTML(@producer.params["title"])}</title>
|
242
241
|
</head>
|
243
242
|
<body>
|
244
|
-
<h1 class="tp-title">#{@producer.params["title"]}</h1>
|
243
|
+
<h1 class="tp-title">#{CGI.escapeHTML(@producer.params["title"])}</h1>
|
245
244
|
EOT
|
246
245
|
|
247
246
|
if @producer.params["aut"]
|
@@ -250,7 +249,7 @@ EOT
|
|
250
249
|
<br />
|
251
250
|
<br />
|
252
251
|
</p>
|
253
|
-
<h2 class="tp-author">#{@producer.params["aut"]}</h2>
|
252
|
+
<h2 class="tp-author">#{CGI.escapeHTML(@producer.params["aut"])}</h2>
|
254
253
|
EOT
|
255
254
|
end
|
256
255
|
|
@@ -262,7 +261,7 @@ EOT
|
|
262
261
|
<br />
|
263
262
|
<br />
|
264
263
|
</p>
|
265
|
-
<h3 class="tp-publisher">#{@producer.params["prt"]}</h3>
|
264
|
+
<h3 class="tp-publisher">#{CGI.escapeHTML(@producer.params["prt"])}</h3>
|
266
265
|
EOT
|
267
266
|
end
|
268
267
|
|
@@ -281,7 +280,7 @@ EOT
|
|
281
280
|
</head>
|
282
281
|
<body>
|
283
282
|
<div class="colophon">
|
284
|
-
<p class="title">#{@producer.params["title"]}</p>
|
283
|
+
<p class="title">#{CGI.escapeHTML(@producer.params["title"])}</p>
|
285
284
|
EOT
|
286
285
|
|
287
286
|
if @producer.params["pubhistory"]
|
@@ -289,11 +288,11 @@ EOT
|
|
289
288
|
end
|
290
289
|
|
291
290
|
s << %Q[ <table class="colophon">\n]
|
292
|
-
s << %Q[ <tr><th>#{@producer.res.v("c-aut")}</th><td>#{@producer.params["aut"]}</td></tr>\n] if @producer.params["aut"]
|
293
|
-
s << %Q[ <tr><th>#{@producer.res.v("c-dsr")}</th><td>#{@producer.params["dsr"]}</td></tr>\n] if @producer.params["dsr"]
|
294
|
-
s << %Q[ <tr><th>#{@producer.res.v("c-ill")}</th><td>#{@producer.params["ill"]}</td></tr>\n] if @producer.params["ill"]
|
295
|
-
s << %Q[ <tr><th>#{@producer.res.v("c-edt")}</th><td>#{@producer.params["edt"]}</td></tr>\n] if @producer.params["edt"]
|
296
|
-
s << %Q[ <tr><th>#{@producer.res.v("c-prt")}</th><td>#{@producer.params["prt"]}</td></tr>\n] if @producer.params["prt"]
|
291
|
+
s << %Q[ <tr><th>#{@producer.res.v("c-aut")}</th><td>#{CGI.escapeHTML(@producer.params["aut"])}</td></tr>\n] if @producer.params["aut"]
|
292
|
+
s << %Q[ <tr><th>#{@producer.res.v("c-dsr")}</th><td>#{CGI.escapeHTML(@producer.params["dsr"])}</td></tr>\n] if @producer.params["dsr"]
|
293
|
+
s << %Q[ <tr><th>#{@producer.res.v("c-ill")}</th><td>#{CGI.escapeHTML(@producer.params["ill"])}</td></tr>\n] if @producer.params["ill"]
|
294
|
+
s << %Q[ <tr><th>#{@producer.res.v("c-edt")}</th><td>#{CGI.escapeHTML(@producer.params["edt"])}</td></tr>\n] if @producer.params["edt"]
|
295
|
+
s << %Q[ <tr><th>#{@producer.res.v("c-prt")}</th><td>#{CGI.escapeHTML(@producer.params["prt"])}</td></tr>\n] if @producer.params["prt"]
|
297
296
|
s << <<EOT
|
298
297
|
</table>
|
299
298
|
</div>
|
@@ -380,16 +379,16 @@ EOT
|
|
380
379
|
FileUtils.mkdir_p(File.dirname("#{tmpdir}/OEBPS/#{item.file}")) unless File.exist?(File.dirname("#{tmpdir}/OEBPS/#{item.file}"))
|
381
380
|
FileUtils.cp(fname, "#{tmpdir}/OEBPS/#{item.file}")
|
382
381
|
end
|
383
|
-
|
382
|
+
|
384
383
|
fork {
|
385
384
|
Dir.chdir(tmpdir) {|d|
|
386
|
-
exec("zip -0X #{epubfile} mimetype")
|
385
|
+
exec("zip", "-0X", "#{epubfile}", "mimetype")
|
387
386
|
}
|
388
387
|
}
|
389
388
|
Process.waitall
|
390
389
|
fork {
|
391
390
|
Dir.chdir(tmpdir) {|d|
|
392
|
-
exec("zip -Xr9D #{epubfile} META-INF OEBPS")
|
391
|
+
exec("zip", "-Xr9D", "#{epubfile}", "META-INF", "OEBPS")
|
393
392
|
}
|
394
393
|
}
|
395
394
|
Process.waitall
|