review 0.9.0 → 1.0.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 +9 -0
- data/ChangeLog +326 -0
- data/Rakefile +3 -5
- data/VERSION +1 -1
- data/bin/review-compile +50 -50
- data/bin/review-epubmaker +62 -75
- data/bin/review-epubmaker-ng +185 -0
- data/bin/review-index +2 -1
- data/bin/review-pdfmaker +158 -101
- data/bin/review-vol +6 -2
- data/doc/format.rdoc +111 -46
- data/doc/libepubmaker/sample.yaml +90 -0
- data/doc/quickstart.rdoc +188 -0
- data/doc/sample.yaml +8 -0
- data/lib/epubmaker.rb +28 -0
- data/lib/epubmaker/content.rb +82 -0
- data/lib/epubmaker/epubv2.rb +419 -0
- data/lib/epubmaker/epubv3.rb +249 -0
- data/lib/epubmaker/producer.rb +204 -0
- data/lib/epubmaker/resource.rb +66 -0
- data/lib/review.rb +1 -1
- data/lib/review/book.rb +27 -4
- data/lib/review/builder.rb +153 -20
- data/lib/review/compiler.rb +61 -10
- data/lib/review/ewbbuilder.rb +3 -2
- data/lib/review/htmlbuilder.rb +174 -67
- data/lib/review/i18n.rb +30 -0
- data/lib/review/i18n.yaml +23 -0
- data/lib/review/idgxmlbuilder.rb +110 -63
- data/lib/review/index.rb +34 -12
- data/lib/review/latexbuilder.rb +128 -33
- data/lib/review/latexutils.rb +18 -1
- data/lib/review/textbuilder.rb +17 -0
- data/lib/review/tocparser.rb +3 -1
- data/lib/review/tocprinter.rb +1 -0
- data/lib/review/topbuilder.rb +397 -198
- data/review.gemspec +101 -100
- data/test/test_book.rb +27 -0
- data/test/test_epubmaker.rb +507 -0
- data/test/test_helper.rb +8 -0
- data/test/test_htmlbuilder.rb +295 -10
- data/test/test_i18n.rb +64 -0
- data/test/test_idgxmlbuilder.rb +268 -10
- data/test/test_latexbuilder.rb +316 -20
- data/test/test_preprocessor.rb +23 -0
- data/test/test_topbuilder.rb +246 -0
- metadata +46 -53
- data/doc/format.re +0 -505
- data/test/test_index.rb +0 -15
data/lib/review/latexbuilder.rb
CHANGED
@@ -21,7 +21,7 @@ module ReVIEW
|
|
21
21
|
include LaTeXUtils
|
22
22
|
include TextUtils
|
23
23
|
|
24
|
-
[:
|
24
|
+
[:dtp, :hd_chap].each {|e|
|
25
25
|
Compiler.definline(e)
|
26
26
|
}
|
27
27
|
|
@@ -73,11 +73,14 @@ module ReVIEW
|
|
73
73
|
|
74
74
|
def headline(level, label, caption)
|
75
75
|
prefix = ""
|
76
|
-
if level > ReVIEW.book.param["secnolevel"]
|
76
|
+
if level > ReVIEW.book.param["secnolevel"] || (@chapter.number.to_s.empty? && level > 1)
|
77
77
|
prefix = "*"
|
78
78
|
end
|
79
79
|
blank unless @output.pos == 0
|
80
80
|
puts macro(HEADLINE[level]+prefix, compile_inline(caption))
|
81
|
+
if level == 1
|
82
|
+
puts macro('label', chapter_label)
|
83
|
+
end
|
81
84
|
end
|
82
85
|
|
83
86
|
def nonum_begin(level, label, caption)
|
@@ -90,7 +93,7 @@ module ReVIEW
|
|
90
93
|
|
91
94
|
def column_begin(level, label, caption)
|
92
95
|
blank
|
93
|
-
## puts '\vspace{2zw}'
|
96
|
+
## puts '\vspace{2zw}'
|
94
97
|
## puts '\begin{center}'
|
95
98
|
## puts '\begin{minipage}{1.0\linewidth}'
|
96
99
|
## puts '\begin{framed}'
|
@@ -112,19 +115,22 @@ module ReVIEW
|
|
112
115
|
blank
|
113
116
|
end
|
114
117
|
|
115
|
-
def
|
118
|
+
def captionblock(type, lines, caption)
|
116
119
|
puts "\\begin{reviewminicolumn}\n"
|
117
120
|
unless caption.nil?
|
118
121
|
puts "\\reviewminicolumntitle{#{compile_inline(caption)}}\n"
|
119
122
|
end
|
120
|
-
lines.each {|l|
|
121
|
-
puts l
|
122
|
-
}
|
123
|
-
puts "\\end{reviewminicolumn}\n"
|
124
|
-
end
|
125
123
|
|
126
|
-
|
127
|
-
|
124
|
+
if ReVIEW.book.param["deprecated-blocklines"].nil?
|
125
|
+
blocked_lines = split_paragraph(lines)
|
126
|
+
puts blocked_lines.join("\n\n")
|
127
|
+
else
|
128
|
+
lines.each do |line|
|
129
|
+
puts line
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
puts "\\end{reviewminicolumn}\n"
|
128
134
|
end
|
129
135
|
|
130
136
|
def ul_begin
|
@@ -133,7 +139,7 @@ module ReVIEW
|
|
133
139
|
end
|
134
140
|
|
135
141
|
def ul_item(lines)
|
136
|
-
puts '\item ' + lines.join
|
142
|
+
puts '\item ' + lines.join
|
137
143
|
end
|
138
144
|
|
139
145
|
def ul_end
|
@@ -147,7 +153,7 @@ module ReVIEW
|
|
147
153
|
end
|
148
154
|
|
149
155
|
def ol_item(lines, num)
|
150
|
-
puts '\item ' + lines.join
|
156
|
+
puts '\item ' + lines.join
|
151
157
|
end
|
152
158
|
|
153
159
|
def ol_end
|
@@ -165,9 +171,7 @@ module ReVIEW
|
|
165
171
|
end
|
166
172
|
|
167
173
|
def dd(lines)
|
168
|
-
lines.
|
169
|
-
puts line
|
170
|
-
end
|
174
|
+
puts lines.join
|
171
175
|
end
|
172
176
|
|
173
177
|
def dl_end
|
@@ -193,8 +197,11 @@ module ReVIEW
|
|
193
197
|
|
194
198
|
alias lead read
|
195
199
|
|
196
|
-
def emlist(lines)
|
200
|
+
def emlist(lines, caption = nil)
|
197
201
|
blank
|
202
|
+
if caption
|
203
|
+
puts macro('reviewemlistcaption', "#{compile_inline(caption)}")
|
204
|
+
end
|
198
205
|
puts '\begin{reviewemlist}'
|
199
206
|
puts '\begin{alltt}'
|
200
207
|
lines.each do |line|
|
@@ -205,8 +212,11 @@ module ReVIEW
|
|
205
212
|
blank
|
206
213
|
end
|
207
214
|
|
208
|
-
def emlistnum(lines)
|
215
|
+
def emlistnum(lines, caption = nil)
|
209
216
|
blank
|
217
|
+
if caption
|
218
|
+
puts macro('reviewemlistcaption', "#{compile_inline(caption)}")
|
219
|
+
end
|
210
220
|
puts '\begin{reviewemlist}'
|
211
221
|
puts '\begin{alltt}'
|
212
222
|
lines.each_with_index do |line, i|
|
@@ -225,12 +235,15 @@ module ReVIEW
|
|
225
235
|
end
|
226
236
|
puts '\end{alltt}'
|
227
237
|
puts '\end{reviewlist}'
|
228
|
-
|
238
|
+
blank
|
229
239
|
|
230
240
|
end
|
231
241
|
|
232
|
-
def cmd(lines)
|
242
|
+
def cmd(lines, caption = nil)
|
233
243
|
blank
|
244
|
+
if caption
|
245
|
+
puts macro('reviewcmdcaption', "#{compile_inline(caption)}")
|
246
|
+
end
|
234
247
|
puts '\begin{reviewcmd}'
|
235
248
|
puts '\begin{alltt}'
|
236
249
|
lines.each do |line|
|
@@ -242,7 +255,7 @@ module ReVIEW
|
|
242
255
|
end
|
243
256
|
|
244
257
|
def list_header(id, caption)
|
245
|
-
puts macro('reviewlistcaption', "
|
258
|
+
puts macro('reviewlistcaption', "#{I18n.t("list")}#{I18n.t("format_number_header", [@chapter.number, @chapter.list(id).number])} #{compile_inline(caption)}")
|
246
259
|
end
|
247
260
|
|
248
261
|
def list_body(lines)
|
@@ -280,13 +293,18 @@ module ReVIEW
|
|
280
293
|
def image_header(id, caption)
|
281
294
|
end
|
282
295
|
|
296
|
+
def result_metric(array)
|
297
|
+
"#{array.join(',')}"
|
298
|
+
end
|
299
|
+
|
283
300
|
def image_image(id, caption, metric)
|
301
|
+
metrics = parse_metric("latex", metric)
|
284
302
|
# image is always bound here
|
285
303
|
puts '\begin{reviewimage}'
|
286
|
-
if
|
287
|
-
puts "\\includegraphics[#{
|
304
|
+
if !metrics.empty?
|
305
|
+
puts "\\includegraphics[#{metrics}]{#{@chapter.image(id).path}}"
|
288
306
|
else
|
289
|
-
puts
|
307
|
+
puts "\\includegraphics[width=\\maxwidth]{#{@chapter.image(id).path}}"
|
290
308
|
end
|
291
309
|
puts macro('label', image_label(id))
|
292
310
|
if !caption.empty?
|
@@ -319,12 +337,18 @@ module ReVIEW
|
|
319
337
|
end
|
320
338
|
private :image_label
|
321
339
|
|
340
|
+
def chapter_label()
|
341
|
+
"chap:#{@chapter.id}"
|
342
|
+
end
|
343
|
+
private :chapter_label
|
344
|
+
|
322
345
|
def indepimage(id, caption=nil, metric=nil)
|
346
|
+
metrics = parse_metric("latex", metric)
|
323
347
|
puts '\begin{reviewimage}'
|
324
|
-
if
|
325
|
-
puts "\\includegraphics[#{
|
348
|
+
if !metrics.empty?
|
349
|
+
puts "\\includegraphics[#{metrics}]{#{@chapter.image(id).path}}"
|
326
350
|
else
|
327
|
-
puts
|
351
|
+
puts "\\includegraphics[width=\\maxwidth]{#{@chapter.image(id).path}}"
|
328
352
|
end
|
329
353
|
if !caption.nil? && !caption.empty?
|
330
354
|
puts macro('caption', compile_inline(caption))
|
@@ -439,7 +463,9 @@ module ReVIEW
|
|
439
463
|
end
|
440
464
|
|
441
465
|
def comment(str)
|
442
|
-
|
466
|
+
if ReVIEW.book.param["draft"]
|
467
|
+
puts macro('pdfcomment', escape(str))
|
468
|
+
end
|
443
469
|
end
|
444
470
|
|
445
471
|
def label(id)
|
@@ -455,9 +481,43 @@ module ReVIEW
|
|
455
481
|
end
|
456
482
|
|
457
483
|
def noindent
|
458
|
-
|
484
|
+
print '\noindent'
|
485
|
+
end
|
486
|
+
|
487
|
+
def inline_chapref(id)
|
488
|
+
if ReVIEW.book.param["chapterlink"]
|
489
|
+
"\\hyperref[chap:#{id}]{#{@chapter.env.chapter_index.display_string(id)}}"
|
490
|
+
else
|
491
|
+
@chapter.env.chapter_index.display_string(id)
|
492
|
+
end
|
493
|
+
rescue KeyError
|
494
|
+
error "unknown chapter: #{id}"
|
495
|
+
nofunc_text("[UnknownChapter:#{id}]")
|
459
496
|
end
|
460
497
|
|
498
|
+
def inline_chap(id)
|
499
|
+
if ReVIEW.book.param["chapterlink"]
|
500
|
+
"\\hyperref[chap:#{id}]{#{@chapter.env.chapter_index.number(id)}}"
|
501
|
+
else
|
502
|
+
@chapter.env.chapter_index.number(id)
|
503
|
+
end
|
504
|
+
rescue KeyError
|
505
|
+
error "unknown chapter: #{id}"
|
506
|
+
nofunc_text("[UnknownChapter:#{id}]")
|
507
|
+
end
|
508
|
+
|
509
|
+
def inline_title(id)
|
510
|
+
if ReVIEW.book.param["chapterlink"]
|
511
|
+
"\\hyperref[chap:#{id}]{#{@chapter.env.chapter_index.title(id)}}"
|
512
|
+
else
|
513
|
+
@chapter.env.chapter_index.title(id)
|
514
|
+
end
|
515
|
+
rescue KeyError
|
516
|
+
error "unknown chapter: #{id}"
|
517
|
+
nofunc_text("[UnknownChapter:#{id}]")
|
518
|
+
end
|
519
|
+
|
520
|
+
|
461
521
|
# FIXME: use TeX native label/ref.
|
462
522
|
def inline_list(id)
|
463
523
|
chapter, id = extract_chapter_id(id)
|
@@ -475,10 +535,18 @@ module ReVIEW
|
|
475
535
|
end
|
476
536
|
|
477
537
|
def footnote(id, content)
|
538
|
+
if ReVIEW.book.param["footnotetext"]
|
539
|
+
puts macro("footnotetext[#{@chapter.footnote(id).number}]",
|
540
|
+
compile_inline(content.strip))
|
541
|
+
end
|
478
542
|
end
|
479
543
|
|
480
544
|
def inline_fn(id)
|
481
|
-
|
545
|
+
if ReVIEW.book.param["footnotetext"]
|
546
|
+
macro("footnotemark[#{@chapter.footnote(id).number}]", "")
|
547
|
+
else
|
548
|
+
macro('footnote', compile_inline(@chapter.footnote(id).content.strip))
|
549
|
+
end
|
482
550
|
end
|
483
551
|
|
484
552
|
BOUTEN = "・"
|
@@ -554,12 +622,16 @@ module ReVIEW
|
|
554
622
|
macro('texttt', macro('textbf', escape(str)))
|
555
623
|
end
|
556
624
|
|
625
|
+
def inline_bib(id)
|
626
|
+
"[#{@chapter.bibpaper(id).number}]"
|
627
|
+
end
|
628
|
+
|
557
629
|
def inline_hd_chap(chap, id)
|
558
630
|
"「#{chap.headline_index.number(id)} #{chap.headline(id).caption}」"
|
559
631
|
end
|
560
632
|
|
561
633
|
def inline_raw(str)
|
562
|
-
|
634
|
+
super(str)
|
563
635
|
end
|
564
636
|
|
565
637
|
def inline_sub(str)
|
@@ -591,6 +663,22 @@ module ReVIEW
|
|
591
663
|
macro('UTF', escape(str))
|
592
664
|
end
|
593
665
|
|
666
|
+
def inline_comment(str)
|
667
|
+
if ReVIEW.book.param["draft"]
|
668
|
+
macro('pdfcomment', escape(str))
|
669
|
+
end
|
670
|
+
end
|
671
|
+
|
672
|
+
def bibpaper_header(id, caption)
|
673
|
+
puts "[#{@chapter.bibpaper(id).number}] #{compile_inline(caption)}"
|
674
|
+
end
|
675
|
+
|
676
|
+
def bibpaper_bibpaper(id, caption, lines)
|
677
|
+
lines.each do |line|
|
678
|
+
puts detab(line)
|
679
|
+
end
|
680
|
+
end
|
681
|
+
|
594
682
|
def index(str)
|
595
683
|
str.sub!(/\(\)/, '')
|
596
684
|
decl = ''
|
@@ -618,9 +706,12 @@ module ReVIEW
|
|
618
706
|
end
|
619
707
|
|
620
708
|
def compile_href(url, label)
|
621
|
-
label ||= url
|
622
709
|
if /\A[a-z]+:\/\// =~ url
|
623
|
-
|
710
|
+
if label
|
711
|
+
macro("href", escape_url(url), escape(label))
|
712
|
+
else
|
713
|
+
macro("url", escape_url(url))
|
714
|
+
end
|
624
715
|
else
|
625
716
|
macro("ref", url)
|
626
717
|
end
|
@@ -634,6 +725,10 @@ module ReVIEW
|
|
634
725
|
@latex_tsize = str
|
635
726
|
end
|
636
727
|
|
728
|
+
def image_ext
|
729
|
+
"svg"
|
730
|
+
end
|
731
|
+
|
637
732
|
end
|
638
733
|
|
639
734
|
end
|
data/lib/review/latexutils.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
#
|
2
3
|
# $Id: latexutils.rb 2204 2006-03-18 06:10:26Z aamine $
|
3
4
|
#
|
@@ -26,7 +27,19 @@ module ReVIEW
|
|
26
27
|
'|' => '\textbar{}',
|
27
28
|
'<' => '\textless{}',
|
28
29
|
'>' => '\textgreater{}',
|
29
|
-
"\\" => '\reviewbackslash{}'
|
30
|
+
"\\" => '\reviewbackslash{}',
|
31
|
+
|
32
|
+
'⓪' => '\UTF{24EA}',
|
33
|
+
'①' => '\UTF{2460}',
|
34
|
+
'②' => '\UTF{2461}',
|
35
|
+
'③' => '\UTF{2462}',
|
36
|
+
'④' => '\UTF{2463}',
|
37
|
+
'⑤' => '\UTF{2464}',
|
38
|
+
'⑥' => '\UTF{2465}',
|
39
|
+
'⑦' => '\UTF{2466}',
|
40
|
+
'⑧' => '\UTF{2467}',
|
41
|
+
'⑨' => '\UTF{2468}',
|
42
|
+
'⑩' => '\UTF{2469}',
|
30
43
|
}
|
31
44
|
|
32
45
|
METACHARS_RE = /[#{Regexp.escape(MATACHARS.keys.join(''))}]/
|
@@ -52,6 +65,10 @@ module ReVIEW
|
|
52
65
|
str.gsub(/[@!|"]/) {|s| '"' + s }
|
53
66
|
end
|
54
67
|
|
68
|
+
def escape_url(str)
|
69
|
+
str.gsub(/[\#%]/) {|s| '\\'+s }
|
70
|
+
end
|
71
|
+
|
55
72
|
def macro(name, *args)
|
56
73
|
"\\#{name}" + args.map {|a| "{#{a}}" }.join('')
|
57
74
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# textbuilder.rb
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010 Kenshi Muto
|
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
|
+
#
|
9
|
+
|
10
|
+
require 'review/topbuilder'
|
11
|
+
|
12
|
+
module ReVIEW
|
13
|
+
|
14
|
+
class TEXTBuilder < TOPBuilder
|
15
|
+
end
|
16
|
+
|
17
|
+
end # module ReVIEW
|
data/lib/review/tocparser.rb
CHANGED
@@ -34,6 +34,7 @@ module ReVIEW
|
|
34
34
|
path = []
|
35
35
|
|
36
36
|
while line = f.gets
|
37
|
+
line.sub!(/\A\xEF\xBB\xBF/, '') # remove BOM
|
37
38
|
case line
|
38
39
|
when /\A\s*\z/
|
39
40
|
;
|
@@ -45,6 +46,7 @@ module ReVIEW
|
|
45
46
|
path.push Chapter.new(get_label(line), id, filename)
|
46
47
|
roots.push path.first
|
47
48
|
end
|
49
|
+
next if get_label(line) =~ /\A\[\// # ex) "[/column]"
|
48
50
|
new = Section.new(lev, get_label(line))
|
49
51
|
until path.last.level < new.level
|
50
52
|
path.pop
|
@@ -324,7 +326,7 @@ module ReVIEW
|
|
324
326
|
def toc
|
325
327
|
@toc ||= TOCParser.parse(self)
|
326
328
|
unless @toc.size == 1
|
327
|
-
$stderr.puts "warning: chapter #{
|
329
|
+
$stderr.puts "warning: chapter #{@toc.join} contains more than 1 chapter"
|
328
330
|
end
|
329
331
|
@toc.first
|
330
332
|
end
|
data/lib/review/tocprinter.rb
CHANGED
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-2010 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
|
@@ -17,18 +17,12 @@ module ReVIEW
|
|
17
17
|
|
18
18
|
include TextUtils
|
19
19
|
|
20
|
-
[:
|
20
|
+
[:ttbold, :hint, :maru, :keytop, :labelref, :ref, :pageref, :balloon].each {|e|
|
21
21
|
Compiler.definline(e)
|
22
22
|
}
|
23
23
|
Compiler.defsingle(:dtp, 1)
|
24
|
-
Compiler.defsingle(:raw, 1)
|
25
|
-
Compiler.defsingle(:indepimage, 1)
|
26
|
-
Compiler.defsingle(:label, 1)
|
27
|
-
Compiler.defsingle(:tsize, 1)
|
28
24
|
|
29
25
|
Compiler.defblock(:insn, 1)
|
30
|
-
Compiler.defblock(:flushright, 0)
|
31
|
-
Compiler.defblock(:note, 0..1)
|
32
26
|
Compiler.defblock(:memo, 0..1)
|
33
27
|
Compiler.defblock(:tip, 0..1)
|
34
28
|
Compiler.defblock(:info, 0..1)
|
@@ -43,12 +37,67 @@ module ReVIEW
|
|
43
37
|
Compiler.defblock(:term, 0)
|
44
38
|
Compiler.defblock(:practice, 0)
|
45
39
|
Compiler.defblock(:expert, 0)
|
46
|
-
|
40
|
+
|
41
|
+
def pre_paragraph
|
42
|
+
''
|
43
|
+
end
|
44
|
+
|
45
|
+
def post_paragraph
|
46
|
+
''
|
47
|
+
end
|
48
|
+
|
49
|
+
def extname
|
50
|
+
'.txt'
|
51
|
+
end
|
47
52
|
|
48
53
|
def builder_init_file
|
49
54
|
@section = 0
|
55
|
+
@subsection = 0
|
56
|
+
@subsubsection = 0
|
57
|
+
@subsubsubsection = 0
|
50
58
|
@blank_seen = true
|
51
|
-
|
59
|
+
|
60
|
+
@titles = {
|
61
|
+
"emlist" => "インラインリスト",
|
62
|
+
"cmd" => "コマンド",
|
63
|
+
"quote" => "引用",
|
64
|
+
"flushright" => "右寄せ",
|
65
|
+
"note" => "ノート",
|
66
|
+
"memo" => "メモ",
|
67
|
+
"important" => "重要",
|
68
|
+
"info" => "情報",
|
69
|
+
"planning" => "プランニング",
|
70
|
+
"shoot" => "トラブルシュート",
|
71
|
+
"term" => "用語解説",
|
72
|
+
"notice" => "注意",
|
73
|
+
"caution" => "警告",
|
74
|
+
"point" => "ここがポイント",
|
75
|
+
"reference" => "参考",
|
76
|
+
"link" => "リンク",
|
77
|
+
"best" => "ベストプラクティス",
|
78
|
+
"practice" => "練習問題",
|
79
|
+
"security" => "セキュリティ",
|
80
|
+
"expert" => "エキスパートに訊け",
|
81
|
+
"tip" => "TIP",
|
82
|
+
"box" => "書式",
|
83
|
+
"insn" => "書式",
|
84
|
+
"column" => "コラム",
|
85
|
+
"xcolumn" => "コラムパターン2",
|
86
|
+
"world" => "Worldコラム",
|
87
|
+
"hood" => "Under The Hoodコラム",
|
88
|
+
"edition" => "Editionコラム",
|
89
|
+
"insideout" => "InSideOutコラム",
|
90
|
+
"ref" => "参照",
|
91
|
+
"sup" => "補足",
|
92
|
+
"read" => "リード",
|
93
|
+
"lead" => "リード",
|
94
|
+
"list" => "リスト",
|
95
|
+
"image" => "図",
|
96
|
+
"texequation" => "TeX式",
|
97
|
+
"table" => "表",
|
98
|
+
"bpo" => "bpo",
|
99
|
+
"source" => "ソースコードリスト",
|
100
|
+
}
|
52
101
|
end
|
53
102
|
private :builder_init_file
|
54
103
|
|
@@ -87,33 +136,42 @@ module ReVIEW
|
|
87
136
|
end
|
88
137
|
|
89
138
|
def headline(level, label, caption)
|
90
|
-
|
139
|
+
prefix = ""
|
91
140
|
blank
|
92
141
|
case level
|
93
142
|
when 1
|
94
|
-
|
143
|
+
if @chapter.number.to_s =~ /\A\d+\Z/
|
144
|
+
prefix = "第#{@chapter.number}章 "
|
145
|
+
elsif !@chapter.number.nil? && !@chapter.number.to_s.empty?
|
146
|
+
prefix = "#{@chapter.number} "
|
147
|
+
end
|
148
|
+
@section = 0
|
149
|
+
@subsection = 0
|
150
|
+
@subsubsection = 0
|
151
|
+
@subsubsubsection = 0
|
95
152
|
when 2
|
96
|
-
|
153
|
+
@section += 1
|
154
|
+
prefix = (!@chapter.number.nil? && !@chapter.number.to_s.empty?) ? "#{@chapter.number}.#{@section} " : ""
|
155
|
+
@subsection = 0
|
156
|
+
@subsubsection = 0
|
157
|
+
@subsubsubsection = 0
|
97
158
|
when 3
|
98
|
-
|
159
|
+
@subsection += 1
|
160
|
+
prefix = (!@chapter.number.nil? && !@chapter.number.to_s.empty?) ? "#{@chapter.number}.#{@section}.#{@subsection} " : ""
|
161
|
+
@subsubsection = 0
|
162
|
+
@subsubsubsection = 0
|
99
163
|
when 4
|
100
|
-
|
164
|
+
@subsubsection += 1
|
165
|
+
prefix = (!@chapter.number.nil? && !@chapter.number.to_s.empty?) ? "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection} " : ""
|
166
|
+
@subsubsubsection = 0
|
101
167
|
when 5
|
102
|
-
|
168
|
+
@subsubsubsection += 1
|
169
|
+
prefix = (!@chapter.number.nil? && !@chapter.number.to_s.empty?) ? "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}.#{@subsubsubsection} " : ""
|
103
170
|
else
|
104
171
|
raise "caption level too deep or unsupported: #{level}"
|
105
172
|
end
|
106
|
-
|
107
|
-
|
108
|
-
def column_begin(level, label, caption)
|
109
|
-
blank
|
110
|
-
puts "◆→開始:コラム←◆"
|
111
|
-
puts "■#{caption}"
|
112
|
-
end
|
113
|
-
|
114
|
-
def column_end(level)
|
115
|
-
puts "◆→終了:コラム←◆"
|
116
|
-
blank
|
173
|
+
prefix = "" if (level.to_i > ReVIEW.book.param["secnolevel"])
|
174
|
+
puts "■H#{level}■#{prefix}#{compile_inline(caption)}"
|
117
175
|
end
|
118
176
|
|
119
177
|
def ul_begin
|
@@ -121,42 +179,20 @@ module ReVIEW
|
|
121
179
|
end
|
122
180
|
|
123
181
|
def ul_item(lines)
|
124
|
-
|
125
|
-
puts "\t#{lines.join('')}"
|
182
|
+
puts "●\t#{lines.join}"
|
126
183
|
end
|
127
184
|
|
128
185
|
def ul_end
|
129
186
|
blank
|
130
187
|
end
|
131
188
|
|
132
|
-
def choice_single_begin
|
133
|
-
@choice = "○"
|
134
|
-
blank
|
135
|
-
end
|
136
|
-
|
137
|
-
def choice_single_end
|
138
|
-
@choice = nil
|
139
|
-
blank
|
140
|
-
end
|
141
|
-
|
142
|
-
def choice_multi_begin
|
143
|
-
@choice = "□"
|
144
|
-
blank
|
145
|
-
end
|
146
|
-
|
147
|
-
def choice_multi_end
|
148
|
-
@choice = nil
|
149
|
-
blank
|
150
|
-
end
|
151
|
-
|
152
189
|
def ol_begin
|
153
190
|
blank
|
154
191
|
@olitem = 0
|
155
192
|
end
|
156
193
|
|
157
194
|
def ol_item(lines, num)
|
158
|
-
|
159
|
-
puts "#{num}\t#{lines.join('')}"
|
195
|
+
puts "#{num}\t#{lines.join}"
|
160
196
|
end
|
161
197
|
|
162
198
|
def ol_end
|
@@ -178,74 +214,128 @@ module ReVIEW
|
|
178
214
|
end
|
179
215
|
end
|
180
216
|
|
181
|
-
def split_paragraph(lines)
|
182
|
-
lines.map {|line| line.strip }.join("\n").strip.split("\n\n")
|
183
|
-
end
|
184
|
-
|
185
217
|
def dl_end
|
186
218
|
blank
|
187
219
|
end
|
188
220
|
|
189
221
|
def paragraph(lines)
|
190
|
-
puts lines.join
|
222
|
+
puts lines.join
|
191
223
|
end
|
192
224
|
|
193
225
|
def read(lines)
|
194
|
-
puts "
|
195
|
-
|
196
|
-
puts "
|
226
|
+
puts "◆→開始:#{@titles["lead"]}←◆"
|
227
|
+
puts split_paragraph(lines).join("\n")
|
228
|
+
puts "◆→終了:#{@titles["lead"]}←◆"
|
229
|
+
blank
|
197
230
|
end
|
198
231
|
|
199
|
-
alias lead read
|
232
|
+
alias :lead read
|
200
233
|
|
201
234
|
def inline_list(id)
|
202
|
-
|
235
|
+
chapter, id = extract_chapter_id(id)
|
236
|
+
if get_chap(chapter).nil?
|
237
|
+
puts %Q[#{I18n.t("list")}#{I18n.t("format_number_without_chapter", [@chapter.list(id).number])}]
|
238
|
+
else
|
239
|
+
puts %Q[#{I18n.t("list")}#{I18n.t("format_number", [get_chap(chapter), @chapter.list(id).number])}]
|
240
|
+
end
|
241
|
+
|
203
242
|
end
|
204
243
|
|
205
244
|
def list_header(id, caption)
|
206
245
|
blank
|
207
|
-
puts "
|
208
|
-
|
246
|
+
puts "◆→開始:#{@titles["list"]}←◆"
|
247
|
+
if get_chap.nil?
|
248
|
+
puts %Q[#{I18n.t("list")}#{I18n.t("format_number_without_chapter", [@chapter.list(id).number])} #{compile_inline(caption)}]
|
249
|
+
else
|
250
|
+
puts %Q[#{I18n.t("list")}#{I18n.t("format_number", [get_chap, @chapter.list(id).number])} #{compile_inline(caption)}]
|
251
|
+
end
|
209
252
|
blank
|
210
253
|
end
|
211
254
|
|
212
255
|
def list_body(lines)
|
213
256
|
lines.each do |line|
|
214
|
-
puts line
|
257
|
+
puts detab(line)
|
215
258
|
end
|
216
|
-
puts "
|
259
|
+
puts "◆→終了:#{@titles["list"]}←◆"
|
217
260
|
blank
|
218
261
|
end
|
219
262
|
|
220
263
|
def base_block(type, lines, caption = nil)
|
221
264
|
blank
|
222
|
-
puts "◆→開始:#{type}←◆"
|
223
|
-
puts "■#{caption}" unless caption.nil?
|
265
|
+
puts "◆→開始:#{@titles[type]}←◆"
|
266
|
+
puts "■#{compile_inline(caption)}" unless caption.nil?
|
224
267
|
puts lines.join("\n")
|
225
|
-
puts "◆→終了:#{type}←◆"
|
268
|
+
puts "◆→終了:#{@titles[type]}←◆"
|
269
|
+
blank
|
270
|
+
end
|
271
|
+
|
272
|
+
def base_parablock(type, lines, caption = nil)
|
273
|
+
blank
|
274
|
+
puts "◆→開始:#{@titles[type]}←◆"
|
275
|
+
puts "■#{compile_inline(caption)}" unless caption.nil?
|
276
|
+
puts split_paragraph(lines).join("\n")
|
277
|
+
puts "◆→終了:#{@titles[type]}←◆"
|
226
278
|
blank
|
227
279
|
end
|
228
280
|
|
229
281
|
def emlist(lines, caption = nil)
|
230
|
-
base_block "
|
282
|
+
base_block "emlist", lines, caption
|
283
|
+
end
|
284
|
+
|
285
|
+
def emlistnum(lines, caption = nil)
|
286
|
+
blank
|
287
|
+
puts "◆→開始:#{@titles["emlist"]}←◆"
|
288
|
+
puts "■#{compile_inline(caption)}" unless caption.nil?
|
289
|
+
_lines = []
|
290
|
+
lines.each_with_index do |line, i|
|
291
|
+
puts (i + 1).to_s.rjust(2) + ": #{line}"
|
292
|
+
end
|
293
|
+
puts "◆→終了:#{@titles["emlist"]}←◆"
|
294
|
+
blank
|
295
|
+
end
|
296
|
+
|
297
|
+
def listnum_body(lines)
|
298
|
+
lines.each_with_index do |line, i|
|
299
|
+
puts (i + 1).to_s.rjust(2) + ": #{line}"
|
300
|
+
end
|
301
|
+
puts "◆→終了:#{@titles["list"]}←◆"
|
302
|
+
blank
|
231
303
|
end
|
232
304
|
|
233
305
|
def cmd(lines, caption = nil)
|
234
|
-
base_block "
|
306
|
+
base_block "cmd", lines, caption
|
235
307
|
end
|
236
308
|
|
237
309
|
def quote(lines)
|
238
|
-
|
310
|
+
base_parablock "quote", lines, nil
|
311
|
+
end
|
312
|
+
|
313
|
+
def inline_table(id)
|
314
|
+
chapter, id = extract_chapter_id(id)
|
315
|
+
if get_chap(chapter).nil?
|
316
|
+
"#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [chapter.table(id).number])}"
|
317
|
+
else
|
318
|
+
"#{I18n.t("table")}#{I18n.t("format_number", [get_chap(chapter), chapter.table(id).number])}"
|
319
|
+
end
|
239
320
|
end
|
240
321
|
|
241
322
|
def inline_img(id)
|
242
|
-
|
323
|
+
chapter, id = extract_chapter_id(id)
|
324
|
+
if get_chap(chapter).nil?
|
325
|
+
"#{I18n.t("image")}#{I18n.t("format_number_without_chapter", [chapter.image(id).number])}"
|
326
|
+
else
|
327
|
+
"#{I18n.t("image")}#{I18n.t("format_number", [get_chap(chapter), chapter.image(id).number])}"
|
328
|
+
end
|
243
329
|
end
|
244
330
|
|
245
|
-
def image(lines, id, caption)
|
331
|
+
def image(lines, id, caption, metric=nil)
|
246
332
|
blank
|
247
|
-
puts "
|
248
|
-
|
333
|
+
puts "◆→開始:#{@titles["image"]}←◆"
|
334
|
+
if get_chap.nil?
|
335
|
+
puts "#{I18n.t("image")}#{I18n.t("format_number_without_chapter", [@chapter.image(id).number])} #{compile_inline(caption)}"
|
336
|
+
else
|
337
|
+
puts "#{I18n.t("image")}#{I18n.t("format_number", [get_chap, @chapter.image(id).number])} #{compile_inline(caption)}"
|
338
|
+
end
|
249
339
|
blank
|
250
340
|
if @chapter.image(id).bound?
|
251
341
|
puts "◆→#{@chapter.image(id).path}←◆"
|
@@ -254,18 +344,25 @@ module ReVIEW
|
|
254
344
|
puts line
|
255
345
|
end
|
256
346
|
end
|
257
|
-
puts "
|
347
|
+
puts "◆→終了:#{@titles["image"]}←◆"
|
258
348
|
blank
|
259
349
|
end
|
260
350
|
|
261
|
-
def
|
262
|
-
"
|
351
|
+
def texequation(lines)
|
352
|
+
puts "◆→開始:#{@titles["texequation"]}←◆"
|
353
|
+
puts "#{lines.join("\n")}"
|
354
|
+
puts "◆→終了:#{@titles["texequation"]}←◆"
|
355
|
+
blank
|
263
356
|
end
|
264
357
|
|
265
358
|
def table_header(id, caption)
|
266
359
|
blank
|
267
|
-
puts "
|
268
|
-
|
360
|
+
puts "◆→開始:#{@titles["table"]}←◆"
|
361
|
+
if get_chap.nil?
|
362
|
+
puts "#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [@chapter.table(id).number])} #{compile_inline(caption)}"
|
363
|
+
else
|
364
|
+
puts "#{I18n.t("table")}#{I18n.t("format_number", [get_chap, @chapter.table(id).number])} #{compile_inline(caption)}"
|
365
|
+
end
|
269
366
|
blank
|
270
367
|
end
|
271
368
|
|
@@ -285,44 +382,74 @@ module ReVIEW
|
|
285
382
|
end
|
286
383
|
|
287
384
|
def table_end
|
288
|
-
puts "
|
385
|
+
puts "◆→終了:#{@titles["table"]}←◆"
|
289
386
|
blank
|
290
387
|
end
|
291
388
|
|
292
389
|
def comment(str)
|
293
|
-
puts "◆→DTP
|
390
|
+
puts "◆→DTP連絡:#{str}←◆"
|
294
391
|
end
|
295
392
|
|
296
|
-
def
|
393
|
+
def footnote(id, str)
|
394
|
+
puts "【注#{@chapter.footnote(id).number}】#{compile_inline(str)}"
|
395
|
+
end
|
396
|
+
|
397
|
+
def inline_fn(id)
|
297
398
|
"【注#{@chapter.footnote(id).number}】"
|
298
399
|
end
|
299
400
|
|
300
|
-
def
|
301
|
-
|
401
|
+
def compile_ruby(base, ruby)
|
402
|
+
"#{base}◆→DTP連絡:「#{base}」に「#{ruby}」とルビ←◆"
|
302
403
|
end
|
303
404
|
|
304
405
|
def compile_kw(word, alt)
|
305
406
|
if alt
|
306
|
-
then "★#{word}☆(#{alt.
|
407
|
+
then "★#{word}☆(#{alt.strip})"
|
307
408
|
else "★#{word}☆"
|
308
409
|
end
|
309
410
|
end
|
310
411
|
|
311
|
-
def
|
312
|
-
|
313
|
-
|
314
|
-
|
412
|
+
def compile_href(url, label)
|
413
|
+
if label.nil?
|
414
|
+
%Q[△#{url}☆]
|
415
|
+
else
|
416
|
+
%Q[#{label}(△#{url}☆)]
|
417
|
+
end
|
315
418
|
end
|
316
419
|
|
317
|
-
def
|
318
|
-
"#{
|
420
|
+
def inline_sup(str)
|
421
|
+
"#{str}◆→DTP連絡:「#{str}」は上付き←◆"
|
319
422
|
end
|
320
423
|
|
321
|
-
def
|
322
|
-
"#{str}◆→DTP
|
424
|
+
def inline_sub(str)
|
425
|
+
"#{str}◆→DTP連絡:「#{str}」は下付き←◆"
|
323
426
|
end
|
324
427
|
|
325
|
-
def
|
428
|
+
def inline_raw(str)
|
429
|
+
%Q[#{super(str).gsub("\\n", "\n")}]
|
430
|
+
end
|
431
|
+
|
432
|
+
def inline_hint(str)
|
433
|
+
"◆→ヒントスタイルここから←◆#{str}◆→ヒントスタイルここまで←◆"
|
434
|
+
end
|
435
|
+
|
436
|
+
def inline_maru(str)
|
437
|
+
"#{str}◆→丸数字#{str}←◆"
|
438
|
+
end
|
439
|
+
|
440
|
+
def inline_idx(str)
|
441
|
+
"#{str}◆→索引項目:#{str}←◆"
|
442
|
+
end
|
443
|
+
|
444
|
+
def inline_hidx(str)
|
445
|
+
"◆→索引項目:#{str}←◆"
|
446
|
+
end
|
447
|
+
|
448
|
+
def inline_ami(str)
|
449
|
+
"#{str}◆→DTP連絡:「#{str}」に網カケ←◆"
|
450
|
+
end
|
451
|
+
|
452
|
+
def inline_i(str)
|
326
453
|
"▲#{str}☆"
|
327
454
|
end
|
328
455
|
|
@@ -334,169 +461,227 @@ module ReVIEW
|
|
334
461
|
"△#{str}☆"
|
335
462
|
end
|
336
463
|
|
337
|
-
def
|
464
|
+
def inline_ttb(str)
|
338
465
|
"★#{str}☆◆→等幅フォント太字←◆"
|
339
466
|
end
|
340
467
|
|
468
|
+
alias :inline_ttbold inline_ttb
|
469
|
+
|
341
470
|
def inline_tti(str)
|
342
471
|
"▲#{str}☆◆→等幅フォントイタ←◆"
|
343
472
|
end
|
344
473
|
|
345
|
-
def inline_ttibold(str)
|
346
|
-
"▲#{str}☆◆→等幅フォント太字イタ←◆"
|
347
|
-
end
|
348
|
-
|
349
474
|
def inline_u(str)
|
350
475
|
"@#{str}@◆→@〜@部分に下線←◆"
|
351
476
|
end
|
352
477
|
|
353
|
-
|
354
|
-
|
478
|
+
def inline_icon(id)
|
479
|
+
begin
|
480
|
+
return "◆→画像 #{@chapter.image(id).path.sub(/\A\.\//, "")}←◆"
|
481
|
+
rescue
|
482
|
+
warn "no such icon image: #{id}"
|
483
|
+
return "◆→画像 #{id}←◆"
|
484
|
+
end
|
355
485
|
end
|
356
486
|
|
357
|
-
def
|
358
|
-
"#{str}◆→DTP
|
487
|
+
def inline_bou(str)
|
488
|
+
"#{str}◆→DTP連絡:「#{str}」に傍点←◆"
|
359
489
|
end
|
360
490
|
|
361
|
-
def
|
362
|
-
"#{str}
|
491
|
+
def inline_keytop(str)
|
492
|
+
"#{str}◆→キートップ#{str}←◆"
|
363
493
|
end
|
364
494
|
|
365
|
-
def
|
366
|
-
|
495
|
+
def inline_balloon(str)
|
496
|
+
%Q(\t←#{str.gsub(/@maru\[(\d+)\]/, inline_maru('\1'))})
|
367
497
|
end
|
368
498
|
|
369
|
-
def
|
370
|
-
|
371
|
-
str
|
499
|
+
def inline_uchar(str)
|
500
|
+
[str.to_i(16)].pack("U")
|
372
501
|
end
|
373
502
|
|
374
|
-
def
|
375
|
-
|
503
|
+
def inline_m(str)
|
504
|
+
%Q[◆→TeX式ここから←◆#{str}◆→TeX式ここまで←◆]
|
376
505
|
end
|
377
506
|
|
378
|
-
def
|
379
|
-
"
|
507
|
+
def noindent
|
508
|
+
puts "◆→DTP連絡:次の1行インデントなし←◆"
|
380
509
|
end
|
381
510
|
|
382
|
-
def
|
383
|
-
"#{
|
511
|
+
def nonum_begin(level, label, caption)
|
512
|
+
puts "■H#{level}■#{compile_inline(caption)}"
|
384
513
|
end
|
385
514
|
|
386
|
-
def
|
387
|
-
"◆→索引項目:#{str}←◆"
|
515
|
+
def nonum_end(level)
|
388
516
|
end
|
389
517
|
|
390
|
-
def
|
391
|
-
|
518
|
+
def common_column_begin(type, caption)
|
519
|
+
blank
|
520
|
+
puts "◆→開始:#{@titles["type"]}←◆"
|
521
|
+
puts %Q[■#{compile_inline(caption)}]
|
392
522
|
end
|
393
523
|
|
394
|
-
def
|
395
|
-
%Q
|
524
|
+
def common_column_end(type)
|
525
|
+
puts %Q[◆→終了:#{@titles["type"]}←◆]
|
526
|
+
blank
|
396
527
|
end
|
397
528
|
|
398
|
-
|
529
|
+
def column_begin(level, label, caption)
|
530
|
+
common_column_begin("column", caption)
|
531
|
+
end
|
399
532
|
|
400
|
-
def
|
401
|
-
|
533
|
+
def column_end(level)
|
534
|
+
common_column_end("column")
|
402
535
|
end
|
403
536
|
|
404
|
-
def
|
405
|
-
|
537
|
+
def xcolumn_begin(level, label, caption)
|
538
|
+
common_column_begin("xcolumn", caption)
|
406
539
|
end
|
407
540
|
|
408
|
-
def
|
409
|
-
|
541
|
+
def xcolumn_end(level)
|
542
|
+
common_column_end("xcolumn")
|
410
543
|
end
|
411
544
|
|
412
|
-
def
|
413
|
-
|
545
|
+
def world_begin(level, label, caption)
|
546
|
+
common_column_begin("world", caption)
|
414
547
|
end
|
415
548
|
|
416
|
-
def
|
549
|
+
def world_end(level)
|
550
|
+
common_column_end("world")
|
417
551
|
end
|
418
552
|
|
419
|
-
def
|
420
|
-
|
553
|
+
def hood_begin(level, label, caption)
|
554
|
+
common_column_begin("hood", caption)
|
421
555
|
end
|
422
556
|
|
423
|
-
def
|
557
|
+
def hood_end(level)
|
558
|
+
common_column_end("hood")
|
559
|
+
end
|
560
|
+
|
561
|
+
def edition_begin(level, label, caption)
|
562
|
+
common_column_begin("edition", caption)
|
563
|
+
end
|
564
|
+
|
565
|
+
def edition_end(level)
|
566
|
+
common_column_end("edition")
|
567
|
+
end
|
568
|
+
|
569
|
+
def insideout_begin(level, label, caption)
|
570
|
+
common_column_begin("insideout", caption)
|
571
|
+
end
|
572
|
+
|
573
|
+
def insideout_end(level)
|
574
|
+
common_column_end("insideout")
|
575
|
+
end
|
576
|
+
|
577
|
+
def ref_begin(level, label, caption)
|
578
|
+
common_column_begin("ref", caption)
|
579
|
+
end
|
580
|
+
|
581
|
+
def ref_end(level)
|
582
|
+
common_column_end("ref")
|
583
|
+
end
|
584
|
+
|
585
|
+
def sup_begin(level, label, caption)
|
586
|
+
common_column_begin("sup", caption)
|
587
|
+
end
|
588
|
+
|
589
|
+
def sup_end(level)
|
590
|
+
common_column_end("sup")
|
424
591
|
end
|
425
592
|
|
426
593
|
def flushright(lines)
|
427
|
-
|
594
|
+
base_parablock "flushright", lines, nil
|
428
595
|
end
|
429
596
|
|
430
597
|
def note(lines, caption = nil)
|
431
|
-
|
598
|
+
base_parablock "note", lines, caption
|
432
599
|
end
|
433
600
|
|
434
601
|
def memo(lines, caption = nil)
|
435
|
-
|
602
|
+
base_parablock "memo", lines, caption
|
436
603
|
end
|
437
604
|
|
438
605
|
def tip(lines, caption = nil)
|
439
|
-
|
606
|
+
base_parablock "tip", lines, caption
|
440
607
|
end
|
441
608
|
|
442
609
|
def info(lines, caption = nil)
|
443
|
-
|
610
|
+
base_parablock "info", lines, caption
|
444
611
|
end
|
445
612
|
|
446
613
|
def planning(lines, caption = nil)
|
447
|
-
|
614
|
+
base_parablock "planning", lines, caption
|
448
615
|
end
|
449
616
|
|
450
617
|
def best(lines, caption = nil)
|
451
|
-
|
618
|
+
base_parablock "best", lines, caption
|
452
619
|
end
|
453
620
|
|
454
621
|
def important(lines, caption = nil)
|
455
|
-
|
622
|
+
base_parablock "important", lines, caption
|
456
623
|
end
|
457
624
|
|
458
625
|
def security(lines, caption = nil)
|
459
|
-
|
626
|
+
base_parablock "security", lines, caption
|
460
627
|
end
|
461
628
|
|
462
629
|
def caution(lines, caption = nil)
|
463
|
-
|
630
|
+
base_parablock "caution", lines, caption
|
464
631
|
end
|
465
632
|
|
466
633
|
def term(lines)
|
467
|
-
|
634
|
+
base_parablock "term", lines, nil
|
635
|
+
end
|
636
|
+
|
637
|
+
def link(lines, caption = nil)
|
638
|
+
base_parablock "link", lines, caption
|
468
639
|
end
|
469
640
|
|
470
641
|
def notice(lines, caption = nil)
|
471
|
-
|
642
|
+
base_parablock "notice", lines, caption
|
472
643
|
end
|
473
644
|
|
474
645
|
def point(lines, caption = nil)
|
475
|
-
|
646
|
+
base_parablock "point", lines, caption
|
647
|
+
end
|
648
|
+
|
649
|
+
def shoot(lines, caption = nil)
|
650
|
+
base_parablock "shoot", lines, caption
|
476
651
|
end
|
477
652
|
|
478
653
|
def reference(lines)
|
479
|
-
|
654
|
+
base_parablock "reference", lines, nil
|
480
655
|
end
|
481
656
|
|
482
657
|
def practice(lines)
|
483
|
-
|
658
|
+
base_parablock "practice", lines, nil
|
484
659
|
end
|
485
660
|
|
486
661
|
def expert(lines)
|
487
|
-
|
662
|
+
base_parablock "expert", lines, nil
|
488
663
|
end
|
489
664
|
|
490
665
|
def insn(lines, caption = nil)
|
491
|
-
base_block "
|
666
|
+
base_block "insn", lines, caption
|
492
667
|
end
|
493
668
|
|
494
|
-
alias box insn
|
669
|
+
alias :box insn
|
495
670
|
|
496
|
-
def indepimage(id)
|
497
|
-
|
671
|
+
def indepimage(id, caption=nil, metric=nil)
|
672
|
+
blank
|
673
|
+
begin
|
674
|
+
puts "◆→画像 #{@chapter.image(id).path.sub(/\A\.\//, "")} #{metric.join(" ")}←◆"
|
675
|
+
rescue
|
676
|
+
warn "no such image: #{id}"
|
677
|
+
puts "◆→画像 #{id}←◆"
|
678
|
+
end
|
679
|
+
puts "図 #{compile_inline(caption)}" if !caption.nil? && !caption.empty?
|
680
|
+
blank
|
498
681
|
end
|
499
682
|
|
683
|
+
alias :numberlessimage indepimage
|
684
|
+
|
500
685
|
def label(id)
|
501
686
|
# FIXME
|
502
687
|
""
|
@@ -511,61 +696,75 @@ module ReVIEW
|
|
511
696
|
# FIXME
|
512
697
|
end
|
513
698
|
|
699
|
+
def bpo(lines)
|
700
|
+
base_block "bpo", lines, nil
|
701
|
+
end
|
702
|
+
|
514
703
|
def inline_dtp(str)
|
515
704
|
# FIXME
|
516
705
|
""
|
517
706
|
end
|
518
707
|
|
708
|
+
def inline_code(str)
|
709
|
+
%Q[△#{str}☆]
|
710
|
+
end
|
711
|
+
|
519
712
|
def inline_br(str)
|
520
713
|
%Q(\n)
|
521
714
|
end
|
522
715
|
|
523
|
-
def
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
elsif str =~ /\A<([^\/].+)>(?:<title[^>]>(.+)<\/title>)?(.*)/
|
542
|
-
case $1
|
543
|
-
when "emlist": puts "◆→開始:インラインリスト←◆"
|
544
|
-
when "cmd": puts "◆→開始:コマンド←◆"
|
545
|
-
when "quote": puts "◆→開始:引用←◆"
|
546
|
-
when "flushright": puts "◆→開始:右寄せ←◆"
|
547
|
-
when "note": puts "◆→開始:ノート←◆"
|
548
|
-
when "important": puts "◆→開始:重要←◆"
|
549
|
-
when "term": puts "◆→開始:用語解説←◆"
|
550
|
-
when "notice": puts "◆→開始:注意←◆"
|
551
|
-
when "point": puts "◆→開始:ここがポイント←◆"
|
552
|
-
when "reference": puts "◆→開始:参考←◆"
|
553
|
-
when "practice": puts "◆→開始:練習問題←◆"
|
554
|
-
when "expert": puts "◆→開始:エキスパートに訊け←◆"
|
555
|
-
when "box": puts "◆→開始:書式←◆"
|
556
|
-
when "insn": puts "◆→開始:書式←◆"
|
716
|
+
def text(str)
|
717
|
+
str
|
718
|
+
end
|
719
|
+
|
720
|
+
def inline_chap(id)
|
721
|
+
#"「第#{super}章 #{inline_title(id)}」"
|
722
|
+
# "第#{super}章"
|
723
|
+
super
|
724
|
+
end
|
725
|
+
|
726
|
+
def inline_chapref(id)
|
727
|
+
chs = ["", "「", "」"]
|
728
|
+
unless ReVIEW.book.param["chapref"].nil?
|
729
|
+
_chs = NKF.nkf("-w", ReVIEW.book.param["chapref"]).split(",")
|
730
|
+
if _chs.size != 3
|
731
|
+
error "--chapsplitter must have exactly 3 parameters with comma."
|
732
|
+
else
|
733
|
+
chs = _chs
|
557
734
|
end
|
558
|
-
puts "■#{$2}" unless $2.nil?
|
559
|
-
print $3
|
560
735
|
else
|
561
|
-
puts str
|
562
736
|
end
|
737
|
+
"#{chs[0]}#{@chapter.env.chapter_index.number(id)}#{chs[1]}#{@chapter.env.chapter_index.title(id)}#{chs[2]}"
|
738
|
+
rescue KeyError
|
739
|
+
error "unknown chapter: #{id}"
|
740
|
+
nofunc_text("[UnknownChapter:#{id}]")
|
563
741
|
end
|
564
|
-
|
565
|
-
def
|
566
|
-
|
742
|
+
|
743
|
+
def source(lines, caption = nil)
|
744
|
+
base_block "source", lines, caption
|
567
745
|
end
|
568
|
-
|
746
|
+
|
747
|
+
def inline_ttibold(str)
|
748
|
+
"▲#{str}☆◆→等幅フォント太字イタ←◆"
|
749
|
+
end
|
750
|
+
|
751
|
+
def inline_labelref(idref)
|
752
|
+
%Q(「◆→#{idref}←◆」) # 節、項を参照
|
753
|
+
end
|
754
|
+
|
755
|
+
alias inline_ref inline_labelref
|
756
|
+
|
757
|
+
def inline_pageref(idref)
|
758
|
+
%Q(●ページ◆→#{idref}←◆) # ページ番号を参照
|
759
|
+
end
|
760
|
+
|
761
|
+
def circle_begin(level, label, caption)
|
762
|
+
puts "・\t#{caption}"
|
763
|
+
end
|
764
|
+
|
765
|
+
def circle_end(level)
|
766
|
+
end
|
767
|
+
|
569
768
|
def nofunc_text(str)
|
570
769
|
str
|
571
770
|
end
|