review 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -0
- data/.rubocop.yml +293 -6
- data/.rubocop_todo.yml +3 -608
- data/.travis.yml +6 -13
- data/README.md +5 -3
- data/Rakefile +6 -6
- data/bin/review-catalog-converter +2 -2
- data/bin/review-check +1 -1
- data/bin/review-compile +1 -2
- data/bin/review-init +6 -3
- data/bin/review-validate +3 -3
- data/bin/review-vol +2 -1
- data/doc/NEWS.ja.md +138 -25
- data/doc/NEWS.md +137 -25
- data/doc/config.yml.sample +2 -2
- data/doc/config.yml.sample-simple +1 -1
- data/doc/format.ja.md +86 -5
- data/doc/format.md +67 -2
- data/doc/makeindex.ja.md +95 -0
- data/doc/makeindex.md +97 -0
- data/doc/sample.css +214 -0
- data/lib/epubmaker.rb +6 -6
- data/lib/epubmaker/epubcommon.rb +19 -47
- data/lib/epubmaker/epubv2.rb +3 -1
- data/lib/epubmaker/epubv3.rb +4 -26
- data/lib/epubmaker/producer.rb +46 -46
- data/lib/epubmaker/zip_exporter.rb +86 -0
- data/lib/review/book/base.rb +13 -15
- data/lib/review/book/chapter.rb +2 -1
- data/lib/review/book/compilable.rb +9 -9
- data/lib/review/book/image_finder.rb +13 -13
- data/lib/review/book/index.rb +2 -2
- data/lib/review/book/volume.rb +2 -2
- data/lib/review/builder.rb +57 -1
- data/lib/review/catalog.rb +2 -2
- data/lib/review/compiler.rb +15 -7
- data/lib/review/configure.rb +11 -0
- data/lib/review/epubmaker.rb +403 -401
- data/lib/review/ewbbuilder.rb +16 -16
- data/lib/review/htmlbuilder.rb +42 -58
- data/lib/review/htmltoc.rb +1 -1
- data/lib/review/htmlutils.rb +50 -4
- data/lib/review/i18n.rb +2 -2
- data/lib/review/idgxmlbuilder.rb +30 -47
- data/lib/review/latexbuilder.rb +86 -41
- data/lib/review/latexutils.rb +19 -19
- data/lib/review/markdownbuilder.rb +16 -4
- data/lib/review/md2inaobuilder.rb +0 -9
- data/lib/review/pdfmaker.rb +91 -48
- data/lib/review/preprocessor.rb +1 -1
- data/lib/review/rstbuilder.rb +763 -0
- data/lib/review/sec_counter.rb +7 -9
- data/lib/review/tocparser.rb +3 -3
- data/lib/review/tocprinter.rb +5 -5
- data/lib/review/topbuilder.rb +48 -56
- data/lib/review/version.rb +1 -1
- data/lib/review/webmaker.rb +6 -7
- data/review.gemspec +1 -0
- data/templates/latex/layout.tex.erb +27 -2
- data/test/assets/test_template.tex +10 -1
- data/test/book_test_helper.rb +1 -2
- data/test/run_test.rb +10 -0
- data/test/sample-book/src/style.css +215 -0
- data/test/sample-book/src/vendor/jumoline/lppl.txt +416 -0
- data/test/test_book.rb +0 -1
- data/test/test_catalog.rb +1 -0
- data/test/test_converter.rb +1 -1
- data/test/test_epub3maker.rb +44 -51
- data/test/test_epubmaker.rb +82 -38
- data/test/test_epubmaker_cmd.rb +1 -1
- data/test/test_extentions_hash.rb +8 -1
- data/test/test_htmlbuilder.rb +411 -18
- data/test/test_i18n.rb +17 -0
- data/test/test_idgxmlbuilder.rb +88 -3
- data/test/test_image_finder.rb +18 -0
- data/test/test_index.rb +2 -0
- data/test/test_latexbuilder.rb +96 -8
- data/test/test_makerhelper.rb +2 -2
- data/test/test_markdownbuilder.rb +22 -1
- data/test/test_md2inaobuilder.rb +0 -5
- data/test/test_pdfmaker.rb +54 -36
- data/test/test_pdfmaker_cmd.rb +1 -1
- data/test/test_rstbuilder.rb +356 -0
- data/test/test_textutils.rb +14 -4
- data/test/test_topbuilder.rb +23 -4
- data/test/test_zip_exporter.rb +113 -0
- metadata +28 -2
data/lib/review/sec_counter.rb
CHANGED
@@ -28,7 +28,7 @@ module ReVIEW
|
|
28
28
|
@counter[n] += 1
|
29
29
|
end
|
30
30
|
if @counter.size > n
|
31
|
-
(n+1
|
31
|
+
(n+1..@counter.size).each do |i|
|
32
32
|
@counter[i] = 0
|
33
33
|
end
|
34
34
|
end
|
@@ -54,15 +54,13 @@ module ReVIEW
|
|
54
54
|
return "#{@chapter.format_number}#{I18n.t("chapter_postfix")}"
|
55
55
|
end
|
56
56
|
end
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
prefix << ".#{@counter[i]}"
|
62
|
-
end
|
63
|
-
prefix << I18n.t("chapter_postfix")
|
64
|
-
return prefix
|
57
|
+
elsif secnolevel >= level
|
58
|
+
prefix = @chapter.format_number(false)
|
59
|
+
0.upto(level - 2) do |i|
|
60
|
+
prefix << ".#{@counter[i]}"
|
65
61
|
end
|
62
|
+
prefix << I18n.t("chapter_postfix")
|
63
|
+
return prefix
|
66
64
|
end
|
67
65
|
end
|
68
66
|
end
|
data/lib/review/tocparser.rb
CHANGED
@@ -39,9 +39,9 @@ module ReVIEW
|
|
39
39
|
while line = f.gets
|
40
40
|
case line
|
41
41
|
when /\A\#@/
|
42
|
-
|
42
|
+
# do nothing
|
43
43
|
when /\A\s*\z/
|
44
|
-
|
44
|
+
# do nothing
|
45
45
|
when /\A(={2,})[\[\s\{]/
|
46
46
|
lev = $1.size
|
47
47
|
error! filename, f.lineno, "section level too deep: #{lev}" if lev > 5
|
@@ -81,7 +81,7 @@ module ReVIEW
|
|
81
81
|
error! filename, beg, 'unterminated list' unless line
|
82
82
|
|
83
83
|
when %r<\A//\w>
|
84
|
-
|
84
|
+
# do nothing
|
85
85
|
else
|
86
86
|
#if node_stack.empty?
|
87
87
|
# error! filename, f.lineno, 'text found before section label'
|
data/lib/review/tocprinter.rb
CHANGED
@@ -70,13 +70,13 @@ module ReVIEW
|
|
70
70
|
if node.chapter?
|
71
71
|
vol = node.volume
|
72
72
|
@out.printf "%3s %3dKB %6dC %5dL %s (%s)\n",
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
chapnumstr(node.number),
|
74
|
+
vol.kbytes, vol.chars, vol.lines,
|
75
|
+
node.label, node.chapter_id
|
76
76
|
else ## for section node
|
77
77
|
@out.printf "%17s %5dL %s\n",
|
78
|
-
|
79
|
-
|
78
|
+
'', node.estimated_lines,
|
79
|
+
" #{' ' * (node.level - 1)}#{number} #{node.label}"
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
data/lib/review/topbuilder.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
#
|
3
3
|
# Copyright (c) 2002-2006 Minero Aoki
|
4
|
-
# 2008-
|
4
|
+
# 2008-2017 Minero Aoki, Kenshi Muto
|
5
5
|
#
|
6
6
|
# This program is free software.
|
7
7
|
# You can distribute or modify this program under the terms of
|
@@ -52,6 +52,7 @@ module ReVIEW
|
|
52
52
|
@subsubsection = 0
|
53
53
|
@subsubsubsection = 0
|
54
54
|
@blank_seen = true
|
55
|
+
@sec_counter = SecCounter.new(5, @chapter)
|
55
56
|
|
56
57
|
@titles = {
|
57
58
|
"emlist" => "インラインリスト",
|
@@ -129,47 +130,9 @@ module ReVIEW
|
|
129
130
|
$stderr.puts "#{@location.filename}:#{@location.lineno}: error: #{msg}"
|
130
131
|
end
|
131
132
|
|
132
|
-
def messages
|
133
|
-
error_messages() + warning_messages()
|
134
|
-
end
|
135
|
-
|
136
133
|
def headline(level, label, caption)
|
137
|
-
prefix =
|
138
|
-
|
139
|
-
case level
|
140
|
-
when 1
|
141
|
-
if @chapter.number.to_s =~ /\A\d+\Z/
|
142
|
-
prefix = "第#{@chapter.number}章 "
|
143
|
-
elsif @chapter.number.present?
|
144
|
-
prefix = "#{@chapter.number} "
|
145
|
-
end
|
146
|
-
@section = 0
|
147
|
-
@subsection = 0
|
148
|
-
@subsubsection = 0
|
149
|
-
@subsubsubsection = 0
|
150
|
-
when 2
|
151
|
-
@section += 1
|
152
|
-
prefix = @chapter.number.present? ? "#{@chapter.number}.#{@section} " : ""
|
153
|
-
@subsection = 0
|
154
|
-
@subsubsection = 0
|
155
|
-
@subsubsubsection = 0
|
156
|
-
when 3
|
157
|
-
@subsection += 1
|
158
|
-
prefix = @chapter.number.present? ? "#{@chapter.number}.#{@section}.#{@subsection} " : ""
|
159
|
-
@subsubsection = 0
|
160
|
-
@subsubsubsection = 0
|
161
|
-
when 4
|
162
|
-
@subsubsection += 1
|
163
|
-
prefix = @chapter.number.present? ? "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection} " : ""
|
164
|
-
@subsubsubsection = 0
|
165
|
-
when 5
|
166
|
-
@subsubsubsection += 1
|
167
|
-
prefix = @chapter.number.present? ? "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}.#{@subsubsubsection} " : ""
|
168
|
-
else
|
169
|
-
raise "caption level too deep or unsupported: #{level}"
|
170
|
-
end
|
171
|
-
prefix = "" if (level.to_i > @book.config["secnolevel"])
|
172
|
-
puts "■H#{level}■#{prefix}#{compile_inline(caption)}"
|
134
|
+
prefix, anchor = headline_prefix(level)
|
135
|
+
puts %Q[■H#{level}■#{prefix}#{compile_inline(caption)}]
|
173
136
|
end
|
174
137
|
|
175
138
|
def ul_begin
|
@@ -232,11 +195,10 @@ module ReVIEW
|
|
232
195
|
def inline_list(id)
|
233
196
|
chapter, id = extract_chapter_id(id)
|
234
197
|
if get_chap(chapter).nil?
|
235
|
-
%Q[#{I18n.t("list")}#{I18n.t("format_number_without_chapter", [
|
198
|
+
%Q[#{I18n.t("list")}#{I18n.t("format_number_without_chapter", [chapter.list(id).number])}]
|
236
199
|
else
|
237
|
-
%Q[#{I18n.t("list")}#{I18n.t("format_number", [get_chap(chapter),
|
200
|
+
%Q[#{I18n.t("list")}#{I18n.t("format_number", [get_chap(chapter), chapter.list(id).number])}]
|
238
201
|
end
|
239
|
-
|
240
202
|
end
|
241
203
|
|
242
204
|
def list_header(id, caption, lang)
|
@@ -385,10 +347,12 @@ module ReVIEW
|
|
385
347
|
end
|
386
348
|
|
387
349
|
def comment(lines, comment = nil)
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
350
|
+
if @book.config["draft"]
|
351
|
+
lines ||= []
|
352
|
+
lines.unshift comment unless comment.blank?
|
353
|
+
str = lines.join("")
|
354
|
+
puts "◆→#{str}←◆"
|
355
|
+
end
|
392
356
|
end
|
393
357
|
|
394
358
|
def footnote(id, str)
|
@@ -505,7 +469,7 @@ module ReVIEW
|
|
505
469
|
|
506
470
|
def inline_comment(str)
|
507
471
|
if @book.config["draft"]
|
508
|
-
|
472
|
+
"◆→#{str}←◆"
|
509
473
|
else
|
510
474
|
""
|
511
475
|
end
|
@@ -515,6 +479,26 @@ module ReVIEW
|
|
515
479
|
%Q[◆→TeX式ここから←◆#{str}◆→TeX式ここまで←◆]
|
516
480
|
end
|
517
481
|
|
482
|
+
def bibpaper(lines, id, caption)
|
483
|
+
bibpaper_header id, caption
|
484
|
+
unless lines.empty?
|
485
|
+
bibpaper_bibpaper id, caption, lines
|
486
|
+
end
|
487
|
+
end
|
488
|
+
|
489
|
+
def bibpaper_header(id, caption)
|
490
|
+
print "[#{@chapter.bibpaper(id).number}]"
|
491
|
+
puts " #{compile_inline(caption)}"
|
492
|
+
end
|
493
|
+
|
494
|
+
def bibpaper_bibpaper(id, caption, lines)
|
495
|
+
print split_paragraph(lines).join("")
|
496
|
+
end
|
497
|
+
|
498
|
+
def inline_bib(id)
|
499
|
+
%Q([#{@chapter.bibpaper(id).number}])
|
500
|
+
end
|
501
|
+
|
518
502
|
def inline_hd_chap(chap, id)
|
519
503
|
if chap.number
|
520
504
|
n = chap.headline_index.number(id)
|
@@ -536,6 +520,20 @@ module ReVIEW
|
|
536
520
|
def nonum_end(level)
|
537
521
|
end
|
538
522
|
|
523
|
+
def notoc_begin(level, label, caption)
|
524
|
+
puts "■H#{level}■#{compile_inline(caption)}◆→DTP連絡:目次に掲載しない←◆"
|
525
|
+
end
|
526
|
+
|
527
|
+
def notoc_end(level)
|
528
|
+
end
|
529
|
+
|
530
|
+
def nodisp_begin(level, label, caption)
|
531
|
+
# return empty
|
532
|
+
end
|
533
|
+
|
534
|
+
def nodisp_end(level)
|
535
|
+
end
|
536
|
+
|
539
537
|
def common_column_begin(type, caption)
|
540
538
|
blank
|
541
539
|
puts "◆→開始:#{@titles[type]}←◆"
|
@@ -716,11 +714,6 @@ module ReVIEW
|
|
716
714
|
""
|
717
715
|
end
|
718
716
|
|
719
|
-
def tsize(id)
|
720
|
-
# FIXME
|
721
|
-
""
|
722
|
-
end
|
723
|
-
|
724
717
|
def dtp(str)
|
725
718
|
# FIXME
|
726
719
|
end
|
@@ -759,14 +752,13 @@ module ReVIEW
|
|
759
752
|
|
760
753
|
def inline_chapref(id)
|
761
754
|
chs = ["", "「", "」"]
|
762
|
-
|
755
|
+
if @book.config["chapref"]
|
763
756
|
_chs = @book.config["chapref"].split(",")
|
764
757
|
if _chs.size != 3
|
765
758
|
error "--chapsplitter must have exactly 3 parameters with comma."
|
766
759
|
else
|
767
760
|
chs = _chs
|
768
761
|
end
|
769
|
-
else
|
770
762
|
end
|
771
763
|
"#{chs[0]}#{@book.chapter_index.number(id)}#{chs[1]}#{@book.chapter_index.title(id)}#{chs[2]}"
|
772
764
|
rescue KeyError
|
data/lib/review/version.rb
CHANGED
data/lib/review/webmaker.rb
CHANGED
@@ -35,7 +35,7 @@ module ReVIEW
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def parse_opts(args)
|
38
|
-
cmd_config =
|
38
|
+
cmd_config = {}
|
39
39
|
opts = OptionParser.new
|
40
40
|
|
41
41
|
opts.banner = "Usage: review-webmaker configfile"
|
@@ -93,10 +93,10 @@ module ReVIEW
|
|
93
93
|
build_body(@path, yamlfile)
|
94
94
|
copy_backmatter(@path)
|
95
95
|
|
96
|
-
copy_images(@config["imagedir"], "#{@path}
|
96
|
+
copy_images(@config["imagedir"], "#{@path}/#{@config["imagedir"]}")
|
97
97
|
|
98
|
-
copy_resources("covers", "#{@path}
|
99
|
-
copy_resources("adv", "#{@path}
|
98
|
+
copy_resources("covers", "#{@path}/#{@config["imagedir"]}")
|
99
|
+
copy_resources("adv", "#{@path}/#{@config["imagedir"]}")
|
100
100
|
copy_resources(@config["fontdir"], "#{@path}/fonts", @config["font_ext"])
|
101
101
|
end
|
102
102
|
|
@@ -120,7 +120,6 @@ module ReVIEW
|
|
120
120
|
part.chapters.each do |chap|
|
121
121
|
build_chap(chap, base_path, basetmpdir, false)
|
122
122
|
end
|
123
|
-
|
124
123
|
end
|
125
124
|
end
|
126
125
|
|
@@ -232,8 +231,8 @@ module ReVIEW
|
|
232
231
|
def build_indexpage(basetmpdir)
|
233
232
|
File.open("#{basetmpdir}/index.html", "w") do |f|
|
234
233
|
if @config["coverimage"]
|
235
|
-
file = File.join("
|
236
|
-
|
234
|
+
file = File.join(@config["imagedir"], @config["coverimage"])
|
235
|
+
@body = <<-EOT
|
237
236
|
<div id="cover-image" class="cover-image">
|
238
237
|
<img src="#{file}" class="max"/>
|
239
238
|
</div>
|
data/review.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |gem|
|
|
24
24
|
gem.require_paths = ["lib"]
|
25
25
|
|
26
26
|
gem.add_dependency("rubyzip")
|
27
|
+
gem.add_dependency("rouge")
|
27
28
|
gem.add_development_dependency("rake")
|
28
29
|
gem.add_development_dependency("test-unit")
|
29
30
|
gem.add_development_dependency("pygments.rb")
|
@@ -27,7 +27,9 @@
|
|
27
27
|
\usepackage{amsmath}
|
28
28
|
|
29
29
|
%% if you use @<u>{} (underline), use jumoline.sty
|
30
|
-
|
30
|
+
\IfFileExists{jumoline.sty}{
|
31
|
+
\usepackage{jumoline}
|
32
|
+
}
|
31
33
|
|
32
34
|
\newenvironment{shadedb}{%
|
33
35
|
\def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolorb}}%
|
@@ -79,6 +81,8 @@
|
|
79
81
|
\lstnewenvironment{reviewemlistnumlst}[1][]{\lstset{numbers=left, #1}}{}
|
80
82
|
\lstnewenvironment{reviewlistlst}[1][]{\lstset{#1}}{}
|
81
83
|
\lstnewenvironment{reviewlistnumlst}[1][]{\lstset{numbers=left, #1}}{}
|
84
|
+
\lstnewenvironment{reviewsourcelst}[1][]{\lstset{#1}}{}
|
85
|
+
\lstnewenvironment{reviewsourcenumlst}[1][]{\lstset{numbers=left, #1}}{}
|
82
86
|
\lstnewenvironment{reviewcmdlst}[1][]{\lstset{backgroundcolor=\color{white}, frameround=tttt, frame=trbl, #1}}{}
|
83
87
|
<%- end -%>
|
84
88
|
|
@@ -102,6 +106,10 @@
|
|
102
106
|
\begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
103
107
|
\end{alltt}\end{shaded}\par\vspace*{0.5zw}}
|
104
108
|
|
109
|
+
\newenvironment{reviewsource}{%
|
110
|
+
\begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
111
|
+
\end{alltt}\end{shaded}\par\vspace*{0.5zw}}
|
112
|
+
|
105
113
|
\newenvironment{reviewcmd}{%
|
106
114
|
\color{white}\medskip\small\begin{shadedb}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
107
115
|
\end{alltt}\end{shadedb}}
|
@@ -140,6 +148,9 @@
|
|
140
148
|
\newcommand{\reviewemlistcaption}[1]{%
|
141
149
|
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
142
150
|
|
151
|
+
\newcommand{\reviewsourcecaption}[1]{%
|
152
|
+
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
153
|
+
|
143
154
|
\newcommand{\reviewcmdcaption}[1]{%
|
144
155
|
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
145
156
|
|
@@ -236,6 +247,10 @@
|
|
236
247
|
<%- if @config["usepackage"] -%>
|
237
248
|
<%= @config["usepackage"] %>
|
238
249
|
<%- end -%>
|
250
|
+
<%- if @config["makeindex"] -%>
|
251
|
+
\usepackage{makeidx}
|
252
|
+
\makeindex
|
253
|
+
<%- end -%>
|
239
254
|
|
240
255
|
\begin{document}
|
241
256
|
|
@@ -248,7 +263,7 @@
|
|
248
263
|
\begin{titlepage}
|
249
264
|
<%- if @config["coverimage"] -%>
|
250
265
|
\begin{center}
|
251
|
-
\includegraphics[<%= @coverimageoption%>]{
|
266
|
+
\includegraphics[<%= @coverimageoption%>]{./<%= @config["imagedir"] %>/<%= @config["coverimage"] %>}
|
252
267
|
\end{center}
|
253
268
|
\clearpage
|
254
269
|
<%- end -%>
|
@@ -257,6 +272,10 @@
|
|
257
272
|
\mbox{} \vskip5zw
|
258
273
|
\reviewtitlefont%
|
259
274
|
{\Huge <%= escape_latex(@config.name_of("booktitle")) %> \par}%
|
275
|
+
<%- if @config["subtitle"] -%>
|
276
|
+
\vskip 1em%
|
277
|
+
{\Large <%= escape_latex(@config.name_of("subtitle")) %> \par}%
|
278
|
+
<%- end -%>
|
260
279
|
\vskip 15em%
|
261
280
|
{\huge
|
262
281
|
\lineskip .75em
|
@@ -307,6 +326,9 @@
|
|
307
326
|
<%- if @input_files["POSTDEF"] -%>
|
308
327
|
<%= @input_files["POSTDEF"] %>
|
309
328
|
<%- end -%>
|
329
|
+
<%- if @config["pdfmaker"]["makeindex"] -%>
|
330
|
+
\printindex
|
331
|
+
<%- end -%>
|
310
332
|
|
311
333
|
%%% profile
|
312
334
|
<%- if @config["profile"] -%>
|
@@ -330,6 +352,9 @@
|
|
330
352
|
\vspace*{\fill}
|
331
353
|
|
332
354
|
{\noindent\reviewtitlefont\Large <%= escape_latex(@config.name_of("booktitle")) %>} \\
|
355
|
+
<%- if @config["subtitle"] -%>
|
356
|
+
{\noindent\reviewtitlefont\large <%= escape_latex(@config.name_of("subtitle")) %>} \\
|
357
|
+
<%- end -%>
|
333
358
|
\rule[8pt]{14cm}{1pt} \\
|
334
359
|
{\noindent
|
335
360
|
<%= @config["pubhistory"].to_s.gsub(/\n/){"\n\n\\noindent\n"} %>
|
@@ -23,7 +23,9 @@
|
|
23
23
|
\usepackage{amsmath}
|
24
24
|
|
25
25
|
%% if you use @<u>{} (underline), use jumoline.sty
|
26
|
-
|
26
|
+
\IfFileExists{jumoline.sty}{
|
27
|
+
\usepackage{jumoline}
|
28
|
+
}
|
27
29
|
|
28
30
|
\newenvironment{shadedb}{%
|
29
31
|
\def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolorb}}%
|
@@ -64,6 +66,10 @@
|
|
64
66
|
\begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
65
67
|
\end{alltt}\end{shaded}\par\vspace*{0.5zw}}
|
66
68
|
|
69
|
+
\newenvironment{reviewsource}{%
|
70
|
+
\begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
71
|
+
\end{alltt}\end{shaded}\par\vspace*{0.5zw}}
|
72
|
+
|
67
73
|
\newenvironment{reviewcmd}{%
|
68
74
|
\color{white}\medskip\small\begin{shadedb}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
69
75
|
\end{alltt}\end{shadedb}}
|
@@ -102,6 +108,9 @@
|
|
102
108
|
\newcommand{\reviewemlistcaption}[1]{%
|
103
109
|
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
104
110
|
|
111
|
+
\newcommand{\reviewsourcecaption}[1]{%
|
112
|
+
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
113
|
+
|
105
114
|
\newcommand{\reviewcmdcaption}[1]{%
|
106
115
|
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
107
116
|
|
data/test/book_test_helper.rb
CHANGED
@@ -25,14 +25,13 @@ module BookTestHelper
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def get_instance_variables(obj)
|
28
|
-
obj.instance_variables.
|
28
|
+
obj.instance_variables.each_with_object({}) do |name, memo|
|
29
29
|
value = obj.instance_variable_get(name)
|
30
30
|
if value.instance_variables.empty?
|
31
31
|
memo[name] = value
|
32
32
|
else
|
33
33
|
memo[name] = get_instance_variables(value)
|
34
34
|
end
|
35
|
-
memo
|
36
35
|
end
|
37
36
|
end
|
38
37
|
end
|
data/test/run_test.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
2
|
+
lib_dir = File.join(base_dir, "lib")
|
3
|
+
test_dir = File.join(base_dir, "test")
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift(lib_dir)
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
argv = ["--max-diff-target-string-size=10000"]
|
10
|
+
exit Test::Unit::AutoRunner.run(true, test_dir, argv)
|