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
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'review/book'
|
3
|
+
|
4
|
+
require 'stringio'
|
5
|
+
require 'tempfile'
|
6
|
+
require 'tmpdir'
|
7
|
+
|
8
|
+
include ReVIEW
|
9
|
+
|
10
|
+
module BookTestHelper
|
11
|
+
def mktmpbookdir(files = {})
|
12
|
+
created_files = {}
|
13
|
+
Dir.mktmpdir do |dir|
|
14
|
+
files.each_pair do |basename, content|
|
15
|
+
path = File.join(dir, basename)
|
16
|
+
File.open(path, 'w') {|o| o.print content }
|
17
|
+
created_files[basename] = path
|
18
|
+
end
|
19
|
+
book = Book::Base.new(dir)
|
20
|
+
yield(dir, book, created_files)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_instance_variables(obj)
|
25
|
+
obj.instance_variables.inject({}) do |memo, name|
|
26
|
+
value = obj.instance_variable_get(name)
|
27
|
+
if value.instance_variables.empty?
|
28
|
+
memo[name] = value
|
29
|
+
else
|
30
|
+
memo[name] = get_instance_variables(value)
|
31
|
+
end
|
32
|
+
memo
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
preface.re
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
def build(mode, chapter)
|
4
|
+
sh "review-compile --target=#{mode} --footnotetext --singledirmode --stylesheet=style.css #{chapter} > tmp"
|
5
|
+
mode_ext = {"html" => "html", "latex" => "tex",
|
6
|
+
"idgxml" => "xml", "inao" => "inao"}
|
7
|
+
FileUtils.mv "tmp", chapter.gsub(/re\z/, mode_ext[mode])
|
8
|
+
end
|
9
|
+
|
10
|
+
def build_all(mode)
|
11
|
+
sh "review-compile --all --target=#{mode} --footnotetext --singledirmode --stylesheet=style.css"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "build html (Usage: rake build re=target.re)"
|
15
|
+
task :html do
|
16
|
+
if ENV['re'].nil?
|
17
|
+
puts "Usage: rake build re=target.re"
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
build("html", ENV['re'])
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "build all html"
|
24
|
+
task :html_all do
|
25
|
+
build_all("html")
|
26
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
= サンプル
|
2
|
+
|
3
|
+
//lead{
|
4
|
+
書き方のサンプルです。上書きするなりして消して下さい。
|
5
|
+
//}
|
6
|
+
|
7
|
+
== 本文の書き方
|
8
|
+
|
9
|
+
最初の段落です。
|
10
|
+
この行も同じ段落です。
|
11
|
+
|
12
|
+
次の段落です。
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
2行以上以上空いていても1行空いているのと同様に処理します。
|
17
|
+
|
18
|
+
=== 見出し
|
19
|
+
|
20
|
+
「=」「==」「===」の後に一文字空白をあけると見出しになります。
|
21
|
+
|
22
|
+
|
23
|
+
====[column] コラムについて
|
24
|
+
|
25
|
+
見出しの先頭に「[column]」と書くと、そこはコラムになります。
|
26
|
+
|
27
|
+
== 箇条書き
|
28
|
+
|
29
|
+
番号のない箇条書きは「*」を使います。前後に空白を入れて下さい。
|
30
|
+
|
31
|
+
* 1つ目
|
32
|
+
* 2つ目
|
33
|
+
* 3つ目
|
34
|
+
|
35
|
+
番号つきの箇条書きには、「1.」「2.」などと書きます。
|
36
|
+
数字の値は実際には無視され、連番が振られます。
|
37
|
+
|
38
|
+
1. 1つ目
|
39
|
+
2. 2つ目
|
40
|
+
3. 3つ目
|
41
|
+
|
42
|
+
== ソースコードなどのリスト
|
43
|
+
|
44
|
+
リストには「//list」ブロックや「//emlist」ブロックを使います。
|
45
|
+
|
46
|
+
//list[list][リストのサンプル]{
|
47
|
+
int main(int argc, char **argv) {
|
48
|
+
puts("OK");
|
49
|
+
return 0;
|
50
|
+
}
|
51
|
+
//}
|
52
|
+
|
53
|
+
文中にリストを書くには「//emlist」になります。
|
54
|
+
|
55
|
+
//emlist{
|
56
|
+
def main
|
57
|
+
puts "ok"
|
58
|
+
end
|
59
|
+
//}
|
60
|
+
|
61
|
+
== 画像
|
62
|
+
|
63
|
+
画像は「//image」ブロックを使います。
|
64
|
+
|
65
|
+
//image[imgsample][画像サンプル]{
|
66
|
+
//}
|
67
|
+
|
68
|
+
|
69
|
+
より詳しくは、
|
70
|
+
@<href>{https://github.com/kmuto/review/blob/master/doc/format.rdoc}
|
71
|
+
を御覧ください。
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# review-epubmaker向けの設定ファイルの例。
|
2
|
+
# yamlファイルをReVIEWファイルのある場所に置き、
|
3
|
+
# 「review-epubmaker yamlファイル」を実行すると、<bookname>.epubファイルが
|
4
|
+
# 生成されます。
|
5
|
+
# このファイルはUTF-8エンコーディングで記述してください。
|
6
|
+
|
7
|
+
# ブック名(ファイル名になるもの。ASCII範囲の文字を使用)
|
8
|
+
bookname: book
|
9
|
+
# 書名
|
10
|
+
booktitle: ReVIEWサンプル書籍
|
11
|
+
# 著者
|
12
|
+
aut: 高橋征義
|
13
|
+
prt: 達人出版会
|
14
|
+
prt_url: http://github.com/takahashim/review-sample-book/
|
15
|
+
edt: 高橋征義
|
16
|
+
date: 2011-08-03
|
17
|
+
rights: |
|
18
|
+
(C) 2011 Masayoshi Takahashi
|
19
|
+
description:
|
20
|
+
# 以下はオプション
|
21
|
+
# prt: 出版社
|
22
|
+
# asn: Associated name
|
23
|
+
# ant: Bibliographic antecedent
|
24
|
+
# clb: 貢献者
|
25
|
+
# edt: 編集者
|
26
|
+
# dsr: デザイナ
|
27
|
+
# ill: イラストレータ
|
28
|
+
# pht: 撮影者
|
29
|
+
# trl: 翻訳者
|
30
|
+
# date: 刊行日
|
31
|
+
# rights: 権利表記
|
32
|
+
# description: ブックの説明
|
33
|
+
#
|
34
|
+
# coverfile: カバーページのbody要素内に挿入する内容を記述したファイル名
|
35
|
+
coverfile: _cover.html
|
36
|
+
# coverimage: 表紙用画像ファイル
|
37
|
+
coverimage: cover.jpg
|
38
|
+
# 固有IDに使用するドメイン
|
39
|
+
urnid: http://tatsu-zine.com/books/review-sample-book/1.0.0/
|
40
|
+
# CSSファイル (yamlファイルおよびReVIEWファイルを置いたディレクトリにあること
|
41
|
+
stylesheet: main.css
|
42
|
+
# 目次として抽出するレベル
|
43
|
+
toclevel: 2
|
44
|
+
# セクション番号を表示するレベル
|
45
|
+
secnolevel: 3
|
46
|
+
# review-compileに渡すパラメータ
|
47
|
+
params: --stylesheet=main.css
|
48
|
+
# 目次生成用?
|
49
|
+
mytoc: true
|
50
|
+
# 奥付生成用
|
51
|
+
colophon: true
|
52
|
+
texstyle: samplemacro
|
53
|
+
pubhistory: |
|
54
|
+
2011年08月03日 v1.0.0版発行
|
55
|
+
debug: true
|
Binary file
|
Binary file
|
@@ -0,0 +1,251 @@
|
|
1
|
+
@charset "utf-8";
|
2
|
+
/* Tatujin-Publishing */
|
3
|
+
/* Style sheet for epub */
|
4
|
+
/* Ver.0.8b1 */
|
5
|
+
|
6
|
+
/*
|
7
|
+
Scale & Rhythm
|
8
|
+
line-height 1.6
|
9
|
+
16px = 1em
|
10
|
+
x:p:h1:h2:h3 = 12px:14px:16px:24px:30px
|
11
|
+
*/
|
12
|
+
* {
|
13
|
+
}
|
14
|
+
body {
|
15
|
+
margin: 0;
|
16
|
+
padding: 0;
|
17
|
+
font-size: 1em;
|
18
|
+
line-height:1.6;
|
19
|
+
font-family: "ShinGoPro-Regular","ShinGo-Regular", sans-serif;
|
20
|
+
/*
|
21
|
+
word-break: normal;
|
22
|
+
-webkit-line-break: after-white-space;
|
23
|
+
*/
|
24
|
+
}
|
25
|
+
p, ul, ol, dl, pre, table {
|
26
|
+
font-family: "ShinGo Regular","ShinGo R","新ゴR","新ゴ R", sans-serif;
|
27
|
+
font-size: 0.875em;
|
28
|
+
}
|
29
|
+
/* Heading */
|
30
|
+
h1 {
|
31
|
+
margin: 0 0 3em;
|
32
|
+
padding: 0.5em 0 0;
|
33
|
+
border-top: 14px #326450 solid;
|
34
|
+
text-align: left;
|
35
|
+
font-size: 1.875em;
|
36
|
+
font-weight: bold;
|
37
|
+
}
|
38
|
+
h2 {
|
39
|
+
margin: 3em 0 0.5em;
|
40
|
+
padding: 0.5em 0 0;
|
41
|
+
border-top: 2px #326450 solid;
|
42
|
+
text-align: left;
|
43
|
+
font-size: 1.5em;
|
44
|
+
font-weight: bold;
|
45
|
+
}
|
46
|
+
h3 {
|
47
|
+
margin: 3em 0 0.5em;
|
48
|
+
padding: 0;
|
49
|
+
text-align: left;
|
50
|
+
font-size: 1em;
|
51
|
+
font-weight: bold;
|
52
|
+
}
|
53
|
+
h4, h5, h6 {
|
54
|
+
margin:0.7em 0;
|
55
|
+
padding: 0;
|
56
|
+
text-align: left;
|
57
|
+
line-height: 1.6;
|
58
|
+
font-weight: bold;
|
59
|
+
}
|
60
|
+
/* Paragraph */
|
61
|
+
p {
|
62
|
+
margin:0.7em 0;
|
63
|
+
padding: 0;
|
64
|
+
text-align: left;
|
65
|
+
text-indent: 1em;
|
66
|
+
line-height: 1.6;
|
67
|
+
}
|
68
|
+
div.lead p {
|
69
|
+
color: #666;
|
70
|
+
line-height: 1.6;
|
71
|
+
font-size: 0.75em;
|
72
|
+
}
|
73
|
+
/* List */
|
74
|
+
ul, ol {
|
75
|
+
margin: 2em 0 2em 2em;
|
76
|
+
padding: 0;
|
77
|
+
list-style-position: outside;
|
78
|
+
}
|
79
|
+
ul > li,
|
80
|
+
ol > li {
|
81
|
+
margin: 0 0 0.7em 0;
|
82
|
+
padding: 0;
|
83
|
+
line-height: 1.6;
|
84
|
+
}
|
85
|
+
dl {
|
86
|
+
margin: 2em 0;
|
87
|
+
padding: 0;
|
88
|
+
}
|
89
|
+
dt {
|
90
|
+
margin: 0;
|
91
|
+
padding: 0;
|
92
|
+
font-weight: bold;
|
93
|
+
}
|
94
|
+
dd {
|
95
|
+
margin: 0 0 1em 2em;
|
96
|
+
padding: 0;
|
97
|
+
line-height: 1.6;
|
98
|
+
}
|
99
|
+
/* Table
|
100
|
+
p.tablecaptionではなく
|
101
|
+
table caption {}を使う方が良いかも?
|
102
|
+
*/
|
103
|
+
table {
|
104
|
+
margin: 0 auto 2em auto;
|
105
|
+
border-collapse: collapse;
|
106
|
+
}
|
107
|
+
table tr th {
|
108
|
+
background-color: #eee;
|
109
|
+
border:1px #aaa solid;
|
110
|
+
font-size: 0.75em;
|
111
|
+
font-weight: normal;
|
112
|
+
}
|
113
|
+
table tr td {
|
114
|
+
padding: 0.3em;
|
115
|
+
border:1px #aaa solid;
|
116
|
+
font-size: 0.75em;
|
117
|
+
}
|
118
|
+
p.tablecaption, table caption {
|
119
|
+
margin: 0;
|
120
|
+
color: #666;
|
121
|
+
font-size: 0.75em;
|
122
|
+
font-weight: bold;
|
123
|
+
text-indent: 0;
|
124
|
+
}
|
125
|
+
/* Quote */
|
126
|
+
blockquote {
|
127
|
+
margin: 2em 0 2em 2em;
|
128
|
+
padding: 0.3em 1em;
|
129
|
+
border: 1px #aaa solid;
|
130
|
+
}
|
131
|
+
/* Column Block */
|
132
|
+
div.column {
|
133
|
+
margin: 2em 0 2em 2em;
|
134
|
+
padding: 0.3em 1em;
|
135
|
+
background-color: #eee;
|
136
|
+
-webkit-border-radius: 0.7em;
|
137
|
+
}
|
138
|
+
div.column *{
|
139
|
+
margin:0.7em 0;
|
140
|
+
}
|
141
|
+
div.column ul,
|
142
|
+
div.column ol {
|
143
|
+
list-style-position: inside;
|
144
|
+
}
|
145
|
+
/* Code Block */
|
146
|
+
/*
|
147
|
+
※シンプルにできるかも
|
148
|
+
div.code {}
|
149
|
+
div.code pre.list,
|
150
|
+
div.code pre.cmd {}
|
151
|
+
div.code p.caption {}
|
152
|
+
*/
|
153
|
+
div.code, div.caption-code, div.source-code, div.emlist-code, div.emlistnum-code {
|
154
|
+
margin: 1em 0 2em 2em;
|
155
|
+
padding: 0;
|
156
|
+
}
|
157
|
+
pre.emlist, pre.source, pre.list {
|
158
|
+
margin: 0;
|
159
|
+
padding: 5px;
|
160
|
+
border: 1px #aaa solid;
|
161
|
+
}
|
162
|
+
div p.caption {
|
163
|
+
margin: 0;
|
164
|
+
color: #666;
|
165
|
+
font-size: 0.75em;
|
166
|
+
font-weight: bold;
|
167
|
+
}
|
168
|
+
div.cmd-code pre.cmd {
|
169
|
+
margin: 0;
|
170
|
+
padding: 5px;
|
171
|
+
color: #ccc;
|
172
|
+
font-weight: bold;
|
173
|
+
background-color: #444;
|
174
|
+
-webkit-border-radius: 0.5em;
|
175
|
+
}
|
176
|
+
pre.cmd, pre.emlist, pre.list, pre.source {
|
177
|
+
white-space: pre-wrap;
|
178
|
+
}
|
179
|
+
|
180
|
+
/* Image Block */
|
181
|
+
/* div.image p.caption {}
|
182
|
+
※captionをそろえた方が良いかも?*/
|
183
|
+
div.image {
|
184
|
+
margin: 2em auto;
|
185
|
+
padding: 0;
|
186
|
+
}
|
187
|
+
div.image img {
|
188
|
+
margin: 0 auto;
|
189
|
+
padding: 0;
|
190
|
+
display: block;
|
191
|
+
}
|
192
|
+
div.image p.caption {
|
193
|
+
margin: 0 auto;
|
194
|
+
text-align: center;
|
195
|
+
color: #666;
|
196
|
+
font-size: 0.75em;
|
197
|
+
font-weight: bold;
|
198
|
+
text-indent: 0;
|
199
|
+
}
|
200
|
+
/* Footnote Block */
|
201
|
+
/* p.footnoteはいらないかも? */
|
202
|
+
div.footnote {
|
203
|
+
}
|
204
|
+
div.footnote p.footnote {
|
205
|
+
color: #666;
|
206
|
+
line-height: 1.6;
|
207
|
+
font-size: 0.75em;
|
208
|
+
text-indent: 0;
|
209
|
+
}
|
210
|
+
/* Colophon */
|
211
|
+
div.colophon {
|
212
|
+
margin: 3em auto;
|
213
|
+
}
|
214
|
+
div.colophon p {
|
215
|
+
text-indent: 0;
|
216
|
+
}
|
217
|
+
div.colophon p.title {
|
218
|
+
font-size: 1.5em;
|
219
|
+
}
|
220
|
+
div.colophon table {
|
221
|
+
margin: 1em 0 2em;
|
222
|
+
border: none;
|
223
|
+
}
|
224
|
+
div.colophon table tr th {
|
225
|
+
background-color: #fff;
|
226
|
+
font-size: 1.2em;
|
227
|
+
font-weight: normal;
|
228
|
+
border: none;
|
229
|
+
}
|
230
|
+
div.colophon table tr td {
|
231
|
+
font-size: 1.2em;
|
232
|
+
font-weight: normal;
|
233
|
+
border: none;
|
234
|
+
}
|
235
|
+
|
236
|
+
/* Inline */
|
237
|
+
a[href],
|
238
|
+
a:link,
|
239
|
+
a:visited {
|
240
|
+
border-bottom: 1px dotted #531084;
|
241
|
+
text-decoration: none;
|
242
|
+
}
|
243
|
+
b {
|
244
|
+
font-weight: bold;
|
245
|
+
}
|
246
|
+
strong{
|
247
|
+
font-weight: bold;
|
248
|
+
}
|
249
|
+
em {
|
250
|
+
font-style: italic;
|
251
|
+
}
|