review 3.0.0 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby-win.yml +39 -0
- data/.github/workflows/ruby.yml +27 -0
- data/.rubocop.yml +50 -12
- data/.travis.yml +17 -8
- data/Dockerfile +21 -5
- data/NEWS.ja.md +358 -0
- data/NEWS.md +358 -1
- data/README.md +11 -8
- data/appveyor.yml +1 -3
- data/bin/review-catalog-converter +4 -4
- data/bin/review-check +8 -8
- data/bin/review-checkdep +1 -1
- data/bin/review-compile +12 -12
- data/bin/review-epubmaker +3 -35
- data/bin/review-idgxmlmaker +16 -0
- data/bin/review-index +2 -89
- data/bin/review-preproc +14 -19
- data/bin/review-validate +3 -3
- data/bin/review-vol +4 -78
- data/doc/LICENSE +1 -1
- data/doc/config.yml.sample +46 -12
- data/doc/config.yml.sample-simple +4 -2
- data/doc/format.ja.md +37 -13
- data/doc/format.md +35 -20
- data/doc/pdfmaker.ja.md +43 -1
- data/doc/pdfmaker.md +42 -1
- data/doc/quickstart.ja.md +46 -26
- data/doc/quickstart.md +38 -17
- data/lib/epubmaker/epubcommon.rb +10 -5
- data/lib/epubmaker/epubv2.rb +1 -1
- data/lib/epubmaker/epubv3.rb +1 -0
- data/lib/epubmaker/producer.rb +4 -2
- data/lib/review/book.rb +1 -1
- data/lib/review/book/base.rb +38 -79
- data/lib/review/book/chapter.rb +18 -3
- data/lib/review/book/compilable.rb +6 -5
- data/lib/review/book/index.rb +69 -101
- data/lib/review/book/index/item.rb +40 -0
- data/lib/review/book/page_metric.rb +7 -7
- data/lib/review/book/part.rb +28 -5
- data/lib/review/book/volume.rb +3 -4
- data/lib/review/builder.rb +105 -44
- data/lib/review/catalog.rb +13 -16
- data/lib/review/compiler.rb +84 -72
- data/lib/review/configure.rb +19 -8
- data/lib/review/epub2html.rb +37 -4
- data/lib/review/epubmaker.rb +62 -7
- data/lib/review/extentions/string.rb +0 -4
- data/lib/review/htmlbuilder.rb +102 -115
- data/lib/review/htmlutils.rb +2 -3
- data/lib/review/i18n.rb +2 -2
- data/lib/review/i18n.yml +9 -0
- data/lib/review/idgxmlbuilder.rb +153 -74
- data/lib/review/idgxmlmaker.rb +191 -0
- data/lib/review/init-web/finish.html +10 -0
- data/lib/review/init-web/index.html +190 -0
- data/lib/review/init-web/review-layout-design.js +691 -0
- data/lib/review/init.rb +125 -34
- data/lib/review/latexbuilder.rb +199 -88
- data/lib/review/lineinput.rb +1 -1
- data/lib/review/location.rb +32 -0
- data/lib/review/logger.rb +4 -8
- data/lib/review/makerhelper.rb +24 -5
- data/lib/review/markdownbuilder.rb +31 -37
- data/lib/review/md2inaobuilder.rb +3 -5
- data/lib/review/pdfmaker.rb +44 -22
- data/lib/review/plaintextbuilder.rb +106 -85
- data/lib/review/preprocessor.rb +32 -41
- data/lib/review/rstbuilder.rb +33 -33
- data/lib/review/textmaker.rb +19 -3
- data/lib/review/textutils.rb +76 -2
- data/lib/review/tocprinter.rb +231 -102
- data/lib/review/topbuilder.rb +114 -61
- data/lib/review/update.rb +19 -19
- data/lib/review/version.rb +1 -1
- data/lib/review/volumeprinter.rb +99 -0
- data/lib/review/webmaker.rb +11 -4
- data/lib/review/webtocprinter.rb +38 -35
- data/lib/review/yamlloader.rb +26 -16
- data/review.gemspec +6 -4
- data/samples/sample-book/README.md +7 -2
- data/samples/sample-book/src/.gitignore +154 -0
- data/samples/sample-book/src/config-ebook.yml +4 -0
- data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
- data/samples/sample-book/src/config-jlreq.yml +6 -0
- data/samples/sample-book/src/config.yml +2 -2
- data/samples/sample-book/src/lib/tasks/review.rake +29 -14
- data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
- data/samples/syntax-book/ch01.re +4 -2
- data/samples/syntax-book/ch02.re +8 -16
- data/samples/syntax-book/ch03.re +3 -6
- data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
- data/samples/syntax-book/config-jlreq.yml +5 -0
- data/samples/syntax-book/config-print.yml +3 -0
- data/samples/syntax-book/config.yml +1 -1
- data/samples/syntax-book/lib/tasks/review.rake +30 -15
- data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
- data/templates/latex/config.erb +16 -0
- data/templates/latex/layout.tex.erb +4 -0
- data/templates/latex/review-jlreq/review-base.sty +150 -61
- data/templates/latex/review-jlreq/review-jlreq.cls +74 -8
- data/templates/latex/review-jlreq/review-style.sty +4 -1
- data/templates/latex/review-jsbook/README.md +39 -0
- data/templates/latex/review-jsbook/review-base.sty +101 -23
- data/templates/latex/review-jsbook/review-jsbook.cls +28 -5
- data/templates/latex/review-jsbook/review-style.sty +5 -2
- data/templates/opf/epubv3.opf.erb +1 -0
- data/templates/web/html/layout-html5.html.erb +2 -2
- data/test/assets/test_template.tex +24 -3
- data/test/assets/test_template_backmatter.tex +24 -3
- data/test/test_book.rb +75 -21
- data/test/test_book_chapter.rb +4 -2
- data/test/test_book_part.rb +3 -3
- data/test/test_builder.rb +16 -0
- data/test/test_catalog.rb +24 -42
- data/test/test_catalog_converter_cmd.rb +1 -1
- data/test/test_epubmaker_cmd.rb +14 -7
- data/test/test_helper.rb +15 -7
- data/test/test_htmlbuilder.rb +909 -159
- data/test/test_i18n.rb +25 -25
- data/test/test_idgxmlbuilder.rb +395 -38
- data/test/test_idgxmlmaker_cmd.rb +46 -0
- data/test/test_image_finder.rb +52 -70
- data/test/test_index.rb +50 -10
- data/test/test_latexbuilder.rb +1194 -106
- data/test/test_latexbuilder_v2.rb +628 -97
- data/test/test_logger.rb +14 -1
- data/test/test_makerhelper.rb +3 -3
- data/test/test_markdownbuilder.rb +134 -16
- data/test/test_md2inaobuilder.rb +32 -9
- data/test/test_pdfmaker.rb +18 -1
- data/test/test_pdfmaker_cmd.rb +100 -6
- data/test/test_plaintextbuilder.rb +371 -25
- data/test/test_preprocessor.rb +2 -16
- data/test/test_rstbuilder.rb +249 -26
- data/test/test_textmaker_cmd.rb +54 -0
- data/test/test_textutils.rb +109 -2
- data/test/test_topbuilder.rb +546 -31
- data/test/test_update.rb +17 -8
- data/test/test_webtocprinter.rb +66 -34
- data/test/test_yamlloader.rb +13 -0
- data/vendor/jsclasses/LICENSE +1 -1
- data/vendor/jsclasses/jis/jsarticle.cls +53 -14
- data/vendor/jsclasses/jis/jsbook.cls +53 -14
- data/vendor/jsclasses/jis/jsclasses.dtx +84 -25
- data/vendor/jsclasses/jis/jslogo.dtx +4 -4
- data/vendor/jsclasses/jis/jslogo.sty +3 -3
- data/vendor/jsclasses/jis/jspf.cls +52 -13
- data/vendor/jsclasses/jis/jsreport.cls +53 -14
- data/vendor/jsclasses/jis/kiyou.cls +53 -14
- data/vendor/jsclasses/jis/okumacro.dtx +4 -5
- data/vendor/jsclasses/jis/okumacro.sty +3 -4
- data/vendor/jsclasses/jsarticle.cls +53 -14
- data/vendor/jsclasses/jsbook.cls +53 -14
- data/vendor/jsclasses/jsclasses.dtx +84 -25
- data/vendor/jsclasses/jsclasses.pdf +0 -0
- data/vendor/jsclasses/jslogo.dtx +4 -4
- data/vendor/jsclasses/jslogo.pdf +0 -0
- data/vendor/jsclasses/jslogo.sty +3 -3
- data/vendor/jsclasses/jspf.cls +52 -13
- data/vendor/jsclasses/jsreport.cls +53 -14
- data/vendor/jsclasses/kiyou.cls +53 -14
- data/vendor/jsclasses/okumacro.dtx +4 -5
- data/vendor/jsclasses/okumacro.pdf +0 -0
- data/vendor/jsclasses/okumacro.sty +3 -4
- metadata +55 -10
- data/lib/review/tocparser.rb +0 -271
- data/samples/syntax-book/review-ext.rb +0 -14
- data/test/test_tocparser.rb +0 -25
@@ -1,5 +1,5 @@
|
|
1
1
|
\NeedsTeXFormat{LaTeX2e}
|
2
|
-
\ProvidesPackage{review-style}[
|
2
|
+
\ProvidesPackage{review-style}[2019/09/16]
|
3
3
|
|
4
4
|
\RequirePackage{fancyhdr}
|
5
5
|
\pagestyle{fancy}
|
@@ -43,4 +43,7 @@
|
|
43
43
|
\hypersetup{hidelinks}
|
44
44
|
|
45
45
|
\floatplacement{figure}{H}
|
46
|
-
\floatplacement{table}{
|
46
|
+
\floatplacement{table}{H}
|
47
|
+
|
48
|
+
% space between English/Japanese characters in list environments (\z@ means 0, no space. You can comment out below line for backward compatibility.)
|
49
|
+
\def\reviewlistxkanjiskip{\z@}
|
@@ -2,6 +2,7 @@
|
|
2
2
|
<package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="<%= @producer.config['language'] %>"<%= @package_attrs %>>
|
3
3
|
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
|
4
4
|
<%= @opf_metainfo %>
|
5
|
+
<%= @opf_coverimage %>
|
5
6
|
</metadata>
|
6
7
|
<%= @opf_manifest %>
|
7
8
|
<%= @opf_toc %>
|
@@ -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>
|
@@ -1,13 +1,14 @@
|
|
1
1
|
\documentclass[dvipdfmx]{review-jsbook}
|
2
2
|
\makeatletter
|
3
|
-
\def\review@reviewversion{3.
|
3
|
+
\def\review@reviewversion{3.2.0}
|
4
4
|
\def\review@texcompiler{uplatex}
|
5
5
|
\def\review@documentclass{review-jsbook}
|
6
6
|
|
7
7
|
\def\review@booktitlename{Re:VIEW Sample Book}
|
8
8
|
|
9
|
+
\def\review@autnames{anonymous}
|
9
10
|
|
10
|
-
\def\review@titlepageauthors{}
|
11
|
+
\def\review@titlepageauthors{anonymous 著}
|
11
12
|
\def\review@date{2011{-}01{-}01}
|
12
13
|
|
13
14
|
\def\review@bookname{sample}
|
@@ -34,18 +35,37 @@
|
|
34
35
|
\def\review@tablename{表}
|
35
36
|
\def\review@appendixname{付録}
|
36
37
|
|
38
|
+
\def\review@usecovernombre{true}
|
37
39
|
\def\review@titlepage{true}
|
38
40
|
|
39
41
|
\def\review@pubhistories{2011年1月1日 発行}
|
40
|
-
\def\review@colophonnames{
|
42
|
+
\def\review@colophonnames{著 者 & anonymous \\
|
43
|
+
}
|
41
44
|
|
42
45
|
\def\reviewprefacefiles{}
|
43
46
|
\def\reviewchapterfiles{}
|
44
47
|
\def\reviewappendixfiles{}
|
45
48
|
\def\reviewpostdeffiles{}
|
46
49
|
|
50
|
+
\def\reviewbackcompatibilityhook{
|
51
|
+
\ifdefined\reviewimagecaption\else% for 3.0.0 compatibility
|
52
|
+
\newcommand{\reviewimagecaption}[1]{\caption{##1}}
|
53
|
+
\fi
|
54
|
+
\ifdefined\reviewincludegraphics\else% for 3.2.0 compatibility
|
55
|
+
\DeclareRobustCommand{\reviewincludegraphics}[2][]{%
|
56
|
+
\includegraphics[##1]{##2}}
|
57
|
+
\fi
|
58
|
+
\ifdefined\covermatter\else% for 4.0.0 compatibility
|
59
|
+
\def\covermatter{}
|
60
|
+
\fi
|
61
|
+
}
|
62
|
+
|
47
63
|
\makeatother
|
48
64
|
|
65
|
+
\usepackage{reviewmacro}
|
66
|
+
|
67
|
+
%% backward compatibility (defined in config.erb)
|
68
|
+
\reviewbackcompatibilityhook
|
49
69
|
|
50
70
|
\begin{document}
|
51
71
|
|
@@ -56,6 +76,7 @@
|
|
56
76
|
|
57
77
|
%% coverpage
|
58
78
|
\ifdefined\reviewcoverpagecont
|
79
|
+
\covermatter
|
59
80
|
\reviewcoverpagecont
|
60
81
|
\fi
|
61
82
|
|
@@ -1,13 +1,14 @@
|
|
1
1
|
\documentclass[dvipdfmx]{review-jsbook}
|
2
2
|
\makeatletter
|
3
|
-
\def\review@reviewversion{3.
|
3
|
+
\def\review@reviewversion{3.2.0}
|
4
4
|
\def\review@texcompiler{uplatex}
|
5
5
|
\def\review@documentclass{review-jsbook}
|
6
6
|
|
7
7
|
\def\review@booktitlename{Re:VIEW Sample Book}
|
8
8
|
|
9
|
+
\def\review@autnames{anonymous}
|
9
10
|
|
10
|
-
\def\review@titlepageauthors{}
|
11
|
+
\def\review@titlepageauthors{anonymous 著}
|
11
12
|
\def\review@date{2011{-}01{-}01}
|
12
13
|
|
13
14
|
\def\review@bookname{sample}
|
@@ -34,6 +35,7 @@
|
|
34
35
|
\def\review@tablename{表}
|
35
36
|
\def\review@appendixname{付録}
|
36
37
|
|
38
|
+
\def\review@usecovernombre{true}
|
37
39
|
\def\review@titlepage{true}
|
38
40
|
\def\reviewprofilepagecont{\thispagestyle{empty}\chapter*{Profile}
|
39
41
|
some profile
|
@@ -48,15 +50,33 @@ some ad content
|
|
48
50
|
\null}
|
49
51
|
|
50
52
|
\def\review@pubhistories{2011年1月1日 発行}
|
51
|
-
\def\review@colophonnames{
|
53
|
+
\def\review@colophonnames{著 者 & anonymous \\
|
54
|
+
}
|
52
55
|
|
53
56
|
\def\reviewprefacefiles{}
|
54
57
|
\def\reviewchapterfiles{}
|
55
58
|
\def\reviewappendixfiles{}
|
56
59
|
\def\reviewpostdeffiles{}
|
57
60
|
|
61
|
+
\def\reviewbackcompatibilityhook{
|
62
|
+
\ifdefined\reviewimagecaption\else% for 3.0.0 compatibility
|
63
|
+
\newcommand{\reviewimagecaption}[1]{\caption{##1}}
|
64
|
+
\fi
|
65
|
+
\ifdefined\reviewincludegraphics\else% for 3.2.0 compatibility
|
66
|
+
\DeclareRobustCommand{\reviewincludegraphics}[2][]{%
|
67
|
+
\includegraphics[##1]{##2}}
|
68
|
+
\fi
|
69
|
+
\ifdefined\covermatter\else% for 4.0.0 compatibility
|
70
|
+
\def\covermatter{}
|
71
|
+
\fi
|
72
|
+
}
|
73
|
+
|
58
74
|
\makeatother
|
59
75
|
|
76
|
+
\usepackage{reviewmacro}
|
77
|
+
|
78
|
+
%% backward compatibility (defined in config.erb)
|
79
|
+
\reviewbackcompatibilityhook
|
60
80
|
|
61
81
|
\begin{document}
|
62
82
|
|
@@ -67,6 +87,7 @@ some ad content
|
|
67
87
|
|
68
88
|
%% coverpage
|
69
89
|
\ifdefined\reviewcoverpagecont
|
90
|
+
\covermatter
|
70
91
|
\reviewcoverpagecont
|
71
92
|
\fi
|
72
93
|
|
data/test/test_book.rb
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
require 'book_test_helper'
|
2
|
+
require 'fileutils'
|
2
3
|
|
3
4
|
class BookTest < Test::Unit::TestCase
|
4
5
|
include BookTestHelper
|
5
6
|
|
7
|
+
def setup
|
8
|
+
if ENV['GITHUB_WORKSPACE']
|
9
|
+
ENV['TMPDIR'] = File.join(ENV['GITHUB_WORKSPACE'], 'tmp_review')
|
10
|
+
FileUtils.mkdir_p(ENV['TMPDIR'])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
6
14
|
def assert_same_path(expected, result, *options)
|
7
15
|
require 'pathname'
|
8
16
|
ex_path = Pathname(expected).realpath
|
@@ -32,7 +40,7 @@ class BookTest < Test::Unit::TestCase
|
|
32
40
|
def test_read_chaps
|
33
41
|
Dir.mktmpdir do |dir|
|
34
42
|
book = Book::Base.new(dir)
|
35
|
-
assert_equal
|
43
|
+
assert_equal [], book.read_chaps
|
36
44
|
|
37
45
|
chaps_path = File.join(dir, 'CHAPS')
|
38
46
|
re1_path = File.join(dir, "123#{book.ext}")
|
@@ -42,16 +50,16 @@ class BookTest < Test::Unit::TestCase
|
|
42
50
|
File.open(re1_path, 'w') { |o| o.print "123\n" }
|
43
51
|
File.open(re2_path, 'w') { |o| o.print "456\n" }
|
44
52
|
|
45
|
-
assert_equal
|
53
|
+
assert_equal ['abc'], book.read_chaps
|
46
54
|
|
47
55
|
File.unlink(chaps_path)
|
48
|
-
assert_equal
|
56
|
+
assert_equal [re1_path, re2_path], book.read_chaps
|
49
57
|
|
50
58
|
File.unlink(re1_path)
|
51
|
-
assert_equal re2_path, book.read_chaps
|
59
|
+
assert_equal [re2_path], book.read_chaps
|
52
60
|
|
53
61
|
File.unlink(re2_path)
|
54
|
-
assert_equal
|
62
|
+
assert_equal [], book.read_chaps
|
55
63
|
end
|
56
64
|
end
|
57
65
|
|
@@ -68,17 +76,18 @@ class BookTest < Test::Unit::TestCase
|
|
68
76
|
File.open(chaps_path, 'w') { |o| o.print chaps_content }
|
69
77
|
|
70
78
|
assert book.part_exist?
|
71
|
-
assert_equal
|
79
|
+
assert_equal %w[abc], book.read_part
|
72
80
|
|
81
|
+
## do not cache PART data
|
73
82
|
File.open(chaps_path, 'w') { |o| o.print "XYZ\n" }
|
74
|
-
assert_equal
|
83
|
+
assert_equal %w[XYZ], book.read_part
|
75
84
|
end
|
76
85
|
end
|
77
86
|
|
78
87
|
def test_read_appendix
|
79
88
|
Dir.mktmpdir do |dir|
|
80
89
|
book = Book::Base.new(dir)
|
81
|
-
assert_equal
|
90
|
+
assert_equal [], book.read_appendix
|
82
91
|
|
83
92
|
post_path = File.join(dir, 'POSTDEF')
|
84
93
|
re1_path = File.join(dir, "123#{book.ext}")
|
@@ -88,23 +97,23 @@ class BookTest < Test::Unit::TestCase
|
|
88
97
|
File.open(re1_path, 'w') { |o| o.print "123\n" }
|
89
98
|
File.open(re2_path, 'w') { |o| o.print "456\n" }
|
90
99
|
|
91
|
-
assert_equal
|
100
|
+
assert_equal ['abc'], book.read_appendix
|
92
101
|
|
93
102
|
File.unlink(post_path)
|
94
|
-
assert_equal
|
103
|
+
assert_equal [re1_path, re2_path], book.read_appendix
|
95
104
|
|
96
105
|
File.unlink(re1_path)
|
97
|
-
assert_equal re2_path, book.read_appendix
|
106
|
+
assert_equal [re2_path], book.read_appendix
|
98
107
|
|
99
108
|
File.unlink(re2_path)
|
100
|
-
assert_equal
|
109
|
+
assert_equal [], book.read_appendix
|
101
110
|
end
|
102
111
|
end
|
103
112
|
|
104
113
|
def test_read_postdef
|
105
114
|
Dir.mktmpdir do |dir|
|
106
115
|
book = Book::Base.new(dir)
|
107
|
-
assert_equal
|
116
|
+
assert_equal [], book.read_postdef
|
108
117
|
|
109
118
|
post_path = File.join(dir, 'POSTDEF')
|
110
119
|
re1_path = File.join(dir, "123#{book.ext}")
|
@@ -114,10 +123,10 @@ class BookTest < Test::Unit::TestCase
|
|
114
123
|
File.open(re1_path, 'w') { |o| o.print "123\n" }
|
115
124
|
File.open(re2_path, 'w') { |o| o.print "456\n" }
|
116
125
|
|
117
|
-
assert_equal
|
126
|
+
assert_equal [], book.read_postdef
|
118
127
|
|
119
128
|
File.unlink(post_path)
|
120
|
-
assert_equal
|
129
|
+
assert_equal [], book.read_postdef
|
121
130
|
end
|
122
131
|
end
|
123
132
|
|
@@ -237,7 +246,7 @@ EOC
|
|
237
246
|
"part1_chapter1.re\n",
|
238
247
|
'',
|
239
248
|
[
|
240
|
-
''
|
249
|
+
'' # XXX: OK?
|
241
250
|
]
|
242
251
|
],
|
243
252
|
[
|
@@ -248,15 +257,15 @@ EOC
|
|
248
257
|
''
|
249
258
|
]
|
250
259
|
]
|
251
|
-
].each do |n_parts,
|
260
|
+
].each do |n_parts, chaps, parts, part_names|
|
252
261
|
n_test += 1
|
253
262
|
Dir.mktmpdir do |dir|
|
254
263
|
book = Book::Base.new(dir)
|
255
264
|
chaps_path = File.join(dir, 'CHAPS')
|
256
|
-
File.open(chaps_path, 'w') { |o| o.print
|
257
|
-
if
|
265
|
+
File.open(chaps_path, 'w') { |o| o.print chaps }
|
266
|
+
if parts
|
258
267
|
parts_path = File.join(dir, 'PART')
|
259
|
-
File.open(parts_path, 'w') { |o| o.print
|
268
|
+
File.open(parts_path, 'w') { |o| o.print parts }
|
260
269
|
end
|
261
270
|
|
262
271
|
parts = book.instance_eval { parse_chapters }
|
@@ -412,6 +421,51 @@ EOC
|
|
412
421
|
end
|
413
422
|
end
|
414
423
|
|
424
|
+
def test_parts_in_file
|
425
|
+
mktmpbookdir do |_dir, book, _files|
|
426
|
+
assert book.parts_in_file.empty?
|
427
|
+
assert !book.part(0)
|
428
|
+
assert !book.part(1)
|
429
|
+
|
430
|
+
tmp = []
|
431
|
+
book.each_part { tmp << true }
|
432
|
+
assert tmp.empty?
|
433
|
+
end
|
434
|
+
|
435
|
+
mktmpbookdir 'CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
|
436
|
+
'PART' => "foo\nbar\n",
|
437
|
+
'ch1.re' => "= ch1\n\n", 'ch2.re' => "= ch2\n\n",
|
438
|
+
'ch3.re' => "= ch3\n\n" do |_dir, book, _files|
|
439
|
+
parts = book.parts_in_file
|
440
|
+
assert_equal 0, parts.size
|
441
|
+
assert !book.part(0)
|
442
|
+
assert_equal 'foo', book.part(1).name
|
443
|
+
assert_equal 'bar', book.part(2).name
|
444
|
+
assert !book.part(3)
|
445
|
+
|
446
|
+
tmp = []
|
447
|
+
book.each_part { |p| tmp << p.number }
|
448
|
+
assert_equal [1, 2], tmp
|
449
|
+
end
|
450
|
+
|
451
|
+
mktmpbookdir 'CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
|
452
|
+
'PART' => "foo.re\nbar.re\n",
|
453
|
+
'foo.re' => "= part1\n\n", 'bar.re' => "= part2\n\n",
|
454
|
+
'ch1.re' => "= ch1\n\n", 'ch2.re' => "= ch2\n\n",
|
455
|
+
'ch3.re' => "= ch3\n\n" do |_dir, book, _files|
|
456
|
+
parts = book.parts_in_file
|
457
|
+
assert_equal 2, parts.size
|
458
|
+
assert !book.part(0)
|
459
|
+
assert_equal 'foo', book.part(1).name
|
460
|
+
assert_equal 'bar', book.part(2).name
|
461
|
+
assert !book.part(3)
|
462
|
+
|
463
|
+
tmp = []
|
464
|
+
book.each_part { |p| tmp << p.number }
|
465
|
+
assert_equal [1, 2], tmp
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
415
469
|
def test_chapters
|
416
470
|
mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3" do |_dir, book, _files|
|
417
471
|
chapters = book.chapters
|
@@ -533,7 +587,7 @@ EOC
|
|
533
587
|
end
|
534
588
|
|
535
589
|
def test_page_metric_config_array
|
536
|
-
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|
|
537
591
|
book = Book::Base.new(dir)
|
538
592
|
config_file = File.join(dir, 'config.yml')
|
539
593
|
book.load_config(config_file)
|
data/test/test_book_chapter.rb
CHANGED
@@ -37,11 +37,13 @@ class ChapterTest < Test::Unit::TestCase
|
|
37
37
|
|
38
38
|
def test_size
|
39
39
|
ch = Book::Chapter.new(nil, nil, nil, __FILE__, :io)
|
40
|
-
|
40
|
+
filesize = IO.read(__FILE__, mode: 'rt:BOM|utf-8').size
|
41
|
+
assert_equal filesize, ch.size
|
41
42
|
|
42
43
|
File.open(__FILE__, 'r') do |i|
|
43
44
|
ch = Book::Chapter.new(nil, nil, nil, nil, i)
|
44
|
-
|
45
|
+
filesize = IO.read(__FILE__, mode: 'rt:BOM|utf-8').size
|
46
|
+
assert_equal filesize, ch.size
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
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_builder.rb
CHANGED
@@ -80,6 +80,22 @@ class BuidlerTest < Test::Unit::TestCase
|
|
80
80
|
assert_equal [:text, text], @b.compile_inline(text)
|
81
81
|
end
|
82
82
|
|
83
|
+
def test_inline_missing_ref
|
84
|
+
b = Builder.new
|
85
|
+
chapter = ReVIEW::Book::Chapter.new(ReVIEW::Book::Base.load, 1, 'chap1', nil, StringIO.new)
|
86
|
+
b.bind(nil, chapter, nil)
|
87
|
+
e = assert_raises(ReVIEW::ApplicationError) { b.inline_list('unknown|list1') }
|
88
|
+
assert_equal ': error: unknown list: unknown|list1', e.message
|
89
|
+
e = assert_raises(ReVIEW::ApplicationError) { b.inline_table('unknown|table1') }
|
90
|
+
assert_equal ': error: unknown table: unknown|table1', e.message
|
91
|
+
e = assert_raises(ReVIEW::ApplicationError) { b.inline_img('unknown|img1') }
|
92
|
+
assert_equal ': error: unknown image: unknown|img1', e.message
|
93
|
+
e = assert_raises(ReVIEW::ApplicationError) { b.inline_column('unknown|column1') }
|
94
|
+
assert_equal ': error: unknown column: unknown|column1', e.message
|
95
|
+
e = assert_raises(ReVIEW::ApplicationError) { b.inline_fn('unknown|footnote1') }
|
96
|
+
assert_equal ': error: unknown footnote: unknown|footnote1', e.message
|
97
|
+
end
|
98
|
+
|
83
99
|
class XBuilder < Builder
|
84
100
|
def list_header(id, caption)
|
85
101
|
end
|
data/test/test_catalog.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'book_test_helper'
|
2
3
|
require 'review/catalog'
|
3
4
|
|
4
5
|
class CatalogTest < Test::Unit::TestCase
|
@@ -7,61 +8,48 @@ class CatalogTest < Test::Unit::TestCase
|
|
7
8
|
|
8
9
|
def test_predef
|
9
10
|
sut = Catalog.new(yaml)
|
10
|
-
exp =
|
11
|
-
|
12
|
-
pre02.re
|
13
|
-
EOS
|
14
|
-
assert_equal(exp.chomp, sut.predef)
|
11
|
+
exp = %w[pre01.re pre02.re]
|
12
|
+
assert_equal(exp, sut.predef)
|
15
13
|
end
|
16
14
|
|
17
15
|
def test_chaps
|
18
16
|
sut = Catalog.new(yaml)
|
19
|
-
exp =
|
20
|
-
|
21
|
-
ch02.re
|
22
|
-
EOS
|
23
|
-
assert_equal(exp.chomp, sut.chaps)
|
17
|
+
exp = %w[ch01.re ch02.re]
|
18
|
+
assert_equal(exp, sut.chaps)
|
24
19
|
end
|
25
20
|
|
26
21
|
def test_chaps_empty
|
27
22
|
yaml = StringIO.new
|
28
23
|
sut = Catalog.new(yaml)
|
29
|
-
assert_equal(
|
24
|
+
assert_equal([], sut.chaps)
|
30
25
|
end
|
31
26
|
|
32
27
|
def test_appendix
|
33
28
|
sut = Catalog.new(yaml)
|
34
|
-
exp =
|
35
|
-
|
36
|
-
post02.re
|
37
|
-
EOS
|
38
|
-
assert_equal(exp.chomp, sut.appendix)
|
29
|
+
exp = %w[post01.re post02.re]
|
30
|
+
assert_equal(exp, sut.appendix)
|
39
31
|
end
|
40
32
|
|
41
33
|
def test_chaps_with_parts
|
42
34
|
sut = Catalog.new(yaml_with_parts)
|
43
|
-
exp =
|
44
|
-
|
45
|
-
ch02.re
|
46
|
-
ch03.re
|
47
|
-
ch04.re
|
48
|
-
ch05.re
|
49
|
-
EOS
|
50
|
-
assert_equal(exp.chomp, sut.chaps)
|
35
|
+
exp = %w[ch01.re ch02.re ch03.re ch04.re ch05.re]
|
36
|
+
assert_equal(exp, sut.chaps)
|
51
37
|
end
|
52
38
|
|
53
39
|
def test_parts
|
54
40
|
sut = Catalog.new(yaml_with_parts)
|
55
|
-
exp =
|
56
|
-
|
57
|
-
part2.re
|
58
|
-
EOS
|
59
|
-
assert_equal(exp.chomp, sut.parts)
|
41
|
+
exp = %w[part1.re part2.re]
|
42
|
+
assert_equal(exp, sut.parts)
|
60
43
|
end
|
61
44
|
|
62
45
|
def test_parts_with_empty
|
63
46
|
sut = Catalog.new(yaml)
|
64
|
-
assert_equal(
|
47
|
+
assert_equal([], sut.parts)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_empty_parts
|
51
|
+
sut = Catalog.new(StringIO.new)
|
52
|
+
assert_equal([], sut.parts_with_chaps)
|
65
53
|
end
|
66
54
|
|
67
55
|
def test_parts2
|
@@ -75,20 +63,14 @@ part2.re
|
|
75
63
|
|
76
64
|
def test_postdef
|
77
65
|
sut = Catalog.new(yaml)
|
78
|
-
exp =
|
79
|
-
|
80
|
-
back02.re
|
81
|
-
EOS
|
82
|
-
assert_equal(exp.chomp, sut.postdef)
|
66
|
+
exp = %w[back01.re back02.re]
|
67
|
+
assert_equal(exp, sut.postdef)
|
83
68
|
end
|
84
69
|
|
85
70
|
def test_from_object
|
86
71
|
sut = Catalog.new(yaml_hash)
|
87
|
-
exp =
|
88
|
-
|
89
|
-
ch02.re
|
90
|
-
EOS
|
91
|
-
assert_equal(exp.chomp, sut.chaps)
|
72
|
+
exp = %w[ch01.re ch02.re]
|
73
|
+
assert_equal(exp, sut.chaps)
|
92
74
|
end
|
93
75
|
|
94
76
|
def test_validate
|
@@ -149,7 +131,7 @@ ch02.re
|
|
149
131
|
private
|
150
132
|
|
151
133
|
def yaml
|
152
|
-
StringIO.new
|
134
|
+
StringIO.new(<<-EOS)
|
153
135
|
|
154
136
|
PREDEF:
|
155
137
|
- pre01.re
|
@@ -177,7 +159,7 @@ POSTDEF:
|
|
177
159
|
end
|
178
160
|
|
179
161
|
def yaml_with_parts
|
180
|
-
StringIO.new
|
162
|
+
StringIO.new(<<-EOS)
|
181
163
|
CHAPS:
|
182
164
|
- ch01.re
|
183
165
|
- part1.re:
|