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/test/test_topbuilder.rb
CHANGED
@@ -4,6 +4,7 @@ require 'test_helper'
|
|
4
4
|
require 'review/compiler'
|
5
5
|
require 'review/book'
|
6
6
|
require 'review/topbuilder'
|
7
|
+
require 'review/i18n'
|
7
8
|
|
8
9
|
class TOPBuidlerTest < Test::Unit::TestCase
|
9
10
|
include ReVIEW
|
@@ -18,7 +19,7 @@ class TOPBuidlerTest < Test::Unit::TestCase
|
|
18
19
|
}
|
19
20
|
ReVIEW.book.param = @param
|
20
21
|
@compiler = ReVIEW::Compiler.new(@builder)
|
21
|
-
@chapter = Chapter.new(nil, 1, '-', nil, StringIO.new)
|
22
|
+
@chapter = Book::Chapter.new(nil, 1, '-', nil, StringIO.new)
|
22
23
|
location = Location.new(nil, nil)
|
23
24
|
@builder.bind(@compiler, @chapter, location)
|
24
25
|
|
@@ -128,7 +129,7 @@ class TOPBuidlerTest < Test::Unit::TestCase
|
|
128
129
|
|
129
130
|
def test_list
|
130
131
|
def @chapter.list(id)
|
131
|
-
ListIndex::Item.new("test",1)
|
132
|
+
Book::ListIndex::Item.new("test",1)
|
132
133
|
end
|
133
134
|
@builder.list(["foo", "bar"], "test", "this is @<b>{test}<&>_")
|
134
135
|
assert_equal %Q|◆→開始:リスト←◆\nリスト1.1 this is ★test☆<&>_\n\nfoo\nbar\n◆→終了:リスト←◆\n\n|, @builder.raw_result
|
@@ -136,7 +137,7 @@ class TOPBuidlerTest < Test::Unit::TestCase
|
|
136
137
|
|
137
138
|
def test_listnum
|
138
139
|
def @chapter.list(id)
|
139
|
-
ListIndex::Item.new("test",1)
|
140
|
+
Book::ListIndex::Item.new("test",1)
|
140
141
|
end
|
141
142
|
@builder.listnum(["foo", "bar"], "test", "this is @<b>{test}<&>_")
|
142
143
|
assert_equal %Q|◆→開始:リスト←◆\nリスト1.1 this is ★test☆<&>_\n\n 1: foo\n 2: bar\n◆→終了:リスト←◆\n\n|, @builder.raw_result
|
@@ -149,7 +150,7 @@ class TOPBuidlerTest < Test::Unit::TestCase
|
|
149
150
|
|
150
151
|
def test_image
|
151
152
|
def @chapter.image(id)
|
152
|
-
item = ImageIndex::Item.new("sampleimg",1)
|
153
|
+
item = Book::ImageIndex::Item.new("sampleimg",1)
|
153
154
|
item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
|
154
155
|
item
|
155
156
|
end
|
@@ -160,7 +161,7 @@ class TOPBuidlerTest < Test::Unit::TestCase
|
|
160
161
|
|
161
162
|
def test_image_with_metric
|
162
163
|
def @chapter.image(id)
|
163
|
-
item = ImageIndex::Item.new("sampleimg",1)
|
164
|
+
item = Book::ImageIndex::Item.new("sampleimg",1)
|
164
165
|
item.instance_eval{@pathes=["./images/chap1-sampleimg.png"]}
|
165
166
|
item
|
166
167
|
end
|
@@ -201,7 +202,6 @@ class TOPBuidlerTest < Test::Unit::TestCase
|
|
201
202
|
def test_block_raw0
|
202
203
|
@builder.raw("<>!\"\\n& ")
|
203
204
|
expect =<<-EOS
|
204
|
-
It is recommended to set builder(s).
|
205
205
|
<>!"
|
206
206
|
&
|
207
207
|
EOS
|
@@ -236,7 +236,6 @@ EOS
|
|
236
236
|
def test_block_raw4
|
237
237
|
@builder.raw("|top <>!\"\\n& ")
|
238
238
|
expect =<<-EOS
|
239
|
-
It is recommended to set builder(s).
|
240
239
|
|top <>!\"
|
241
240
|
&
|
242
241
|
EOS
|
data/test/test_uuid.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: review
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,8 +10,24 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
14
|
-
dependencies:
|
13
|
+
date: 2013-03-29 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - '='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.8.7
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - '='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 0.8.7
|
15
31
|
description: ReVIEW is a digital publishing system for books and ebooks. It supports
|
16
32
|
InDesign, EPUB and LaTeX.
|
17
33
|
email: kmuto@debian.org
|
@@ -22,6 +38,7 @@ executables:
|
|
22
38
|
- review-epubmaker
|
23
39
|
- review-epubmaker-ng
|
24
40
|
- review-index
|
41
|
+
- review-init
|
25
42
|
- review-pdfmaker
|
26
43
|
- review-preproc
|
27
44
|
- review-validate
|
@@ -34,6 +51,7 @@ files:
|
|
34
51
|
- .travis.yml
|
35
52
|
- COPYING
|
36
53
|
- ChangeLog
|
54
|
+
- Gemfile
|
37
55
|
- README.rdoc
|
38
56
|
- Rakefile
|
39
57
|
- VERSION
|
@@ -43,6 +61,7 @@ files:
|
|
43
61
|
- bin/review-epubmaker
|
44
62
|
- bin/review-epubmaker-ng
|
45
63
|
- bin/review-index
|
64
|
+
- bin/review-init
|
46
65
|
- bin/review-pdfmaker
|
47
66
|
- bin/review-preproc
|
48
67
|
- bin/review-validate
|
@@ -78,51 +97,93 @@ files:
|
|
78
97
|
- lib/lineinput.rb
|
79
98
|
- lib/review.rb
|
80
99
|
- lib/review/book.rb
|
100
|
+
- lib/review/book/base.rb
|
101
|
+
- lib/review/book/chapter.rb
|
102
|
+
- lib/review/book/compilable.rb
|
103
|
+
- lib/review/book/index.rb
|
104
|
+
- lib/review/book/page_metric.rb
|
105
|
+
- lib/review/book/parameters.rb
|
106
|
+
- lib/review/book/part.rb
|
107
|
+
- lib/review/book/volume.rb
|
81
108
|
- lib/review/builder.rb
|
82
|
-
- lib/review/compat.rb
|
83
109
|
- lib/review/compiler.rb
|
110
|
+
- lib/review/configure.rb
|
84
111
|
- lib/review/epubbuilder.rb
|
85
112
|
- lib/review/ewbbuilder.rb
|
86
113
|
- lib/review/exception.rb
|
114
|
+
- lib/review/extentions.rb
|
115
|
+
- lib/review/extentions/object.rb
|
116
|
+
- lib/review/extentions/string.rb
|
87
117
|
- lib/review/htmlbuilder.rb
|
88
118
|
- lib/review/htmllayout.rb
|
89
119
|
- lib/review/htmlutils.rb
|
90
120
|
- lib/review/i18n.rb
|
91
121
|
- lib/review/i18n.yaml
|
92
122
|
- lib/review/idgxmlbuilder.rb
|
93
|
-
- lib/review/
|
123
|
+
- lib/review/inaobuilder.rb
|
94
124
|
- lib/review/latexbuilder.rb
|
95
125
|
- lib/review/latexindex.rb
|
96
126
|
- lib/review/latexutils.rb
|
127
|
+
- lib/review/makerhelper.rb
|
128
|
+
- lib/review/markdownbuilder.rb
|
97
129
|
- lib/review/preprocessor.rb
|
130
|
+
- lib/review/review.tex.erb
|
98
131
|
- lib/review/textbuilder.rb
|
99
132
|
- lib/review/textutils.rb
|
100
133
|
- lib/review/tocparser.rb
|
101
134
|
- lib/review/tocprinter.rb
|
102
135
|
- lib/review/topbuilder.rb
|
103
136
|
- lib/review/unfold.rb
|
104
|
-
- lib/review/
|
137
|
+
- lib/review/version.rb
|
105
138
|
- lib/uuid.rb
|
106
139
|
- review.gemspec
|
107
140
|
- test/CHAPS
|
108
141
|
- test/bib.re
|
142
|
+
- test/book_test_helper.rb
|
143
|
+
- test/sample-book/README.md
|
144
|
+
- test/sample-book/src/CHAPS
|
145
|
+
- test/sample-book/src/PREDEF
|
146
|
+
- test/sample-book/src/Rakefile
|
147
|
+
- test/sample-book/src/_cover.html
|
148
|
+
- test/sample-book/src/ch01.re
|
149
|
+
- test/sample-book/src/ch02.re
|
150
|
+
- test/sample-book/src/config.yml
|
151
|
+
- test/sample-book/src/images/ch01-imgsample.jpg
|
152
|
+
- test/sample-book/src/images/cover.jpg
|
153
|
+
- test/sample-book/src/main.css
|
154
|
+
- test/sample-book/src/preface.re
|
155
|
+
- test/sample-book/src/sty/jumoline.sty
|
156
|
+
- test/sample-book/src/sty/samplemacro.sty
|
157
|
+
- test/sample-book/src/vendor/jumoline/README
|
158
|
+
- test/sample-book/src/vendor/jumoline/jumoline.dtx
|
159
|
+
- test/sample-book/src/vendor/jumoline/jumoline.ins
|
109
160
|
- test/test.re
|
110
161
|
- test/test_book.rb
|
162
|
+
- test/test_book_chapter.rb
|
163
|
+
- test/test_book_parameter.rb
|
164
|
+
- test/test_book_part.rb
|
111
165
|
- test/test_builder.rb
|
166
|
+
- test/test_compiler.rb
|
112
167
|
- test/test_epubmaker.rb
|
168
|
+
- test/test_epubmaker_cmd.rb
|
113
169
|
- test/test_helper.rb
|
114
170
|
- test/test_htmlbuilder.rb
|
115
171
|
- test/test_htmlutils.rb
|
116
172
|
- test/test_i18n.rb
|
117
173
|
- test/test_idgxmlbuilder.rb
|
174
|
+
- test/test_inaobuilder.rb
|
175
|
+
- test/test_index.rb
|
118
176
|
- test/test_latexbuilder.rb
|
119
177
|
- test/test_lineinput.rb
|
178
|
+
- test/test_makerhelper.rb
|
179
|
+
- test/test_pdfmaker_cmd.rb
|
120
180
|
- test/test_preprocessor.rb
|
121
181
|
- test/test_textutils.rb
|
122
182
|
- test/test_topbuilder.rb
|
123
183
|
- test/test_uuid.rb
|
124
184
|
homepage: http://github.com/kmuto/review
|
125
|
-
licenses:
|
185
|
+
licenses:
|
186
|
+
- LGPL
|
126
187
|
post_install_message:
|
127
188
|
rdoc_options: []
|
128
189
|
require_paths:
|
@@ -130,19 +191,63 @@ require_paths:
|
|
130
191
|
required_ruby_version: !ruby/object:Gem::Requirement
|
131
192
|
none: false
|
132
193
|
requirements:
|
133
|
-
- -
|
194
|
+
- - '>='
|
134
195
|
- !ruby/object:Gem::Version
|
135
196
|
version: '0'
|
136
197
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
198
|
none: false
|
138
199
|
requirements:
|
139
|
-
- -
|
200
|
+
- - '>='
|
140
201
|
- !ruby/object:Gem::Version
|
141
202
|
version: '0'
|
142
203
|
requirements: []
|
143
204
|
rubyforge_project:
|
144
|
-
rubygems_version: 1.8.
|
205
|
+
rubygems_version: 1.8.25
|
145
206
|
signing_key:
|
146
207
|
specification_version: 3
|
147
|
-
summary:
|
148
|
-
test_files:
|
208
|
+
summary: 'ReVIEW: a easy-to-use digital publishing system'
|
209
|
+
test_files:
|
210
|
+
- test/CHAPS
|
211
|
+
- test/bib.re
|
212
|
+
- test/book_test_helper.rb
|
213
|
+
- test/sample-book/README.md
|
214
|
+
- test/sample-book/src/CHAPS
|
215
|
+
- test/sample-book/src/PREDEF
|
216
|
+
- test/sample-book/src/Rakefile
|
217
|
+
- test/sample-book/src/_cover.html
|
218
|
+
- test/sample-book/src/ch01.re
|
219
|
+
- test/sample-book/src/ch02.re
|
220
|
+
- test/sample-book/src/config.yml
|
221
|
+
- test/sample-book/src/images/ch01-imgsample.jpg
|
222
|
+
- test/sample-book/src/images/cover.jpg
|
223
|
+
- test/sample-book/src/main.css
|
224
|
+
- test/sample-book/src/preface.re
|
225
|
+
- test/sample-book/src/sty/jumoline.sty
|
226
|
+
- test/sample-book/src/sty/samplemacro.sty
|
227
|
+
- test/sample-book/src/vendor/jumoline/README
|
228
|
+
- test/sample-book/src/vendor/jumoline/jumoline.dtx
|
229
|
+
- test/sample-book/src/vendor/jumoline/jumoline.ins
|
230
|
+
- test/test.re
|
231
|
+
- test/test_book.rb
|
232
|
+
- test/test_book_chapter.rb
|
233
|
+
- test/test_book_parameter.rb
|
234
|
+
- test/test_book_part.rb
|
235
|
+
- test/test_builder.rb
|
236
|
+
- test/test_compiler.rb
|
237
|
+
- test/test_epubmaker.rb
|
238
|
+
- test/test_epubmaker_cmd.rb
|
239
|
+
- test/test_helper.rb
|
240
|
+
- test/test_htmlbuilder.rb
|
241
|
+
- test/test_htmlutils.rb
|
242
|
+
- test/test_i18n.rb
|
243
|
+
- test/test_idgxmlbuilder.rb
|
244
|
+
- test/test_inaobuilder.rb
|
245
|
+
- test/test_index.rb
|
246
|
+
- test/test_latexbuilder.rb
|
247
|
+
- test/test_lineinput.rb
|
248
|
+
- test/test_makerhelper.rb
|
249
|
+
- test/test_pdfmaker_cmd.rb
|
250
|
+
- test/test_preprocessor.rb
|
251
|
+
- test/test_textutils.rb
|
252
|
+
- test/test_topbuilder.rb
|
253
|
+
- test/test_uuid.rb
|
data/lib/review/index.rb
DELETED
@@ -1,323 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Copyright (c) 2002-2007 Minero Aoki
|
4
|
-
# 2008-2009 Minero Aoki, Kenshi Muto
|
5
|
-
#
|
6
|
-
# This program is free software.
|
7
|
-
# You can distribute or modify this program under the terms of
|
8
|
-
# the GNU LGPL, Lesser General Public License version 2.1.
|
9
|
-
# For details of LGPL, see the file "COPYING".
|
10
|
-
#
|
11
|
-
|
12
|
-
require 'review/compat'
|
13
|
-
require 'review/exception'
|
14
|
-
|
15
|
-
module ReVIEW
|
16
|
-
|
17
|
-
class Index
|
18
|
-
def Index.parse(src, *args)
|
19
|
-
items = []
|
20
|
-
seq = 1
|
21
|
-
src.grep(%r<^//#{item_type()}>) do |line|
|
22
|
-
if id = line.slice(/\[(.*?)\]/, 1)
|
23
|
-
items.push item_class().new(id, seq)
|
24
|
-
seq += 1
|
25
|
-
if id == ""
|
26
|
-
warn "warning: no ID of #{item_type()} in #{line}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
new(items, *args)
|
31
|
-
end
|
32
|
-
|
33
|
-
Item = Struct.new(:id, :number)
|
34
|
-
|
35
|
-
def Index.item_class
|
36
|
-
self::Item
|
37
|
-
end
|
38
|
-
|
39
|
-
include Enumerable
|
40
|
-
|
41
|
-
def item_type
|
42
|
-
self.class.item_type
|
43
|
-
end
|
44
|
-
|
45
|
-
def initialize(items)
|
46
|
-
@items = items
|
47
|
-
@index = {}
|
48
|
-
items.each do |i|
|
49
|
-
warn "warning: duplicate ID: #{i.id} (#{i})" unless @index[i.id].nil?
|
50
|
-
@index[i.id] = i
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def [](id)
|
55
|
-
@index.fetch(id)
|
56
|
-
end
|
57
|
-
|
58
|
-
def number(id)
|
59
|
-
@index.fetch(id).number.to_s
|
60
|
-
end
|
61
|
-
|
62
|
-
def each(&block)
|
63
|
-
@items.each(&block)
|
64
|
-
end
|
65
|
-
|
66
|
-
def has_key?(id)
|
67
|
-
return @index.has_key?(id)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
|
-
class ChapterIndex < Index
|
73
|
-
def item_type
|
74
|
-
'chapter'
|
75
|
-
end
|
76
|
-
|
77
|
-
def number(id)
|
78
|
-
"第#{@index.fetch(id).number}章"
|
79
|
-
end
|
80
|
-
|
81
|
-
def title(id)
|
82
|
-
@index.fetch(id).title
|
83
|
-
end
|
84
|
-
|
85
|
-
def display_string(id)
|
86
|
-
"#{number(id)}「#{title(id)}」"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
|
91
|
-
class ListIndex < Index
|
92
|
-
def ListIndex.item_type
|
93
|
-
'(list|listnum)'
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
|
98
|
-
class TableIndex < Index
|
99
|
-
def TableIndex.item_type
|
100
|
-
'table'
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
|
105
|
-
class FootnoteIndex < Index
|
106
|
-
Item = Struct.new(:id, :number, :content)
|
107
|
-
|
108
|
-
def FootnoteIndex.parse(src)
|
109
|
-
items = []
|
110
|
-
seq = 1
|
111
|
-
src.grep(%r<^//footnote>) do |line|
|
112
|
-
if m = /\[(.*?)\]\[(.*)\]/.match(line)
|
113
|
-
items.push Item.new(m[1], seq, m[2])
|
114
|
-
end
|
115
|
-
seq += 1
|
116
|
-
end
|
117
|
-
new(items)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
|
122
|
-
class ImageIndex < Index
|
123
|
-
class Item
|
124
|
-
def initialize(id, number)
|
125
|
-
@id = id
|
126
|
-
@number = number
|
127
|
-
@pathes = nil
|
128
|
-
end
|
129
|
-
|
130
|
-
attr_reader :id
|
131
|
-
attr_reader :number
|
132
|
-
attr_writer :index # internal use only
|
133
|
-
|
134
|
-
def bound?
|
135
|
-
not pathes().empty?
|
136
|
-
end
|
137
|
-
|
138
|
-
def path
|
139
|
-
pathes().first
|
140
|
-
end
|
141
|
-
|
142
|
-
def pathes
|
143
|
-
@pathes ||= @index.find_pathes(id)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def ImageIndex.item_type
|
148
|
-
'(image|graph)'
|
149
|
-
end
|
150
|
-
|
151
|
-
def initialize(items, chapid, basedir, types)
|
152
|
-
super items
|
153
|
-
items.each do |i|
|
154
|
-
i.index = self
|
155
|
-
end
|
156
|
-
@chapid = chapid
|
157
|
-
@basedir = basedir
|
158
|
-
@types = types
|
159
|
-
end
|
160
|
-
|
161
|
-
# internal use only
|
162
|
-
def find_pathes(id)
|
163
|
-
if ReVIEW.book.param["subdirmode"]
|
164
|
-
re = /\A#{id}(?i:#{@types.join('|')})\z/x
|
165
|
-
entries().select {|ent| re =~ ent }\
|
166
|
-
.sort_by {|ent| @types.index(File.extname(ent).downcase) }\
|
167
|
-
.map {|ent| "#{@basedir}/#{@chapid}/#{ent}" }
|
168
|
-
elsif ReVIEW.book.param["singledirmode"]
|
169
|
-
re = /\A#{id}(?i:#{@types.join('|')})\z/x
|
170
|
-
entries().select {|ent| re =~ ent }\
|
171
|
-
.sort_by {|ent| @types.index(File.extname(ent).downcase) }\
|
172
|
-
.map {|ent| "#{@basedir}/#{ent}" }
|
173
|
-
else
|
174
|
-
re = /\A#{@chapid}-#{id}(?i:#{@types.join('|')})\z/x
|
175
|
-
entries().select {|ent| re =~ ent }\
|
176
|
-
.sort_by {|ent| @types.index(File.extname(ent).downcase) }\
|
177
|
-
.map {|ent| "#{@basedir}/#{ent}" }
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
private
|
182
|
-
|
183
|
-
def entries
|
184
|
-
# @entries: do not cache for graph
|
185
|
-
if ReVIEW.book.param["subdirmode"]
|
186
|
-
@entries = Dir.entries(File.join(@basedir, @chapid))
|
187
|
-
else
|
188
|
-
@entries = Dir.entries(@basedir)
|
189
|
-
end
|
190
|
-
rescue Errno::ENOENT
|
191
|
-
@entries = []
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
class IconIndex < ImageIndex
|
196
|
-
def IconIndex.parse(src, *args)
|
197
|
-
items = []
|
198
|
-
seq = 1
|
199
|
-
src.grep(%r!@<icon>!) do |line|
|
200
|
-
line.gsub(/@<icon>\{(.+?)\}/) do |m|
|
201
|
-
items.push item_class().new($1, seq)
|
202
|
-
seq += 1
|
203
|
-
end
|
204
|
-
end
|
205
|
-
new(items, *args)
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
class FormatRef
|
210
|
-
def initialize(locale, index)
|
211
|
-
@locale = locale
|
212
|
-
@index = index
|
213
|
-
end
|
214
|
-
|
215
|
-
def title(id)
|
216
|
-
sprintf(@locale["#{@index.item_type}_caption_format".intern],
|
217
|
-
@index.title(id))
|
218
|
-
end
|
219
|
-
|
220
|
-
def number(id)
|
221
|
-
sprintf(@locale["#{@index.item_type}_number_format".intern],
|
222
|
-
@index.number(id))
|
223
|
-
end
|
224
|
-
|
225
|
-
def method_missing(mid, *args, &block)
|
226
|
-
super unless @index.respond_to?(mid)
|
227
|
-
@index.__send__(mid, *args, &block)
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
class BibpaperIndex < Index
|
232
|
-
Item = Struct.new(:id, :number, :caption)
|
233
|
-
|
234
|
-
def BibpaperIndex.parse(src)
|
235
|
-
items = []
|
236
|
-
seq = 1
|
237
|
-
src.grep(%r<^//bibpaper>) do |line|
|
238
|
-
if m = /\[(.*?)\]\[(.*)\]/.match(line)
|
239
|
-
items.push Item.new(m[1], seq, m[2])
|
240
|
-
end
|
241
|
-
seq += 1
|
242
|
-
end
|
243
|
-
new(items)
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
class NumberlessImageIndex < ImageIndex
|
248
|
-
class Item < ImageIndex::Item
|
249
|
-
def initialize(id, number)
|
250
|
-
@id = id
|
251
|
-
@number = ""
|
252
|
-
@pathes = nil
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
def NumberlessImageIndex.item_type
|
257
|
-
'numberlessimage'
|
258
|
-
end
|
259
|
-
|
260
|
-
def number(id)
|
261
|
-
""
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
|
-
class IndepImageIndex < ImageIndex
|
266
|
-
class Item < ImageIndex::Item
|
267
|
-
def initialize(id, number)
|
268
|
-
@id = id
|
269
|
-
@number = ""
|
270
|
-
@pathes = nil
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
def IndepImageIndex.item_type
|
275
|
-
'indepimage'
|
276
|
-
end
|
277
|
-
|
278
|
-
def number(id)
|
279
|
-
""
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
class HeadlineIndex < Index
|
284
|
-
Item = Struct.new(:id, :number, :caption)
|
285
|
-
|
286
|
-
def HeadlineIndex.parse(src, chap)
|
287
|
-
items = []
|
288
|
-
indexs = []
|
289
|
-
headlines = []
|
290
|
-
src.each do |line|
|
291
|
-
if m = /\A(=+)(?:\[(.+?)\])?(?:\{(.+?)\})?(.*)/.match(line)
|
292
|
-
next if m[2] == 'column'
|
293
|
-
index = m[1].size - 2
|
294
|
-
if index >= 0
|
295
|
-
if indexs.size > (index + 1)
|
296
|
-
indexs = indexs.take(index + 1)
|
297
|
-
headlines = headlines.take(index + 1)
|
298
|
-
end
|
299
|
-
indexs << 0 if indexs[index].nil?
|
300
|
-
indexs[index] += 1
|
301
|
-
headlines[index] = m[4].strip
|
302
|
-
items.push Item.new(headlines.join("|"), indexs.dup, m[4].strip)
|
303
|
-
end
|
304
|
-
end
|
305
|
-
end
|
306
|
-
new(items, chap)
|
307
|
-
end
|
308
|
-
|
309
|
-
def initialize(items, chap)
|
310
|
-
@items = items
|
311
|
-
@chap = chap
|
312
|
-
@index = {}
|
313
|
-
items.each do |i|
|
314
|
-
warn "warning: duplicate ID: #{i.id}" unless @index[i.id].nil?
|
315
|
-
@index[i.id] = i
|
316
|
-
end
|
317
|
-
end
|
318
|
-
|
319
|
-
def number(id)
|
320
|
-
return ([@chap.number] + @index.fetch(id).number).join(".")
|
321
|
-
end
|
322
|
-
end
|
323
|
-
end
|