review 4.1.0 → 4.2.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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -1
- data/.rubocop.yml +4 -1
- data/NEWS.ja.md +29 -0
- data/NEWS.md +29 -0
- data/bin/review-index +2 -89
- data/bin/review-vol +4 -78
- data/doc/config.yml.sample +18 -5
- data/doc/config.yml.sample-simple +1 -1
- data/doc/pdfmaker.ja.md +42 -0
- data/doc/pdfmaker.md +41 -0
- data/doc/quickstart.ja.md +8 -5
- data/doc/quickstart.md +7 -4
- data/lib/review/book/base.rb +2 -4
- data/lib/review/book/compilable.rb +1 -5
- data/lib/review/book/page_metric.rb +7 -7
- data/lib/review/book/part.rb +6 -3
- data/lib/review/book/volume.rb +3 -4
- data/lib/review/builder.rb +23 -10
- data/lib/review/compiler.rb +9 -9
- data/lib/review/configure.rb +6 -0
- data/lib/review/epubmaker.rb +1 -1
- data/lib/review/htmlbuilder.rb +56 -16
- data/lib/review/idgxmlbuilder.rb +63 -22
- data/lib/review/latexbuilder.rb +70 -19
- data/lib/review/makerhelper.rb +18 -1
- data/lib/review/pdfmaker.rb +8 -1
- data/lib/review/plaintextbuilder.rb +41 -11
- data/lib/review/textmaker.rb +1 -1
- data/lib/review/textutils.rb +2 -3
- data/lib/review/tocprinter.rb +231 -102
- data/lib/review/topbuilder.rb +47 -13
- data/lib/review/version.rb +1 -1
- data/lib/review/volumeprinter.rb +99 -0
- data/lib/review/webmaker.rb +1 -1
- data/lib/review/webtocprinter.rb +38 -35
- data/review.gemspec +1 -1
- data/samples/sample-book/src/config.yml +1 -1
- data/templates/web/html/layout-html5.html.erb +2 -2
- data/test/test_book.rb +1 -1
- data/test/test_book_part.rb +3 -3
- data/test/test_helper.rb +4 -1
- data/test/test_htmlbuilder.rb +179 -0
- data/test/test_idgxmlbuilder.rb +143 -0
- data/test/test_latexbuilder.rb +223 -0
- data/test/test_pdfmaker.rb +17 -0
- data/test/test_plaintextbuilder.rb +99 -0
- data/test/test_topbuilder.rb +116 -2
- data/test/test_webtocprinter.rb +66 -34
- metadata +3 -5
- data/lib/review/tocparser.rb +0 -275
- data/test/test_tocparser.rb +0 -25
data/lib/review/topbuilder.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2008-
|
|
1
|
+
# Copyright (c) 2008-2020 Minero Aoki, Kenshi Muto
|
|
2
2
|
# 2002-2006 Minero Aoki
|
|
3
3
|
#
|
|
4
4
|
# This program is free software.
|
|
@@ -95,12 +95,18 @@ module ReVIEW
|
|
|
95
95
|
blank
|
|
96
96
|
puts "◆→開始:#{@titles['list']}←◆"
|
|
97
97
|
begin
|
|
98
|
-
|
|
98
|
+
if caption_top?('list')
|
|
99
|
+
list_header(id, caption, lang)
|
|
100
|
+
blank
|
|
101
|
+
end
|
|
102
|
+
list_body(id, lines, lang)
|
|
103
|
+
unless caption_top?('list')
|
|
104
|
+
blank
|
|
105
|
+
list_header(id, caption, lang)
|
|
106
|
+
end
|
|
99
107
|
rescue KeyError
|
|
100
108
|
error "no such list: #{id}"
|
|
101
109
|
end
|
|
102
|
-
blank
|
|
103
|
-
list_body(id, lines, lang)
|
|
104
110
|
puts "◆→終了:#{@titles['list']}←◆"
|
|
105
111
|
blank
|
|
106
112
|
end
|
|
@@ -122,8 +128,13 @@ module ReVIEW
|
|
|
122
128
|
def base_block(type, lines, caption = nil)
|
|
123
129
|
blank
|
|
124
130
|
puts "◆→開始:#{@titles[type]}←◆"
|
|
125
|
-
|
|
131
|
+
if caption_top?('list') && caption.present?
|
|
132
|
+
puts "■#{compile_inline(caption)}"
|
|
133
|
+
end
|
|
126
134
|
puts lines.join("\n")
|
|
135
|
+
if !caption_top?('list') && caption.present?
|
|
136
|
+
puts "■#{compile_inline(caption)}"
|
|
137
|
+
end
|
|
127
138
|
puts "◆→終了:#{@titles[type]}←◆"
|
|
128
139
|
blank
|
|
129
140
|
end
|
|
@@ -140,10 +151,15 @@ module ReVIEW
|
|
|
140
151
|
def emlistnum(lines, caption = nil, _lang = nil)
|
|
141
152
|
blank
|
|
142
153
|
puts "◆→開始:#{@titles['emlist']}←◆"
|
|
143
|
-
|
|
154
|
+
if caption_top?('list') && caption.present?
|
|
155
|
+
puts "■#{compile_inline(caption)}"
|
|
156
|
+
end
|
|
144
157
|
lines.each_with_index do |line, i|
|
|
145
158
|
puts((i + 1).to_s.rjust(2) + ": #{line}")
|
|
146
159
|
end
|
|
160
|
+
if !caption_top?('list') && caption.present?
|
|
161
|
+
puts "■#{compile_inline(caption)}"
|
|
162
|
+
end
|
|
147
163
|
puts "◆→終了:#{@titles['emlist']}←◆"
|
|
148
164
|
blank
|
|
149
165
|
end
|
|
@@ -152,12 +168,18 @@ module ReVIEW
|
|
|
152
168
|
blank
|
|
153
169
|
puts "◆→開始:#{@titles['list']}←◆"
|
|
154
170
|
begin
|
|
155
|
-
|
|
171
|
+
if caption_top?('list') && caption.present?
|
|
172
|
+
list_header(id, caption, lang)
|
|
173
|
+
blank
|
|
174
|
+
end
|
|
175
|
+
listnum_body(lines, lang)
|
|
176
|
+
if !caption_top?('list') && caption.present?
|
|
177
|
+
blank
|
|
178
|
+
list_header(id, caption, lang)
|
|
179
|
+
end
|
|
156
180
|
rescue KeyError
|
|
157
181
|
error "no such list: #{id}"
|
|
158
182
|
end
|
|
159
|
-
blank
|
|
160
|
-
listnum_body(lines, lang)
|
|
161
183
|
puts "◆→終了:#{@titles['list']}←◆"
|
|
162
184
|
blank
|
|
163
185
|
end
|
|
@@ -173,8 +195,10 @@ module ReVIEW
|
|
|
173
195
|
metrics = " #{metrics}" if metrics.present?
|
|
174
196
|
blank
|
|
175
197
|
puts "◆→開始:#{@titles['image']}←◆"
|
|
176
|
-
|
|
177
|
-
|
|
198
|
+
if caption_top?('image')
|
|
199
|
+
image_header(id, caption)
|
|
200
|
+
blank
|
|
201
|
+
end
|
|
178
202
|
if @chapter.image_bound?(id)
|
|
179
203
|
puts "◆→#{@chapter.image(id).path}#{metrics}←◆"
|
|
180
204
|
else
|
|
@@ -183,6 +207,10 @@ module ReVIEW
|
|
|
183
207
|
puts line
|
|
184
208
|
end
|
|
185
209
|
end
|
|
210
|
+
unless caption_top?('image')
|
|
211
|
+
blank
|
|
212
|
+
image_header(id, caption)
|
|
213
|
+
end
|
|
186
214
|
puts "◆→終了:#{@titles['image']}←◆"
|
|
187
215
|
blank
|
|
188
216
|
end
|
|
@@ -198,7 +226,7 @@ module ReVIEW
|
|
|
198
226
|
def texequation(lines, id = nil, caption = '')
|
|
199
227
|
blank
|
|
200
228
|
puts "◆→開始:#{@titles['texequation']}←◆"
|
|
201
|
-
texequation_header(id, caption)
|
|
229
|
+
texequation_header(id, caption) if caption_top?('equation')
|
|
202
230
|
|
|
203
231
|
if @book.config['imgmath']
|
|
204
232
|
fontsize = @book.config['imgmath_options']['fontsize'].to_f
|
|
@@ -214,6 +242,7 @@ module ReVIEW
|
|
|
214
242
|
puts lines.join("\n")
|
|
215
243
|
end
|
|
216
244
|
|
|
245
|
+
texequation_header(id, caption) unless caption_top?('equation')
|
|
217
246
|
puts "◆→終了:#{@titles['texequation']}←◆"
|
|
218
247
|
blank
|
|
219
248
|
end
|
|
@@ -419,13 +448,18 @@ module ReVIEW
|
|
|
419
448
|
metrics = parse_metric('top', metric)
|
|
420
449
|
metrics = " #{metrics}" if metrics.present?
|
|
421
450
|
blank
|
|
451
|
+
if caption_top?('image') && caption.present?
|
|
452
|
+
puts "図 #{compile_inline(caption)}"
|
|
453
|
+
end
|
|
422
454
|
begin
|
|
423
455
|
puts "◆→画像 #{@chapter.image(id).path.sub(%r{\A\./}, '')}#{metrics}←◆"
|
|
424
456
|
rescue
|
|
425
457
|
warn "image not bound: #{id}"
|
|
426
458
|
puts "◆→画像 #{id}←◆"
|
|
427
459
|
end
|
|
428
|
-
|
|
460
|
+
if !caption_top?('image') && caption.present?
|
|
461
|
+
puts "図 #{compile_inline(caption)}"
|
|
462
|
+
end
|
|
429
463
|
blank
|
|
430
464
|
end
|
|
431
465
|
|
data/lib/review/version.rb
CHANGED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2014-2020 Minero Aoki, Kenshi Muto
|
|
3
|
+
# 2003-2014 Minero Aoki
|
|
4
|
+
#
|
|
5
|
+
# This program is free software.
|
|
6
|
+
# You can distribute or modify this program under the terms of
|
|
7
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
8
|
+
# For details of the GNU LGPL, see the file "COPYING".
|
|
9
|
+
#
|
|
10
|
+
require 'optparse'
|
|
11
|
+
require 'review'
|
|
12
|
+
require 'review/i18n'
|
|
13
|
+
require 'review/plaintextbuilder'
|
|
14
|
+
|
|
15
|
+
include ReVIEW::TextUtils
|
|
16
|
+
|
|
17
|
+
module ReVIEW
|
|
18
|
+
class VolumePrinter
|
|
19
|
+
def self.execute(*args)
|
|
20
|
+
new.execute(*args)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def initialize
|
|
24
|
+
@logger = ReVIEW.logger
|
|
25
|
+
@config = ReVIEW::Configure.values
|
|
26
|
+
@yamlfile = 'config.yml'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def execute(*args)
|
|
30
|
+
parse_options(args)
|
|
31
|
+
@book = ReVIEW::Book::Base.load
|
|
32
|
+
@book.config = @config
|
|
33
|
+
unless File.readable?(@yamlfile)
|
|
34
|
+
@logger.error("No such fiile or can't open #{@yamlfile}.")
|
|
35
|
+
exit 1
|
|
36
|
+
end
|
|
37
|
+
@book.load_config(@yamlfile)
|
|
38
|
+
I18n.setup(@book.config['language'])
|
|
39
|
+
|
|
40
|
+
begin
|
|
41
|
+
@book.each_part do |part|
|
|
42
|
+
if part.number
|
|
43
|
+
print_chapter_volume(part)
|
|
44
|
+
end
|
|
45
|
+
part.each_chapter do |chap|
|
|
46
|
+
print_chapter_volume(chap)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
rescue ReVIEW::FileNotFound => e
|
|
50
|
+
@logger.error e
|
|
51
|
+
exit 1
|
|
52
|
+
end
|
|
53
|
+
puts '============================='
|
|
54
|
+
print_volume(@book.volume)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def parse_options(args)
|
|
58
|
+
opts = OptionParser.new
|
|
59
|
+
opts.version = ReVIEW::VERSION
|
|
60
|
+
opts.on('--yaml=YAML', 'Read configurations from YAML file.') { |yaml| @yamlfile = yaml }
|
|
61
|
+
opts.on('--help', 'Print this message and quit') do
|
|
62
|
+
puts opts.help
|
|
63
|
+
exit 0
|
|
64
|
+
end
|
|
65
|
+
begin
|
|
66
|
+
opts.parse!(args)
|
|
67
|
+
rescue OptionParser::ParseError => e
|
|
68
|
+
@logger.error e.message
|
|
69
|
+
$stderr.puts opts.help
|
|
70
|
+
exit 1
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def print_chapter_volume(chap)
|
|
75
|
+
builder = ReVIEW::PLAINTEXTBuilder.new
|
|
76
|
+
builder.bind(ReVIEW::Compiler.new(builder), chap, nil)
|
|
77
|
+
|
|
78
|
+
vol = chap.volume
|
|
79
|
+
title = chap.format_number
|
|
80
|
+
unless title.empty?
|
|
81
|
+
title += ' '
|
|
82
|
+
end
|
|
83
|
+
begin
|
|
84
|
+
title += builder.compile_inline(chap.title)
|
|
85
|
+
rescue ReVIEW::ApplicationError => e
|
|
86
|
+
@logger.warn "#{chap.name} : #{e.message.sub(/.+error: /, '')}"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
printf("%3dKB %6dC %5dL %3dP %s %-s\n",
|
|
90
|
+
vol.kbytes, vol.chars, vol.lines, vol.page,
|
|
91
|
+
"#{chap.name} ".ljust(15, '.'), title)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def print_volume(vol)
|
|
95
|
+
# total
|
|
96
|
+
printf("%3dKB %6dC %5dL %3dP\n", vol.kbytes, vol.chars, vol.lines, vol.page)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
data/lib/review/webmaker.rb
CHANGED
|
@@ -118,7 +118,7 @@ module ReVIEW
|
|
|
118
118
|
copy_backmatter(@path)
|
|
119
119
|
|
|
120
120
|
math_dir = "./#{@config['imagedir']}/_review_math"
|
|
121
|
-
if @config['imgmath'] && File.exist?("#{math_dir}/__IMGMATH_BODY__.
|
|
121
|
+
if @config['imgmath'] && File.exist?("#{math_dir}/__IMGMATH_BODY__.map")
|
|
122
122
|
make_math_images(math_dir)
|
|
123
123
|
end
|
|
124
124
|
|
data/lib/review/webtocprinter.rb
CHANGED
|
@@ -6,49 +6,52 @@ module ReVIEW
|
|
|
6
6
|
include HTMLUtils
|
|
7
7
|
|
|
8
8
|
def self.book_to_string(book)
|
|
9
|
-
|
|
10
|
-
ReVIEW::WEBTOCPrinter.new(1, {}, io).print_book(book)
|
|
11
|
-
io.seek(0)
|
|
12
|
-
io.read
|
|
9
|
+
ReVIEW::WEBTOCPrinter.new.print_book(book)
|
|
13
10
|
end
|
|
14
11
|
|
|
15
12
|
def print_book(book)
|
|
16
|
-
@
|
|
17
|
-
@
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
end
|
|
21
|
-
@out.puts '</ul>'
|
|
13
|
+
@book = book
|
|
14
|
+
@indent = nil
|
|
15
|
+
@upper = 1 # only part and chapter
|
|
16
|
+
print_result(build_result_array)
|
|
22
17
|
end
|
|
23
18
|
|
|
24
|
-
def
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
19
|
+
def print_result(result_array)
|
|
20
|
+
content = <<EOT
|
|
21
|
+
<ul class="book-toc">
|
|
22
|
+
<li><a href="index.html">TOP</a></li>
|
|
23
|
+
EOT
|
|
24
|
+
|
|
25
|
+
path = ''
|
|
26
|
+
result_array.each do |result|
|
|
27
|
+
unless result[:headline]
|
|
28
|
+
result[:headline] = '-'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
if result[:name]
|
|
32
|
+
path = "#{result[:name]}.#{@book.config['htmlext']}"
|
|
33
|
+
next
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
if result[:part]
|
|
37
|
+
if result[:part] == 'end'
|
|
38
|
+
content << "</ul></li>\n"
|
|
39
|
+
end
|
|
40
|
+
next
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if path.start_with?('.')
|
|
44
|
+
content << "<li>#{escape(result[:headline])}"
|
|
30
45
|
else
|
|
31
|
-
|
|
46
|
+
content << %Q(<li><a href="#{path}">#{escape(result[:headline])}</a>)
|
|
47
|
+
end
|
|
48
|
+
if result[:level] == 0
|
|
49
|
+
content << "\n<ul>" # part
|
|
50
|
+
else
|
|
51
|
+
content << "</li>\n"
|
|
32
52
|
end
|
|
33
53
|
end
|
|
34
|
-
|
|
35
|
-
print_chapter(chap)
|
|
36
|
-
end
|
|
37
|
-
if part.number
|
|
38
|
-
@out.puts "</ul>\n</li>\n"
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def print_chapter(chap)
|
|
43
|
-
chap_node = TOCParser.chapter_node(chap)
|
|
44
|
-
ext = chap.book.config['htmlext'] || 'html'
|
|
45
|
-
path = File.basename(chap.path.sub(/\.re/, '.' + ext))
|
|
46
|
-
label = if chap_node.number && chap.on_chaps?
|
|
47
|
-
"#{I18n.t('chapter_short', chap.number)} #{chap.title}"
|
|
48
|
-
else
|
|
49
|
-
chap.title
|
|
50
|
-
end
|
|
51
|
-
@out.puts %Q(<li><a href="#{path}">#{h(label)}</a></li>\n)
|
|
54
|
+
content << "</ul>\n"
|
|
52
55
|
end
|
|
53
56
|
end
|
|
54
57
|
end
|
data/review.gemspec
CHANGED
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
|
|
|
12
12
|
gem.summary = 'Re:VIEW: a easy-to-use digital publishing system'
|
|
13
13
|
gem.description = 'Re:VIEW is a digital publishing system for books and ebooks. It supports InDesign, EPUB and LaTeX.'
|
|
14
14
|
gem.required_rubygems_version = Gem::Requirement.new('>= 0') if gem.respond_to?(:required_rubygems_version=)
|
|
15
|
-
gem.date = '2020-
|
|
15
|
+
gem.date = '2020-06-29'
|
|
16
16
|
|
|
17
17
|
gem.files = `git ls-files`.split("\n")
|
|
18
18
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
<link rel="stylesheet" type="text/css" href="<%=h style %>" />
|
|
9
9
|
<% end %>
|
|
10
10
|
<% end%>
|
|
11
|
-
<% if @next.present? %><link rel="next" title="<%= h(@next_title)%>" href="<%= h(@next.id.to_s+"."+@book.config['htmlext']) %>"
|
|
12
|
-
<% if @prev.present? %><link rel="prev" title="<%= h(@prev_title)%>" href="<%= h(@prev.id.to_s+"."+@book.config['htmlext']) %>"
|
|
11
|
+
<% if @next.present? %><link rel="next" title="<%= h(@next_title)%>" href="<%= h(@next.id.to_s+"."+@book.config['htmlext']) %>" /><% end %>
|
|
12
|
+
<% if @prev.present? %><link rel="prev" title="<%= h(@prev_title)%>" href="<%= h(@prev.id.to_s+"."+@book.config['htmlext']) %>" /><% end %>
|
|
13
13
|
<meta name="generator" content="Re:VIEW" />
|
|
14
14
|
<title><%=h @title %> | <%=h @book.config.name_of("booktitle")%></title>
|
|
15
15
|
</head>
|
data/test/test_book.rb
CHANGED
|
@@ -587,7 +587,7 @@ EOC
|
|
|
587
587
|
end
|
|
588
588
|
|
|
589
589
|
def test_page_metric_config_array
|
|
590
|
-
mktmpbookdir('config.yml' => "bookname: book\npage_metric: [
|
|
590
|
+
mktmpbookdir('config.yml' => "bookname: book\npage_metric: [50, 40, 36, 40, 1]\n") do |dir, _book, _files|
|
|
591
591
|
book = Book::Base.new(dir)
|
|
592
592
|
config_file = File.join(dir, 'config.yml')
|
|
593
593
|
book.load_config(config_file)
|
data/test/test_book_part.rb
CHANGED
|
@@ -46,8 +46,8 @@ class PartTest < Test::Unit::TestCase
|
|
|
46
46
|
|
|
47
47
|
part = Book::Part.new(book, nil, chs)
|
|
48
48
|
assert part.volume
|
|
49
|
-
assert part.volume.bytes
|
|
50
|
-
assert part.volume.chars
|
|
51
|
-
assert part.volume.lines
|
|
49
|
+
assert part.volume.bytes == 0
|
|
50
|
+
assert part.volume.chars == 0
|
|
51
|
+
assert part.volume.lines == 0
|
|
52
52
|
end
|
|
53
53
|
end
|
data/test/test_helper.rb
CHANGED
|
@@ -14,7 +14,10 @@ end
|
|
|
14
14
|
|
|
15
15
|
def prepare_samplebook(srcdir, bookdir, latextemplatedir, configfile)
|
|
16
16
|
samplebook_dir = File.expand_path("../samples/#{bookdir}/", File.dirname(__FILE__))
|
|
17
|
-
|
|
17
|
+
files = Dir.glob(File.join(samplebook_dir, '*'))
|
|
18
|
+
# ignore temporary built files
|
|
19
|
+
files.delete_if { |file| file =~ /.*\-(pdf|epub|text)/ || file == 'webroot' }
|
|
20
|
+
FileUtils.cp_r(files, srcdir)
|
|
18
21
|
if latextemplatedir
|
|
19
22
|
# copy from review-jsbook or review-jlreq
|
|
20
23
|
template_dir = File.expand_path("../templates/latex/#{latextemplatedir}/", File.dirname(__FILE__))
|
data/test/test_htmlbuilder.rb
CHANGED
|
@@ -546,6 +546,18 @@ EOS
|
|
|
546
546
|
図1.1: sample photo
|
|
547
547
|
</p>
|
|
548
548
|
</div>
|
|
549
|
+
EOS
|
|
550
|
+
assert_equal expected, actual
|
|
551
|
+
|
|
552
|
+
@config['caption_position']['image'] = 'top'
|
|
553
|
+
actual = compile_block("//image[sampleimg][sample photo]{\n//}\n")
|
|
554
|
+
expected = <<-EOS
|
|
555
|
+
<div id="sampleimg" class="image">
|
|
556
|
+
<p class="caption">
|
|
557
|
+
図1.1: sample photo
|
|
558
|
+
</p>
|
|
559
|
+
<img src="images/chap1-sampleimg.png" alt="sample photo" />
|
|
560
|
+
</div>
|
|
549
561
|
EOS
|
|
550
562
|
assert_equal expected, actual
|
|
551
563
|
end
|
|
@@ -622,6 +634,18 @@ EOS
|
|
|
622
634
|
図: sample photo
|
|
623
635
|
</p>
|
|
624
636
|
</div>
|
|
637
|
+
EOS
|
|
638
|
+
assert_equal expected, actual
|
|
639
|
+
|
|
640
|
+
@config['caption_position']['image'] = 'top'
|
|
641
|
+
actual = compile_block("//indepimage[sampleimg][sample photo]\n")
|
|
642
|
+
expected = <<-EOS
|
|
643
|
+
<div id="sampleimg" class="image">
|
|
644
|
+
<p class="caption">
|
|
645
|
+
図: sample photo
|
|
646
|
+
</p>
|
|
647
|
+
<img src="images/chap1-sampleimg.png" alt="sample photo" />
|
|
648
|
+
</div>
|
|
625
649
|
EOS
|
|
626
650
|
assert_equal expected, actual
|
|
627
651
|
end
|
|
@@ -806,6 +830,20 @@ test1.5
|
|
|
806
830
|
test<i>2</i>
|
|
807
831
|
</pre>
|
|
808
832
|
</div>
|
|
833
|
+
EOS
|
|
834
|
+
assert_equal expected, actual
|
|
835
|
+
|
|
836
|
+
@config['caption_position']['list'] = 'bottom'
|
|
837
|
+
actual = compile_block("//list[samplelist][this is @<b>{test}<&>_]{\ntest1\ntest1.5\n\ntest@<i>{2}\n//}\n")
|
|
838
|
+
expected = <<-EOS
|
|
839
|
+
<div id="samplelist" class="caption-code">
|
|
840
|
+
<pre class="list">test1
|
|
841
|
+
test1.5
|
|
842
|
+
|
|
843
|
+
test<i>2</i>
|
|
844
|
+
</pre>
|
|
845
|
+
<p class="caption">リスト1.1: this is <b>test</b><&>_</p>
|
|
846
|
+
</div>
|
|
809
847
|
EOS
|
|
810
848
|
assert_equal expected, actual
|
|
811
849
|
end
|
|
@@ -1023,6 +1061,29 @@ EOS
|
|
|
1023
1061
|
4: end
|
|
1024
1062
|
</pre>
|
|
1025
1063
|
</div>
|
|
1064
|
+
EOS
|
|
1065
|
+
|
|
1066
|
+
assert_equal expected, actual
|
|
1067
|
+
|
|
1068
|
+
@config['caption_position']['list'] = 'bottom'
|
|
1069
|
+
actual = compile_block(<<-EOS)
|
|
1070
|
+
//listnum[samplelist][this is @<b>{test}<&>_][ruby]{
|
|
1071
|
+
def foo(a1, a2=:test)
|
|
1072
|
+
(1..3).times{|i| a.include?(:foo)}
|
|
1073
|
+
return true
|
|
1074
|
+
end
|
|
1075
|
+
//}
|
|
1076
|
+
EOS
|
|
1077
|
+
|
|
1078
|
+
expected = <<-EOS
|
|
1079
|
+
<div id="samplelist" class="code">
|
|
1080
|
+
<pre class="list language-ruby"> 1: def foo(a1, a2=:test)
|
|
1081
|
+
2: (1..3).times{|i| a.include?(:foo)}
|
|
1082
|
+
3: return true
|
|
1083
|
+
4: end
|
|
1084
|
+
</pre>
|
|
1085
|
+
<p class="caption">リスト1.1: this is <b>test</b><&>_</p>
|
|
1086
|
+
</div>
|
|
1026
1087
|
EOS
|
|
1027
1088
|
|
|
1028
1089
|
assert_equal expected, actual
|
|
@@ -1220,6 +1281,20 @@ bar
|
|
|
1220
1281
|
buz
|
|
1221
1282
|
</pre>
|
|
1222
1283
|
</div>
|
|
1284
|
+
EOS
|
|
1285
|
+
assert_equal expected, actual
|
|
1286
|
+
|
|
1287
|
+
@config['caption_position']['list'] = 'bottom'
|
|
1288
|
+
actual = compile_block("//source[foo/bar/test.rb]{\nfoo\nbar\n\nbuz\n//}\n")
|
|
1289
|
+
expected = <<-EOS
|
|
1290
|
+
<div class="source-code">
|
|
1291
|
+
<pre class="source">foo
|
|
1292
|
+
bar
|
|
1293
|
+
|
|
1294
|
+
buz
|
|
1295
|
+
</pre>
|
|
1296
|
+
<p class="caption">foo/bar/test.rb</p>
|
|
1297
|
+
</div>
|
|
1223
1298
|
EOS
|
|
1224
1299
|
assert_equal expected, actual
|
|
1225
1300
|
end
|
|
@@ -1257,6 +1332,18 @@ EOS
|
|
|
1257
1332
|
bar
|
|
1258
1333
|
</pre>
|
|
1259
1334
|
</div>
|
|
1335
|
+
EOS
|
|
1336
|
+
assert_equal expected, actual
|
|
1337
|
+
|
|
1338
|
+
@config['caption_position']['list'] = 'bottom'
|
|
1339
|
+
actual = compile_block("//box[FOO]{\nfoo\nbar\n//}\n")
|
|
1340
|
+
expected = <<-EOS
|
|
1341
|
+
<div class="syntax">
|
|
1342
|
+
<pre class="syntax">foo
|
|
1343
|
+
bar
|
|
1344
|
+
</pre>
|
|
1345
|
+
<p class="caption">FOO</p>
|
|
1346
|
+
</div>
|
|
1260
1347
|
EOS
|
|
1261
1348
|
assert_equal expected, actual
|
|
1262
1349
|
end
|
|
@@ -1301,6 +1388,18 @@ EOS
|
|
|
1301
1388
|
lineB
|
|
1302
1389
|
</pre>
|
|
1303
1390
|
</div>
|
|
1391
|
+
EOS
|
|
1392
|
+
assert_equal expected, actual
|
|
1393
|
+
|
|
1394
|
+
@config['caption_position']['list'] = 'bottom'
|
|
1395
|
+
actual = compile_block("//emlist[cap1]{\nlineA\nlineB\n//}\n")
|
|
1396
|
+
expected = <<-EOS
|
|
1397
|
+
<div class="emlist-code">
|
|
1398
|
+
<pre class="emlist">lineA
|
|
1399
|
+
lineB
|
|
1400
|
+
</pre>
|
|
1401
|
+
<p class="caption">cap1</p>
|
|
1402
|
+
</div>
|
|
1304
1403
|
EOS
|
|
1305
1404
|
assert_equal expected, actual
|
|
1306
1405
|
end
|
|
@@ -1341,6 +1440,18 @@ EOS
|
|
|
1341
1440
|
2: lineB
|
|
1342
1441
|
</pre>
|
|
1343
1442
|
</div>
|
|
1443
|
+
EOS
|
|
1444
|
+
assert_equal expected, actual
|
|
1445
|
+
|
|
1446
|
+
@config['caption_position']['list'] = 'bottom'
|
|
1447
|
+
actual = compile_block("//emlistnum[cap][text]{\nlineA\nlineB\n//}\n")
|
|
1448
|
+
expected = <<-EOS
|
|
1449
|
+
<div class="emlistnum-code">
|
|
1450
|
+
<pre class="emlist language-text"> 1: lineA
|
|
1451
|
+
2: lineB
|
|
1452
|
+
</pre>
|
|
1453
|
+
<p class="caption">cap</p>
|
|
1454
|
+
</div>
|
|
1344
1455
|
EOS
|
|
1345
1456
|
assert_equal expected, actual
|
|
1346
1457
|
end
|
|
@@ -1413,6 +1524,18 @@ EOS
|
|
|
1413
1524
|
lineB
|
|
1414
1525
|
</pre>
|
|
1415
1526
|
</div>
|
|
1527
|
+
EOS
|
|
1528
|
+
assert_equal expected, actual
|
|
1529
|
+
|
|
1530
|
+
@config['caption_position']['list'] = 'bottom'
|
|
1531
|
+
actual = compile_block("//cmd[cap1]{\nlineA\nlineB\n//}\n")
|
|
1532
|
+
expected = <<-EOS
|
|
1533
|
+
<div class="cmd-code">
|
|
1534
|
+
<pre class="cmd">lineA
|
|
1535
|
+
lineB
|
|
1536
|
+
</pre>
|
|
1537
|
+
<p class="caption">cap1</p>
|
|
1538
|
+
</div>
|
|
1416
1539
|
EOS
|
|
1417
1540
|
assert_equal expected, actual
|
|
1418
1541
|
end
|
|
@@ -2074,6 +2197,19 @@ EOS
|
|
|
2074
2197
|
<tr><td>ccc</td><td>ddd<>&</td></tr>
|
|
2075
2198
|
</table>
|
|
2076
2199
|
</div>
|
|
2200
|
+
EOS
|
|
2201
|
+
assert_equal expected, actual
|
|
2202
|
+
|
|
2203
|
+
@config['caption_position']['table'] = 'bottom'
|
|
2204
|
+
actual = compile_block("//table[foo][FOO]{\naaa\tbbb\n------------\nccc\tddd<>&\n//}\n")
|
|
2205
|
+
expected = <<-EOS
|
|
2206
|
+
<div id="foo" class="table">
|
|
2207
|
+
<table>
|
|
2208
|
+
<tr><th>aaa</th><th>bbb</th></tr>
|
|
2209
|
+
<tr><td>ccc</td><td>ddd<>&</td></tr>
|
|
2210
|
+
</table>
|
|
2211
|
+
<p class="caption">表1.1: FOO</p>
|
|
2212
|
+
</div>
|
|
2077
2213
|
EOS
|
|
2078
2214
|
assert_equal expected, actual
|
|
2079
2215
|
end
|
|
@@ -2110,6 +2246,25 @@ EOS
|
|
|
2110
2246
|
<tr><td>ccc</td><td>ddd<>&</td></tr>
|
|
2111
2247
|
</table>
|
|
2112
2248
|
</div>
|
|
2249
|
+
EOS
|
|
2250
|
+
assert_equal expected, actual
|
|
2251
|
+
|
|
2252
|
+
@config['caption_position']['table'] = 'bottom'
|
|
2253
|
+
actual = compile_block("//emtable[foo]{\naaa\tbbb\n------------\nccc\tddd<>&\n//}\n//emtable{\naaa\tbbb\n------------\nccc\tddd<>&\n//}\n")
|
|
2254
|
+
expected = <<-EOS
|
|
2255
|
+
<div class="table">
|
|
2256
|
+
<table>
|
|
2257
|
+
<tr><th>aaa</th><th>bbb</th></tr>
|
|
2258
|
+
<tr><td>ccc</td><td>ddd<>&</td></tr>
|
|
2259
|
+
</table>
|
|
2260
|
+
<p class="caption">foo</p>
|
|
2261
|
+
</div>
|
|
2262
|
+
<div class="table">
|
|
2263
|
+
<table>
|
|
2264
|
+
<tr><th>aaa</th><th>bbb</th></tr>
|
|
2265
|
+
<tr><td>ccc</td><td>ddd<>&</td></tr>
|
|
2266
|
+
</table>
|
|
2267
|
+
</div>
|
|
2113
2268
|
EOS
|
|
2114
2269
|
assert_equal expected, actual
|
|
2115
2270
|
end
|
|
@@ -2127,6 +2282,16 @@ EOS
|
|
|
2127
2282
|
<p class="caption">表1.1: test for imgtable</p>
|
|
2128
2283
|
<img src="images/chap1-sampleimg.png" alt="test for imgtable" />
|
|
2129
2284
|
</div>
|
|
2285
|
+
EOS
|
|
2286
|
+
assert_equal expected, actual
|
|
2287
|
+
|
|
2288
|
+
@config['caption_position']['table'] = 'bottom'
|
|
2289
|
+
actual = compile_block("//imgtable[sampleimg][test for imgtable]{\n//}\n")
|
|
2290
|
+
expected = <<-EOS
|
|
2291
|
+
<div id="sampleimg" class="imgtable image">
|
|
2292
|
+
<img src="images/chap1-sampleimg.png" alt="test for imgtable" />
|
|
2293
|
+
<p class="caption">表1.1: test for imgtable</p>
|
|
2294
|
+
</div>
|
|
2130
2295
|
EOS
|
|
2131
2296
|
assert_equal expected, actual
|
|
2132
2297
|
end
|
|
@@ -2383,6 +2548,20 @@ EOS
|
|
|
2383
2548
|
</pre>
|
|
2384
2549
|
</div>
|
|
2385
2550
|
</div>
|
|
2551
|
+
EOS
|
|
2552
|
+
actual = compile_block(src)
|
|
2553
|
+
assert_equal expected, actual
|
|
2554
|
+
|
|
2555
|
+
@config['caption_position']['equation'] = 'bottom'
|
|
2556
|
+
expected = <<-EOS
|
|
2557
|
+
<p><span class="eqref">式1.1</span></p>
|
|
2558
|
+
<div id="emc2" class="caption-equation">
|
|
2559
|
+
<div class="equation">
|
|
2560
|
+
<pre>e=mc^2
|
|
2561
|
+
</pre>
|
|
2562
|
+
</div>
|
|
2563
|
+
<p class="caption">式1.1: The Equivalence of Mass <i>and</i> Energy</p>
|
|
2564
|
+
</div>
|
|
2386
2565
|
EOS
|
|
2387
2566
|
actual = compile_block(src)
|
|
2388
2567
|
assert_equal expected, actual
|