review 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +90 -66
- data/.travis.yml +1 -1
- data/Gemfile +0 -1
- data/NEWS.ja.md +82 -0
- data/NEWS.md +83 -0
- data/README.md +5 -3
- data/Rakefile +8 -8
- data/bin/review +1 -5
- data/bin/review-catalog-converter +22 -27
- data/bin/review-check +36 -43
- data/bin/review-checkdep +10 -15
- data/bin/review-compile +37 -55
- data/bin/review-epubmaker +4 -5
- data/bin/review-index +21 -29
- data/bin/review-init +26 -37
- data/bin/review-pdfmaker +0 -2
- data/bin/review-preproc +25 -45
- data/bin/review-validate +19 -18
- data/bin/review-vol +15 -27
- data/doc/config.yml.sample +5 -2
- data/doc/format.ja.md +20 -1
- data/doc/format.md +21 -5
- data/doc/images/review-generate.png +0 -0
- data/lib/epubmaker.rb +1 -3
- data/lib/epubmaker/content.rb +24 -27
- data/lib/epubmaker/epubcommon.rb +135 -148
- data/lib/epubmaker/epubv2.rb +39 -46
- data/lib/epubmaker/epubv3.rb +93 -103
- data/lib/epubmaker/producer.rb +138 -151
- data/lib/epubmaker/zip_exporter.rb +21 -26
- data/lib/review/book.rb +3 -6
- data/lib/review/book/base.rb +78 -103
- data/lib/review/book/chapter.rb +36 -40
- data/lib/review/book/compilable.rb +28 -31
- data/lib/review/book/image_finder.rb +6 -13
- data/lib/review/book/index.rb +100 -121
- data/lib/review/book/page_metric.rb +2 -7
- data/lib/review/book/part.rb +18 -20
- data/lib/review/book/volume.rb +9 -13
- data/lib/review/builder.rb +81 -116
- data/lib/review/catalog.rb +15 -19
- data/lib/review/compiler.rb +64 -83
- data/lib/review/configure.rb +87 -97
- data/lib/review/converter.rb +2 -7
- data/lib/review/epubbuilder.rb +1 -3
- data/lib/review/epubmaker.rb +213 -205
- data/lib/review/exception.rb +2 -4
- data/lib/review/extentions.rb +0 -1
- data/lib/review/extentions/hash.rb +2 -2
- data/lib/review/extentions/string.rb +5 -30
- data/lib/review/htmlbuilder.rb +320 -375
- data/lib/review/htmltoc.rb +4 -7
- data/lib/review/htmlutils.rb +29 -32
- data/lib/review/i18n.rb +33 -44
- data/lib/review/i18n.yml +3 -3
- data/lib/review/idgxmlbuilder.rb +309 -345
- data/lib/review/latexbuilder.rb +175 -212
- data/lib/review/latexindex.rb +2 -8
- data/lib/review/latexutils.rb +33 -43
- data/lib/review/lineinput.rb +1 -1
- data/lib/review/logger.rb +21 -0
- data/lib/review/makerhelper.rb +1 -4
- data/lib/review/markdownbuilder.rb +44 -53
- data/lib/review/md2inaobuilder.rb +6 -12
- data/lib/review/pdfmaker.rb +143 -173
- data/lib/review/preprocessor.rb +64 -101
- data/lib/review/rstbuilder.rb +126 -158
- data/lib/review/sec_counter.rb +18 -34
- data/lib/review/template.rb +4 -5
- data/lib/review/textbuilder.rb +2 -3
- data/lib/review/textutils.rb +7 -13
- data/lib/review/tocparser.rb +31 -56
- data/lib/review/tocprinter.rb +26 -52
- data/lib/review/topbuilder.rb +219 -247
- data/lib/review/unfold.rb +15 -24
- data/lib/review/version.rb +1 -1
- data/lib/review/webmaker.rb +75 -99
- data/lib/review/webtocprinter.rb +15 -20
- data/lib/review/yamlloader.rb +13 -15
- data/review.gemspec +20 -22
- data/templates/latex/layout.tex.erb +2 -2
- data/templates/opf/epubv2.opf.erb +7 -7
- data/templates/opf/epubv3.opf.erb +7 -7
- data/templates/web/html/layout-html5.html.erb +2 -2
- data/test/assets/black.eps +280 -0
- data/test/assets/fit.png +0 -0
- data/test/assets/large.gif +0 -0
- data/test/assets/large.jpg +0 -0
- data/test/assets/large.png +0 -0
- data/test/assets/large.svg +65 -0
- data/test/assets/test_template.tex +1 -1
- data/test/book_test_helper.rb +2 -2
- data/test/run_test.rb +4 -4
- data/test/sample-book/src/Rakefile +21 -22
- data/test/syntax-book/Gemfile +4 -0
- data/test/syntax-book/Rakefile +72 -0
- data/test/syntax-book/appA.re +22 -0
- data/test/syntax-book/bib.re +6 -0
- data/test/syntax-book/catalog.yml +15 -0
- data/test/syntax-book/ch01.re +136 -0
- data/test/syntax-book/ch02.re +351 -0
- data/test/syntax-book/ch03.re +82 -0
- data/test/syntax-book/config.yml +35 -0
- data/test/syntax-book/images/ball.png +0 -0
- data/test/syntax-book/images/cover.jpg +0 -0
- data/test/syntax-book/images/fractal.png +0 -0
- data/test/syntax-book/images/img3-1.png +0 -0
- data/test/syntax-book/images/inlineicon.jpg +0 -0
- data/test/syntax-book/images/logic.png +0 -0
- data/test/syntax-book/images/logic2.png +0 -0
- data/test/syntax-book/images/puzzle.jpg +0 -0
- data/test/syntax-book/images/table.jpg +0 -0
- data/test/syntax-book/part2.re +6 -0
- data/test/syntax-book/pre01.re +26 -0
- data/test/syntax-book/review-ext.rb +14 -0
- data/test/syntax-book/sty/jumoline.sty +310 -0
- data/test/syntax-book/sty/reviewmacro.sty +39 -0
- data/test/syntax-book/style.css +494 -0
- data/test/syntax-book/syntax.dic +2 -0
- data/test/test_book.rb +106 -111
- data/test/test_book_chapter.rb +21 -22
- data/test/test_book_part.rb +3 -5
- data/test/test_builder.rb +11 -22
- data/test/test_catalog.rb +17 -18
- data/test/test_catalog_converter_cmd.rb +5 -5
- data/test/test_compiler.rb +18 -16
- data/test/test_configure.rb +35 -38
- data/test/test_converter.rb +3 -4
- data/test/test_epub3maker.rb +136 -117
- data/test/test_epubmaker.rb +107 -114
- data/test/test_epubmaker_cmd.rb +2 -4
- data/test/test_extentions_hash.rb +32 -33
- data/test/test_helper.rb +9 -11
- data/test/test_htmlbuilder.rb +454 -420
- data/test/test_htmltoc.rb +8 -12
- data/test/test_htmlutils.rb +0 -2
- data/test/test_i18n.rb +159 -150
- data/test/test_idgxmlbuilder.rb +190 -197
- data/test/test_image_finder.rb +21 -22
- data/test/test_index.rb +24 -29
- data/test/test_latexbuilder.rb +274 -264
- data/test/test_lineinput.rb +7 -10
- data/test/test_location.rb +7 -7
- data/test/test_makerhelper.rb +13 -25
- data/test/test_markdownbuilder.rb +23 -26
- data/test/test_md2inaobuilder.rb +8 -11
- data/test/test_pdfmaker.rb +114 -123
- data/test/test_pdfmaker_cmd.rb +1 -3
- data/test/test_review_ext.rb +3 -5
- data/test/test_rstbuilder.rb +92 -97
- data/test/test_template.rb +3 -7
- data/test/test_textutils.rb +27 -27
- data/test/test_tocparser.rb +2 -2
- data/test/test_topbuilder.rb +98 -103
- data/test/test_webtocprinter.rb +5 -6
- data/test/test_yamlloader.rb +42 -42
- data/test/test_zip_exporter.rb +12 -18
- metadata +86 -9
- data/lib/review/ewbbuilder.rb +0 -382
data/lib/review/sec_counter.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
# Copyright (c) 2008-2017 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
|
4
2
|
# KADO Masanori
|
5
3
|
#
|
@@ -9,7 +7,6 @@
|
|
9
7
|
#
|
10
8
|
|
11
9
|
module ReVIEW
|
12
|
-
|
13
10
|
# Secion Counter class
|
14
11
|
#
|
15
12
|
class SecCounter
|
@@ -24,21 +21,13 @@ module ReVIEW
|
|
24
21
|
|
25
22
|
def inc(level)
|
26
23
|
n = level - 2
|
27
|
-
if n >= 0
|
28
|
-
|
29
|
-
end
|
30
|
-
if @counter.size > n
|
31
|
-
(n+1..@counter.size).each do |i|
|
32
|
-
@counter[i] = 0
|
33
|
-
end
|
34
|
-
end
|
24
|
+
@counter[n] += 1 if n >= 0
|
25
|
+
(n + 1..@counter.size).each { |i| @counter[i] = 0 } if @counter.size > n
|
35
26
|
end
|
36
27
|
|
37
28
|
def anchor(level)
|
38
|
-
str =
|
39
|
-
0.upto(level-2)
|
40
|
-
str << "-#{@counter[i]}"
|
41
|
-
end
|
29
|
+
str = @chapter.format_number(false)
|
30
|
+
0.upto(level - 2) { |i| str << "-#{@counter[i]}" }
|
42
31
|
str
|
43
32
|
end
|
44
33
|
|
@@ -46,27 +35,22 @@ module ReVIEW
|
|
46
35
|
return nil if @chapter.number.blank?
|
47
36
|
|
48
37
|
if level == 1
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
else
|
54
|
-
return "#{@chapter.format_number}#{I18n.t("chapter_postfix")}"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
elsif secnolevel >= level
|
58
|
-
prefix = ''
|
59
|
-
if @chapter.is_a? ReVIEW::Book::Part
|
60
|
-
prefix = I18n.t('part_short', @chapter.number)
|
38
|
+
return nil unless secnolevel >= 1
|
39
|
+
if @chapter.is_a?(ReVIEW::Book::Part)
|
40
|
+
num = @chapter.number
|
41
|
+
"#{I18n.t('part', num)}#{I18n.t('chapter_postfix')}"
|
61
42
|
else
|
62
|
-
|
43
|
+
"#{@chapter.format_number}#{I18n.t('chapter_postfix')}"
|
63
44
|
end
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
45
|
+
elsif secnolevel >= level
|
46
|
+
prefix = if @chapter.is_a?(ReVIEW::Book::Part)
|
47
|
+
I18n.t('part_short', @chapter.number)
|
48
|
+
else
|
49
|
+
@chapter.format_number(false)
|
50
|
+
end
|
51
|
+
0.upto(level - 2) { |i| prefix << ".#{@counter[i]}" }
|
52
|
+
prefix << I18n.t('chapter_postfix')
|
53
|
+
prefix
|
70
54
|
end
|
71
55
|
end
|
72
56
|
end
|
data/lib/review/template.rb
CHANGED
@@ -4,17 +4,16 @@ module ReVIEW
|
|
4
4
|
class Template
|
5
5
|
include ERB::Util
|
6
6
|
|
7
|
-
TEMPLATE_DIR = File.join(File.dirname(__FILE__),
|
7
|
+
TEMPLATE_DIR = File.join(File.dirname(__FILE__), '../../templates')
|
8
8
|
|
9
9
|
def self.load(filename, mode = 1)
|
10
10
|
self.new(filename, mode)
|
11
11
|
end
|
12
12
|
|
13
13
|
def initialize(filename = nil, mode = nil)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
14
|
+
return unless filename
|
15
|
+
content = File.read(filename)
|
16
|
+
@erb = ERB.new(content, nil, mode)
|
18
17
|
end
|
19
18
|
|
20
19
|
def result(bind_data = nil)
|
data/lib/review/textbuilder.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# textbuilder.rb
|
2
2
|
#
|
3
|
-
# Copyright (c) 2010 Kenshi Muto
|
3
|
+
# Copyright (c) 2010-2017 Kenshi Muto
|
4
|
+
# 2010 Kenshi Muto
|
4
5
|
#
|
5
6
|
# This program is free software.
|
6
7
|
# You can distribute or modify this program under the terms of
|
@@ -10,8 +11,6 @@
|
|
10
11
|
require 'review/topbuilder'
|
11
12
|
|
12
13
|
module ReVIEW
|
13
|
-
|
14
14
|
class TEXTBuilder < TOPBuilder
|
15
15
|
end
|
16
|
-
|
17
16
|
end # module ReVIEW
|
data/lib/review/textutils.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id: textutils.rb 2192 2005-11-13 11:55:42Z aamine $
|
2
1
|
require 'nkf'
|
3
2
|
|
4
3
|
module ReVIEW
|
@@ -6,11 +5,11 @@ module ReVIEW
|
|
6
5
|
def detab(str, ts = 8)
|
7
6
|
add = 0
|
8
7
|
len = nil
|
9
|
-
str.gsub(
|
8
|
+
str.gsub("\t") do
|
10
9
|
len = ts - ($`.size + add) % ts
|
11
10
|
add += len - 1
|
12
11
|
' ' * len
|
13
|
-
|
12
|
+
end
|
14
13
|
end
|
15
14
|
|
16
15
|
def split_paragraph(lines)
|
@@ -18,21 +17,16 @@ module ReVIEW
|
|
18
17
|
post = post_paragraph
|
19
18
|
|
20
19
|
blocked_lines = [[]]
|
21
|
-
lines.each
|
22
|
-
if element
|
23
|
-
if blocked_lines.last != []
|
24
|
-
blocked_lines << []
|
25
|
-
end
|
20
|
+
lines.each do |element|
|
21
|
+
if element.empty?
|
22
|
+
blocked_lines << [] if blocked_lines.last != []
|
26
23
|
else
|
27
24
|
blocked_lines.last << element
|
28
25
|
end
|
29
|
-
}
|
30
|
-
|
31
|
-
if !pre.nil? and !post.nil?
|
32
|
-
blocked_lines.map!{|i| [pre] + i + [post] }
|
33
26
|
end
|
34
27
|
|
35
|
-
blocked_lines.map{|
|
28
|
+
blocked_lines.map! { |i| [pre] + i + [post] } if pre && post
|
29
|
+
blocked_lines.map(&:join)
|
36
30
|
end
|
37
31
|
end
|
38
32
|
end
|
data/lib/review/tocparser.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (c)
|
3
|
-
#
|
2
|
+
# Copyright (c) 2008-2017 Minero Aoki, Kenshi Muto
|
3
|
+
# 2002-2007 Minero Aoki
|
4
4
|
#
|
5
5
|
# This program is free software.
|
6
6
|
# You can distribute or modify this program under the terms of
|
@@ -13,9 +13,8 @@ require 'review/book'
|
|
13
13
|
require 'review/textbuilder'
|
14
14
|
|
15
15
|
module ReVIEW
|
16
|
-
|
17
16
|
class TOCParser
|
18
|
-
def
|
17
|
+
def self.parse(chap)
|
19
18
|
f = StringIO.new(chap.content, 'r:BOM|utf-8')
|
20
19
|
stream = Preprocessor::Strip.new(f)
|
21
20
|
new.parse(stream, chap).map do |root|
|
@@ -24,24 +23,24 @@ module ReVIEW
|
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
|
-
def
|
28
|
-
toc =
|
29
|
-
unless toc.size == 1
|
30
|
-
$stderr.puts "warning: chapter #{toc.join} contains more than 1 chapter"
|
31
|
-
end
|
26
|
+
def self.chapter_node(chap)
|
27
|
+
toc = self.parse(chap)
|
28
|
+
$stderr.puts "warning: chapter #{toc.join} contains more than 1 chapter" unless toc.size == 1
|
32
29
|
toc.first
|
33
30
|
end
|
34
31
|
|
35
32
|
def parse(f, chap)
|
36
|
-
roots = []
|
33
|
+
roots = [] # list of chapters
|
37
34
|
node_stack = []
|
38
35
|
filename = chap.path
|
39
36
|
while line = f.gets
|
40
37
|
case line
|
41
38
|
when /\A\#@/
|
42
39
|
# do nothing
|
40
|
+
next
|
43
41
|
when /\A\s*\z/
|
44
42
|
# do nothing
|
43
|
+
next
|
45
44
|
when /\A(={2,})[\[\s\{]/
|
46
45
|
lev = $1.size
|
47
46
|
error! filename, f.lineno, "section level too deep: #{lev}" if lev > 5
|
@@ -52,11 +51,9 @@ module ReVIEW
|
|
52
51
|
node_stack.push dummy_chapter
|
53
52
|
roots.push dummy_chapter
|
54
53
|
end
|
55
|
-
next if label =~
|
56
|
-
sec = Section.new(lev, label.gsub(/\A\{.*?\}\s?/,
|
57
|
-
until node_stack.last.level < sec.level
|
58
|
-
node_stack.pop
|
59
|
-
end
|
54
|
+
next if label =~ %r{\A\[/} # ex) "[/column]"
|
55
|
+
sec = Section.new(lev, label.gsub(/\A\{.*?\}\s?/, ''))
|
56
|
+
node_stack.pop until node_stack.last.level < sec.level
|
60
57
|
node_stack.last.add_child sec
|
61
58
|
node_stack.push sec
|
62
59
|
|
@@ -67,25 +64,24 @@ module ReVIEW
|
|
67
64
|
node_stack.push new_chapter
|
68
65
|
roots.push new_chapter
|
69
66
|
|
70
|
-
when %r
|
71
|
-
if node_stack.empty?
|
72
|
-
error! filename, f.lineno, 'list found before section label'
|
73
|
-
end
|
67
|
+
when %r{\A//\w+(?:\[.*?\])*\{\s*\z}
|
68
|
+
error! filename, f.lineno, 'list found before section label' if node_stack.empty?
|
74
69
|
node_stack.last.add_child(list = List.new)
|
75
70
|
beg = f.lineno
|
76
71
|
list.add line
|
77
72
|
while line = f.gets
|
78
|
-
break if %r
|
73
|
+
break if %r{\A//\}} =~ line
|
79
74
|
list.add line
|
80
75
|
end
|
81
76
|
error! filename, beg, 'unterminated list' unless line
|
82
77
|
|
83
|
-
when %r
|
78
|
+
when %r{\A//\w}
|
84
79
|
# do nothing
|
80
|
+
next
|
85
81
|
else
|
86
|
-
#if node_stack.empty?
|
87
|
-
#
|
88
|
-
#end
|
82
|
+
# if node_stack.empty?
|
83
|
+
# error! filename, f.lineno, 'text found before section label'
|
84
|
+
# end
|
89
85
|
next if node_stack.empty?
|
90
86
|
node_stack.last.add_child(par = Paragraph.new(chap))
|
91
87
|
par.add line
|
@@ -108,7 +104,7 @@ module ReVIEW
|
|
108
104
|
b = ReVIEW::TEXTBuilder.new
|
109
105
|
dummy_book = ReVIEW::Book::Base.load
|
110
106
|
dummy_chapter = ReVIEW::Book::Chapter.new(dummy_book, 1, '-', nil, StringIO.new)
|
111
|
-
dummy_loc = Location.new(
|
107
|
+
dummy_loc = Location.new('', StringIO.new)
|
112
108
|
b.bind(ReVIEW::Compiler.new(b), dummy_chapter, dummy_loc)
|
113
109
|
b.compile_inline(line)
|
114
110
|
end
|
@@ -117,9 +113,7 @@ module ReVIEW
|
|
117
113
|
raise "#{filename}:#{lineno}: #{msg}"
|
118
114
|
end
|
119
115
|
|
120
|
-
|
121
116
|
class Node
|
122
|
-
|
123
117
|
def initialize(children = [])
|
124
118
|
@children = children
|
125
119
|
end
|
@@ -146,9 +140,7 @@ module ReVIEW
|
|
146
140
|
end
|
147
141
|
|
148
142
|
def each_section(&block)
|
149
|
-
@children.each
|
150
|
-
n.yield_section(&block)
|
151
|
-
end
|
143
|
+
@children.each { |n| n.yield_section(&block) }
|
152
144
|
end
|
153
145
|
|
154
146
|
def each_section_with_index
|
@@ -161,22 +153,17 @@ module ReVIEW
|
|
161
153
|
|
162
154
|
def section_size
|
163
155
|
cnt = 0
|
164
|
-
@children.each
|
165
|
-
n.yield_section { cnt += 1 }
|
166
|
-
end
|
156
|
+
@children.each { |n| n.yield_section { cnt += 1 } }
|
167
157
|
cnt
|
168
158
|
end
|
169
|
-
|
170
159
|
end
|
171
160
|
|
172
|
-
|
173
161
|
class Section < Node
|
174
|
-
|
175
162
|
def initialize(level, label, path = nil)
|
176
163
|
super()
|
177
164
|
@level = level
|
178
165
|
@label = label
|
179
|
-
@filename =
|
166
|
+
@filename = path ? real_filename(path) : nil
|
180
167
|
end
|
181
168
|
|
182
169
|
def real_filename(path)
|
@@ -192,7 +179,7 @@ module ReVIEW
|
|
192
179
|
attr_reader :label
|
193
180
|
|
194
181
|
def estimated_lines
|
195
|
-
@children.inject(0) {|sum, n| sum + n.estimated_lines }
|
182
|
+
@children.inject(0) { |sum, n| sum + n.estimated_lines }
|
196
183
|
end
|
197
184
|
|
198
185
|
def yield_section
|
@@ -200,14 +187,11 @@ module ReVIEW
|
|
200
187
|
end
|
201
188
|
|
202
189
|
def inspect
|
203
|
-
"
|
190
|
+
"#<#{self.class} level=#{@level} #{@label}>"
|
204
191
|
end
|
205
|
-
|
206
192
|
end
|
207
193
|
|
208
|
-
|
209
194
|
class Chapter < Section
|
210
|
-
|
211
195
|
def initialize(label, chap)
|
212
196
|
super 1, label, chap.path
|
213
197
|
@chapter = chap
|
@@ -229,26 +213,23 @@ module ReVIEW
|
|
229
213
|
def volume
|
230
214
|
return @volume if @volume
|
231
215
|
@volume = @chapter.volume
|
232
|
-
@volume.lines = estimated_lines
|
216
|
+
@volume.lines = estimated_lines
|
233
217
|
@volume
|
234
218
|
end
|
235
219
|
|
236
220
|
def inspect
|
237
|
-
"
|
221
|
+
"#<#{self.class} #{@filename}>"
|
238
222
|
end
|
239
|
-
|
240
223
|
end
|
241
224
|
|
242
|
-
|
243
225
|
class Paragraph < Node
|
244
|
-
|
245
226
|
def initialize(chap)
|
246
227
|
@bytes = 0
|
247
228
|
@page_metric = chap.book.page_metric
|
248
229
|
end
|
249
230
|
|
250
231
|
def inspect
|
251
|
-
"
|
232
|
+
"#<#{self.class}>"
|
252
233
|
end
|
253
234
|
|
254
235
|
def add(line)
|
@@ -261,21 +242,18 @@ module ReVIEW
|
|
261
242
|
|
262
243
|
def yield_section
|
263
244
|
end
|
264
|
-
|
265
245
|
end
|
266
246
|
|
267
|
-
|
268
247
|
class List < Node
|
269
|
-
|
270
248
|
def initialize
|
271
249
|
@lines = 0
|
272
250
|
end
|
273
251
|
|
274
252
|
def inspect
|
275
|
-
"
|
253
|
+
"#<#{self.class}>"
|
276
254
|
end
|
277
255
|
|
278
|
-
def add(
|
256
|
+
def add(_line)
|
279
257
|
@lines += 1
|
280
258
|
end
|
281
259
|
|
@@ -285,9 +263,6 @@ module ReVIEW
|
|
285
263
|
|
286
264
|
def yield_section
|
287
265
|
end
|
288
|
-
|
289
266
|
end
|
290
|
-
|
291
267
|
end
|
292
268
|
end
|
293
|
-
|
data/lib/review/tocprinter.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# $Id: tocprinter.rb 4309 2009-07-19 04:15:02Z aamine $
|
4
|
-
#
|
5
|
-
# Copyright (c) 2002-2007 Minero Aoki
|
6
|
-
# 2008-2009 Minero Aoki, Kenshi Muto
|
1
|
+
# Copyright (c) 2008-2017 Minero Aoki, Kenshi Muto
|
2
|
+
# 2002-2007 Minero Aoki
|
7
3
|
#
|
8
4
|
# This program is free software.
|
9
5
|
# You can distribute or modify this program under the terms of
|
@@ -15,10 +11,8 @@ require 'review/htmlutils'
|
|
15
11
|
require 'review/tocparser'
|
16
12
|
|
17
13
|
module ReVIEW
|
18
|
-
|
19
14
|
class TOCPrinter
|
20
|
-
|
21
|
-
def TOCPrinter.default_upper_level
|
15
|
+
def self.default_upper_level
|
22
16
|
99 # no one use 99 level nest
|
23
17
|
end
|
24
18
|
|
@@ -29,15 +23,11 @@ module ReVIEW
|
|
29
23
|
end
|
30
24
|
|
31
25
|
def print_book(book)
|
32
|
-
book.each_part
|
33
|
-
print_part(part)
|
34
|
-
end
|
26
|
+
book.each_part { |part| print_part(part) }
|
35
27
|
end
|
36
28
|
|
37
29
|
def print_part(part)
|
38
|
-
part.each_chapter
|
39
|
-
print_chapter(chap)
|
40
|
-
end
|
30
|
+
part.each_chapter { |chap| print_chapter(chap) }
|
41
31
|
end
|
42
32
|
|
43
33
|
def print_chapter(chap)
|
@@ -51,16 +41,14 @@ module ReVIEW
|
|
51
41
|
end
|
52
42
|
end
|
53
43
|
|
54
|
-
|
55
44
|
class TextTOCPrinter < TOCPrinter
|
56
|
-
|
57
45
|
private
|
58
46
|
|
59
47
|
def print_children(node)
|
60
48
|
return unless print?(node.level + 1)
|
61
49
|
node.each_section_with_index do |section, idx|
|
62
50
|
unless section.blank?
|
63
|
-
print_node idx+1, section
|
51
|
+
print_node idx + 1, section
|
64
52
|
print_children section
|
65
53
|
end
|
66
54
|
end
|
@@ -85,42 +73,35 @@ module ReVIEW
|
|
85
73
|
end
|
86
74
|
|
87
75
|
def volume_columns(level, volstr)
|
88
|
-
cols = [
|
76
|
+
cols = ['', '', '', nil]
|
89
77
|
cols[level - 1] = volstr
|
90
78
|
cols[0, 3] # does not display volume of level-4 section
|
91
79
|
end
|
92
|
-
|
93
80
|
end
|
94
81
|
|
95
|
-
|
96
82
|
class HTMLTOCPrinter < TOCPrinter
|
97
|
-
|
98
83
|
include HTMLUtils
|
99
84
|
|
100
85
|
def print_book(book)
|
101
86
|
@out.puts '<ul class="book-toc">'
|
102
|
-
book.each_part
|
103
|
-
print_part(part)
|
104
|
-
end
|
87
|
+
book.each_part { |part| print_part(part) }
|
105
88
|
@out.puts '</ul>'
|
106
89
|
end
|
107
90
|
|
108
91
|
def print_part(part)
|
109
|
-
if part.number
|
110
|
-
@out.puts li(part.title)
|
111
|
-
end
|
92
|
+
@out.puts li(part.title) if part.number
|
112
93
|
super
|
113
94
|
end
|
114
95
|
|
115
96
|
def print_chapter(chap)
|
116
97
|
chap_node = TOCParser.chapter_node(chap)
|
117
|
-
ext = chap.book.config[
|
118
|
-
path = chap.path.sub(/\.re/,
|
119
|
-
if chap_node.number && chap.
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
98
|
+
ext = chap.book.config['htmlext'] || 'html'
|
99
|
+
path = chap.path.sub(/\.re/, '.' + ext)
|
100
|
+
label = if chap_node.number && chap.on_chaps?
|
101
|
+
"#{chap.number} #{chap.title}"
|
102
|
+
else
|
103
|
+
chap.title
|
104
|
+
end
|
124
105
|
@out.puts li(a_name(path, escape_html(label)))
|
125
106
|
return unless print?(2)
|
126
107
|
if print?(3)
|
@@ -133,14 +114,12 @@ module ReVIEW
|
|
133
114
|
private
|
134
115
|
|
135
116
|
def chap_sections_to_s(chap)
|
136
|
-
return
|
117
|
+
return '' if chap.section_size < 1
|
137
118
|
res = []
|
138
|
-
res <<
|
139
|
-
chap.each_section
|
140
|
-
|
141
|
-
|
142
|
-
res << "</ol>"
|
143
|
-
return res.join("\n")
|
119
|
+
res << '<ol>'
|
120
|
+
chap.each_section { |sec| res << li(escape_html(sec.label)) }
|
121
|
+
res << '</ol>'
|
122
|
+
res.join("\n")
|
144
123
|
end
|
145
124
|
|
146
125
|
def chapter_to_s(chap)
|
@@ -148,15 +127,12 @@ module ReVIEW
|
|
148
127
|
chap.each_section do |sec|
|
149
128
|
res << li(escape_html(sec.label))
|
150
129
|
next unless print?(4)
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
end
|
156
|
-
res << "</ul>"
|
157
|
-
end
|
130
|
+
next unless sec.section_size > 0
|
131
|
+
res << '<ul>'
|
132
|
+
sec.each_section { |node| res << li(escape_html(node.label)) }
|
133
|
+
res << '</ul>'
|
158
134
|
end
|
159
|
-
|
135
|
+
res.join("\n")
|
160
136
|
end
|
161
137
|
|
162
138
|
def li(content)
|
@@ -166,7 +142,5 @@ module ReVIEW
|
|
166
142
|
def a_name(name, label)
|
167
143
|
%Q(<a name="#{name}">#{label}</a>)
|
168
144
|
end
|
169
|
-
|
170
145
|
end
|
171
|
-
|
172
146
|
end
|