review 0.6.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.
Files changed (50) hide show
  1. data/COPYING +515 -0
  2. data/ChangeLog +1278 -0
  3. data/README.rdoc +21 -0
  4. data/Rakefile +42 -0
  5. data/VERSION +1 -0
  6. data/bin/review-check +190 -0
  7. data/bin/review-checkdep +63 -0
  8. data/bin/review-compile +165 -0
  9. data/bin/review-epubmaker +525 -0
  10. data/bin/review-index +108 -0
  11. data/bin/review-preproc +140 -0
  12. data/bin/review-validate +51 -0
  13. data/bin/review-vol +106 -0
  14. data/doc/format.re +486 -0
  15. data/doc/format.txt +434 -0
  16. data/doc/format_idg.txt +194 -0
  17. data/doc/format_sjis.txt +313 -0
  18. data/doc/sample.css +91 -0
  19. data/doc/sample.yaml +46 -0
  20. data/lib/lineinput.rb +155 -0
  21. data/lib/review/book.rb +580 -0
  22. data/lib/review/builder.rb +274 -0
  23. data/lib/review/compat.rb +22 -0
  24. data/lib/review/compiler.rb +483 -0
  25. data/lib/review/epubbuilder.rb +692 -0
  26. data/lib/review/ewbbuilder.rb +382 -0
  27. data/lib/review/exception.rb +21 -0
  28. data/lib/review/htmlbuilder.rb +370 -0
  29. data/lib/review/htmllayout.rb +19 -0
  30. data/lib/review/htmlutils.rb +27 -0
  31. data/lib/review/idgxmlbuilder.rb +1078 -0
  32. data/lib/review/index.rb +224 -0
  33. data/lib/review/latexbuilder.rb +420 -0
  34. data/lib/review/latexindex.rb +35 -0
  35. data/lib/review/latexutils.rb +52 -0
  36. data/lib/review/preprocessor.rb +520 -0
  37. data/lib/review/textutils.rb +19 -0
  38. data/lib/review/tocparser.rb +333 -0
  39. data/lib/review/tocprinter.rb +220 -0
  40. data/lib/review/topbuilder.rb +572 -0
  41. data/lib/review/unfold.rb +138 -0
  42. data/lib/review/volume.rb +66 -0
  43. data/lib/review.rb +4 -0
  44. data/review.gemspec +93 -0
  45. data/setup.rb +1587 -0
  46. data/test/test_epubbuilder.rb +73 -0
  47. data/test/test_helper.rb +2 -0
  48. data/test/test_htmlbuilder.rb +42 -0
  49. data/test/test_latexbuilder.rb +74 -0
  50. metadata +122 -0
@@ -0,0 +1,382 @@
1
+ # $Id: ewbbuilder.rb 2195 2005-11-13 21:52:18Z aamine $
2
+
3
+ require 'review/builder'
4
+ require 'review/textutils'
5
+ require 'review/exception'
6
+
7
+ module ReVIEW
8
+
9
+ class EWBBuilder < Builder
10
+
11
+ include TextUtils
12
+
13
+ def initialize(chap)
14
+ super
15
+ @footnote_buf = []
16
+ @index_buffer = []
17
+ end
18
+
19
+ def generate_index
20
+ @index_buffer.each_with_index do |str, n|
21
+ printf "%d\t%s\n", index_number(n + 1), str
22
+ end
23
+ end
24
+
25
+ def headline(level, caption)
26
+ puts unless level == 1
27
+ puts "//#{'i' * level} #{caption}"
28
+ puts
29
+ end
30
+
31
+ Compiler.defsyntax(:emlist, :block, 0..1) {|args|
32
+ if args[0] and not args[0] == 'noescape'
33
+ raise SyntaxError, "unknown //emlist option: #{args[0]}"
34
+ end
35
+ }
36
+
37
+ def emlist(lines, noescape = false)
38
+ firstline = f.lineno
39
+ puts
40
+ puts '//lst1{'
41
+ lines.each do |line|
42
+ if noescape
43
+ puts detab(line)
44
+ else
45
+ puts escape(detab(line))
46
+ end
47
+ end
48
+ puts '//}'
49
+ puts
50
+ end
51
+
52
+ Compiler.defsyntax(:cmd, :block, 0..1) {|args|
53
+ if args[0] and not args[0] == 'noescape'
54
+ raise SyntaxError, "unknown //cmd option: #{args[0]}"
55
+ end
56
+ }
57
+
58
+ def cmd(lines, noescape = false)
59
+ puts
60
+ puts '//sc1{'
61
+ lines.each do |line|
62
+ if noescape
63
+ puts detab(line)
64
+ elsif /\AC:.*?>(.+)/ =~ line # DOS prompt hack
65
+ prompt, cmd = *line.split('>', 2)
66
+ puts "#{escape(prompt)}>//command{#{escape(cmd)}}//}"
67
+ else
68
+ puts escape(detab(line))
69
+ end
70
+ end
71
+ puts '//}'
72
+ puts
73
+ end
74
+
75
+ Compiler.defsyntax(:list, :block, 0..1) {|args|
76
+ if args[0] and not args[0] == 'noescape'
77
+ raise SyntaxError, "unknown //list option: #{args[0]}"
78
+ end
79
+ }
80
+
81
+ def list(lines, noescape = false)
82
+ puts
83
+ puts "//l#{list_number(ident)} " + caption
84
+ puts '//lst2{'
85
+ lines.each do |line|
86
+ puts escape(detab(line))
87
+ end
88
+ puts '//}'
89
+ puts
90
+ end
91
+
92
+ def image_header(file, caption)
93
+ if /\.png\z/ =~ file and not FileTest.exist?('images/' + file)
94
+ warn "image file not exist: #{file}"
95
+ end
96
+ id = file.sub(/\.\w+\z/, '')
97
+ puts "//f#{figure_number(id)} #{text(caption)} file=#{file}" if id
98
+ end
99
+
100
+ def image_dummy
101
+ puts '//lst1{'
102
+ puts '---- dummy figure ----'
103
+ print dummy
104
+ puts '//}'
105
+ puts
106
+ end
107
+
108
+ def table
109
+ # %r<\A//table\[(\w+)\]>
110
+ spec = $1
111
+ buf = []
112
+ while line = f.gets
113
+ break if %r[\A//\}] === line
114
+ buf.push line.strip.split(/\t+/).map {|s| s == '.' ? '' : s }
115
+ end
116
+ table_type = 'tabm'
117
+ output.puts "//#{table_type}[" + spec + ']{'
118
+ buf.each_with_index do |col, idx|
119
+ if /----/ === col[0]
120
+ output.puts '//kb'
121
+ else
122
+ output.puts col.map {|s| text(s) }.join("\t")
123
+ end
124
+ end
125
+ output.puts '//}'
126
+ end
127
+
128
+ LI = '��'
129
+
130
+ def ul_begin
131
+ puts
132
+ puts '//k1{'
133
+ end
134
+
135
+ def ul_item(lines)
136
+ puts "#{LI}//|" + lines.join('')
137
+ end
138
+
139
+ def ul_end
140
+ puts '//}'
141
+ end
142
+
143
+ def ol_begin
144
+ output.puts
145
+ output.puts '//k2{'
146
+ end
147
+
148
+ def ol_item(num, lines)
149
+ print "#{num}//|' + lines.join('')
150
+ end
151
+
152
+ def ol_end
153
+ puts '//}'
154
+ end
155
+
156
+ def quote(lines)
157
+ puts '//c1{'
158
+ lines.each do |line|
159
+ puts text(line)
160
+ end
161
+ puts '//}'
162
+ end
163
+
164
+ def vspace
165
+ print "\n//h"
166
+ end
167
+
168
+ def noindent
169
+ @noindent = true
170
+ end
171
+
172
+ def refer(f)
173
+ puts
174
+ puts '//refer{'
175
+ cascade f
176
+ puts '//}'
177
+ end
178
+
179
+ def point(f)
180
+ puts
181
+ puts '//point{'
182
+ cascade f
183
+ puts '//}'
184
+ end
185
+
186
+ def note(f, caption)
187
+ puts
188
+ puts '//note{'
189
+ puts "//cg{#{caption}//}"
190
+ puts '//h'
191
+ cascade f
192
+ puts '//}'
193
+ end
194
+
195
+ def cascade(f)
196
+ # FIXME
197
+ end
198
+
199
+ Z_SPACE = "\241\241" # zen-kaku space in EUC-JP
200
+
201
+ def paragraph(lines)
202
+ if @noindent
203
+ @noindent = false
204
+ else
205
+ print Z_SPACE
206
+ end
207
+ prev = ''
208
+ lines.each do |line|
209
+ if /[a-zA-Z0-9]\z/ =~ prev and /\A[a-zA-Z0-9]/ =~ line
210
+ print ' '
211
+ end
212
+ print line
213
+ end
214
+ puts
215
+ end
216
+
217
+ def figure_filename(key)
218
+ if ext = key.slice(/\.\w+\z/)
219
+ base = key.sub(/\.\w+\z/, '')
220
+ else
221
+ base = key
222
+ ext = '.eps'
223
+ end
224
+ currname = "images/ch_#{chapter_id()}_#{base}#{ext}"
225
+ destname = "images/fig#{figure_number(base)}#{ext}"
226
+ unless File.exist? currname
227
+ # error "image file not exist: #{currname}"
228
+ end
229
+ destname
230
+ end
231
+
232
+ def image_label(str)
233
+ "#{chapter_id()}:#{str}"
234
+ end
235
+
236
+ def text(str)
237
+ str = str.gsub(/\t/, ' ')
238
+ str.gsub(/([^@^]+)|\^(.*?)\^|@<(\w+)>\{(.*?)\}|@\{(.*?)\}|([@^])/) {
239
+ if normal = $1
240
+ escape(normal)
241
+ elsif tt = $2
242
+ '//tt{' + escape(tt) + '//}'
243
+ elsif inline = $3
244
+ compile_inline(inline, $4)
245
+ elsif index = $5
246
+ error 'index not implemented'
247
+ text(index) + index_command(index)
248
+ elsif char = $6
249
+ escape(char)
250
+ else
251
+ error "unknown inline: #{str.inspect}"
252
+ end
253
+ }
254
+ rescue DocumentError => e
255
+ error e.message
256
+ return 'ERROR'
257
+ end
258
+
259
+ def inline_kw(arg)
260
+ word, eng, abbr = arg.split(/,/).map {|s| s.strip }
261
+ if abbr
262
+ add_index(word) + "//g{#{word}//}" +
263
+ add_index(abbr) + "��#{abbr}, " +
264
+ add_index(eng) + "#{eng}��"
265
+ elsif eng
266
+ add_index(word) + "//g{#{word}//}" +
267
+ add_index(eng) + "��#{eng}��"
268
+ else
269
+ add_index(word) + "//g{#{word}//}"
270
+ end
271
+ end
272
+
273
+ def inline_keytop(arg)
274
+ "//keytop{#{arg}//}"
275
+ end
276
+
277
+ def inline_chap(id)
278
+ chapter_number(arg)
279
+ end
280
+
281
+ def inline_chapref(id)
282
+ chapter_number(arg) + chapter_name(arg)
283
+ end
284
+
285
+ def inline_chapname(id)
286
+ chapter_name(arg)
287
+ end
288
+
289
+ def inline_list(arg)
290
+ '//l' + list_number(arg)
291
+ end
292
+
293
+ def inline_img(arg)
294
+ error "wrong image label: #{arg}" if /[^a-zA-Z\d\-]/ =~ arg
295
+ '//f' + figure_number(arg)
296
+ end
297
+
298
+ def inline_footnote(id)
299
+ '//ky' + footnote_number(id)
300
+ end
301
+
302
+ def inline_ruby(arg)
303
+ error 'wrong number of arg: @<ruby>' unless arg.count(',') == 1
304
+ "//ruby{#{arg}//}"
305
+ end
306
+
307
+ NAKAGURO = '��'
308
+
309
+ def inline_bou(str)
310
+ "//ruby{#{escape(str)},#{NAKAGURO * char_length(str)}//}"
311
+ end
312
+
313
+ def char_length(str)
314
+ str.gsub(/./, '.').length
315
+ end
316
+
317
+ def inline_em(str)
318
+ "//g{#{arg}//}"
319
+ end
320
+
321
+ def inline_math(arg)
322
+ "//LaTeX{ $#{arg}$ //}"
323
+ end
324
+
325
+
326
+ def chapter_id
327
+ File.basename(@filename, '.rd')
328
+ end
329
+
330
+ def chapter_prefix
331
+ sprintf('%02d', @chapter_table.number(chapter_id()))
332
+ end
333
+
334
+ def chapter_number( key )
335
+ curr = @chapter_table.number(chapter_id())
336
+ dest = @chapter_table.number(key)
337
+
338
+ case chapter_id()
339
+ when /\.ewb\z/, 'tmp', 'temp'
340
+ return '��' + dest + '��'
341
+ end
342
+ if dest == curr + 1
343
+ '����'
344
+ elsif dest == curr - 1
345
+ '����'
346
+ else
347
+ "��#{dest}��"
348
+ end
349
+ end
350
+
351
+ def chapter_name(key)
352
+ '��' + text(@chapter_table.title(key)) + '��'
353
+ end
354
+
355
+ def list_number(key)
356
+ sprintf(chapter_prefix() + '%02d0', @list_table.number(key))
357
+ end
358
+
359
+ def figure_number(key)
360
+ sprintf(chapter_prefix() + '%02d0', @figure_table.number(key))
361
+ end
362
+
363
+ def footnote_number(key)
364
+ sprintf('%02d', @footnote_index.number(key) * 5)
365
+ end
366
+
367
+ def add_index(str)
368
+ @index_buffer.push str
369
+ "//in#{index_number(@index_buffer.size)}"
370
+ end
371
+
372
+ def index_number(n)
373
+ 900000 + @chapter_index.number(chapter_id()) * 1000 + n
374
+ end
375
+
376
+ def escape(str)
377
+ str.gsub(%r<//>, '////')
378
+ end
379
+
380
+ end
381
+
382
+ end
@@ -0,0 +1,21 @@
1
+ #
2
+ # $Id: exception.rb 3881 2008-02-09 14:44:17Z aamine $
3
+ #
4
+ # Copyright (c) 2002-2007 Minero Aoki
5
+ #
6
+ # This program is free software.
7
+ # You can distribute or modify this program under the terms of
8
+ # the GNU LGPL, Lesser General Public License version 2.1.
9
+ # For details of the GNU LGPL, see the file "COPYING".
10
+ #
11
+
12
+ module ReVIEW
13
+
14
+ class Error < ::StandardError; end
15
+ class ApplicationError < Error; end
16
+ class ConfigError < ApplicationError; end
17
+ class CompileError < ApplicationError; end
18
+ class SyntaxError < CompileError; end
19
+ class FileNotFound < ApplicationError; end
20
+
21
+ end
@@ -0,0 +1,370 @@
1
+ # $Id: htmlbuilder.rb 4268 2009-05-27 04:17:08Z kmuto $
2
+ #
3
+ # Copyright (c) 2002-2007 Minero Aoki
4
+ # 2008-2009 Minero Aoki, Kenshi Muto
5
+ #
6
+ # This program is free software.
7
+ # You can distribute or modify this program under the terms of
8
+ # the GNU LGPL, Lesser General Public License version 2.1.
9
+ #
10
+
11
+ require 'review/builder'
12
+ require 'review/htmlutils'
13
+ require 'review/htmllayout'
14
+ require 'review/textutils'
15
+
16
+ module ReVIEW
17
+
18
+ class HTMLBuilder < Builder
19
+
20
+ include TextUtils
21
+ include HTMLUtils
22
+
23
+ def extname
24
+ '.html'
25
+ end
26
+
27
+ def builder_init(no_error = false)
28
+ @no_error = no_error
29
+ end
30
+ private :builder_init
31
+
32
+ def builder_init_file
33
+ @warns = []
34
+ @errors = []
35
+ end
36
+ private :builder_init_file
37
+
38
+ def result
39
+ layout_file = File.join(@book.basedir, "layouts", "layout.erb")
40
+ if File.exists?(layout_file)
41
+ messages() +
42
+ HTMLLayout.new(@output.string, @chapter.title, layout_file).result
43
+ else
44
+ messages() + @output.string
45
+ end
46
+ end
47
+
48
+ def warn(msg)
49
+ if @no_error
50
+ @warns.push [@location.filename, @location.lineno, msg]
51
+ puts "----WARNING: #{escape_html(msg)}----"
52
+ else
53
+ $stderr.puts "#{@location}: warning: #{msg}"
54
+ end
55
+ end
56
+
57
+ def error(msg)
58
+ if @no_error
59
+ @errors.push [@location.filename, @location.lineno, msg]
60
+ puts "----ERROR: #{escape_html(msg)}----"
61
+ else
62
+ $stderr.puts "#{@location}: error: #{msg}"
63
+ end
64
+ end
65
+
66
+ def messages
67
+ error_messages() + warning_messages()
68
+ end
69
+
70
+ def error_messages
71
+ return '' if @errors.empty?
72
+ "<h2>Syntax Errors</h2>\n" +
73
+ "<ul>\n" +
74
+ @errors.map {|file, line, msg|
75
+ "<li>#{escape_html(file)}:#{line}: #{escape_html(msg.to_s)}</li>\n"
76
+ }.join('') +
77
+ "</ul>\n"
78
+ end
79
+
80
+ def warning_messages
81
+ return '' if @warns.empty?
82
+ "<h2>Warnings</h2>\n" +
83
+ "<ul>\n" +
84
+ @warns.map {|file, line, msg|
85
+ "<li>#{escape_html(file)}:#{line}: #{escape_html(msg)}</li>\n"
86
+ }.join('') +
87
+ "</ul>\n"
88
+ end
89
+
90
+ def headline(level, label, caption)
91
+ puts '' if level > 1
92
+ if label.nil?
93
+ puts "<h#{level}>#{escape_html(caption)}</h#{level}>"
94
+ else
95
+ puts "<h#{level} id='#{label}'>#{escape_html(caption)}</h#{level}>"
96
+ end
97
+ end
98
+
99
+ def column_begin(level, label, caption)
100
+ puts "<div class='column'>"
101
+ headline(level, label, caption) # FIXME
102
+ end
103
+
104
+ def column_end(level)
105
+ puts '</div>'
106
+ end
107
+
108
+ def ul_begin
109
+ puts '<ul>'
110
+ end
111
+
112
+ def ul_item(lines)
113
+ puts "<li>#{lines.join("\n")}</li>"
114
+ end
115
+
116
+ def ul_end
117
+ puts '</ul>'
118
+ end
119
+
120
+ def ol_begin
121
+ puts '<ol>'
122
+ end
123
+
124
+ def ol_item(lines, num)
125
+ puts "<li>#{lines.join("\n")}</li>"
126
+ end
127
+
128
+ def ol_end
129
+ puts '</ol>'
130
+ end
131
+
132
+ def dl_begin
133
+ puts '<dl>'
134
+ end
135
+
136
+ def dt(line)
137
+ puts "<dt>#{line}</dt>"
138
+ end
139
+
140
+ def dd(lines)
141
+ puts "<dd>#{lines.join("\n")}</dd>"
142
+ end
143
+
144
+ def dl_end
145
+ puts '</dl>'
146
+ end
147
+
148
+ def paragraph(lines)
149
+ puts "<p>#{lines.join("")}</p>"
150
+ end
151
+
152
+ def parasep()
153
+ puts '<br />'
154
+ end
155
+
156
+ def read(lines)
157
+ puts %Q[<p class="lead">\n#{lines.join("\n")}\n</p>]
158
+ end
159
+
160
+ def lead(lines)
161
+ read(lines)
162
+ end
163
+
164
+ def list_header(id, caption)
165
+ puts %Q[<p class="toplabel">リスト#{@chapter.list(id).number}: #{escape_html(caption)}</p>]
166
+ end
167
+
168
+ def list_body(lines)
169
+ puts '<div class="caption-code">'
170
+ puts '<pre class="list">'
171
+ lines.each do |line|
172
+ puts detab(line)
173
+ end
174
+ puts '</pre>'
175
+ puts '</div>'
176
+ end
177
+
178
+ def source_header(caption)
179
+ puts %Q[<p class="toplabel">▼#{escape_html(caption)}</p>]
180
+ end
181
+
182
+ def source_body(lines)
183
+ puts '<div class="caption-code">'
184
+ puts '<pre class="source">'
185
+ lines.each do |line|
186
+ puts detab(line)
187
+ end
188
+ puts '</pre>'
189
+ puts '</div>'
190
+ end
191
+
192
+ def listnum_body(lines)
193
+ puts '<div class="code">'
194
+ puts '<pre class="list">'
195
+ lines.each_with_index do |line, i|
196
+ puts detab((i+1).to_s.rjust(2) + ": " + line)
197
+ end
198
+ puts '</pre>'
199
+ puts '</div>'
200
+ end
201
+
202
+ def emlist(lines)
203
+ puts '<div class="code">'
204
+ puts '<pre class="emlist">'
205
+ lines.each do |line|
206
+ puts detab(line)
207
+ end
208
+ puts '</pre>'
209
+ puts '</div>'
210
+ end
211
+
212
+ def emlistnum(lines)
213
+ puts '<div class="code">'
214
+ puts '<pre class="emlist">'
215
+ lines.each_with_index do |line, i|
216
+ puts detab((i+1).to_s.rjust(2) + ": " + line)
217
+ end
218
+ puts '</pre>'
219
+ puts '</div>'
220
+ end
221
+
222
+ def cmd(lines)
223
+ puts '<div class="code">'
224
+ puts '<pre class="cmd">'
225
+ lines.each do |line|
226
+ puts detab(line)
227
+ end
228
+ puts '</pre>'
229
+ puts '</div>'
230
+ end
231
+
232
+ def quotedlist(lines, css_class)
233
+ puts %Q[<blockquote><pre class="#{css_class}">]
234
+ lines.each do |line|
235
+ puts detab(line)
236
+ end
237
+ puts '</pre></blockquote>'
238
+ end
239
+ private :quotedlist
240
+
241
+ def quote(lines)
242
+ puts "<blockquote>#{lines.join("\n")}</blockquote>"
243
+ end
244
+
245
+ def image_image(id, metric, caption)
246
+ puts %Q[<p class="image">]
247
+ puts %Q[<img src="#{@chapter.image(id).path}" alt="(#{escape_html(caption)})">]
248
+ puts %Q[</p>]
249
+ image_header id, caption
250
+ end
251
+
252
+ def image_dummy(id, caption, lines)
253
+ puts %Q[<pre class="dummyimage">]
254
+ lines.each do |line|
255
+ puts detab(line)
256
+ end
257
+ puts %Q[</pre>]
258
+ image_header id, caption
259
+ end
260
+
261
+ def image_header(id, caption)
262
+ puts %Q[<p class="botlabel">]
263
+ puts %Q[図#{@chapter.image(id).number}: #{escape_html(caption)}]
264
+ puts %Q[</p>]
265
+ end
266
+
267
+ def table_header(id, caption)
268
+ puts %Q[<p class="toplabel">表#{@chapter.table(id).number}: #{escape_html(caption)}</p>]
269
+ end
270
+
271
+ def table_begin(ncols)
272
+ puts '<table>'
273
+ end
274
+
275
+ def tr(rows)
276
+ puts "<tr>#{rows.join('')}</tr>"
277
+ end
278
+
279
+ def th(str)
280
+ "<th>#{str}</th>"
281
+ end
282
+
283
+ def td(str)
284
+ "<td>#{str}</td>"
285
+ end
286
+
287
+ def table_end
288
+ puts '</table>'
289
+ end
290
+
291
+ def comment(str)
292
+ puts %Q(<p class="comment">[Comment] #{escape_html(str)}</p>)
293
+ end
294
+
295
+ def footnote(id, str)
296
+ puts %Q(<p class="comment"><a name="fn-#{id}">#{escape_html(str)}</a></p>)
297
+ end
298
+
299
+ def inline_fn(id)
300
+ %Q(<a href="\#fn-#{id}">*#{@chapter.footnote(id).number}</a>)
301
+ end
302
+
303
+ def compile_ruby(base, ruby)
304
+ escape_html(base) # tmp
305
+ end
306
+
307
+ def compile_kw(word, alt)
308
+ '<span class="kw">' +
309
+ if alt
310
+ #then escape_html(word + sprintf(@locale[:parens], alt.strip))
311
+ then escape_html(word + " (#{alt.strip})")
312
+ else escape_html(word)
313
+ end +
314
+ '</span>'
315
+ end
316
+
317
+ def inline_i(str)
318
+ %Q(<i>#{escape_html(str)}</i>)
319
+ end
320
+
321
+ def inline_b(str)
322
+ %Q(<b>#{escape_html(str)}</b>)
323
+ end
324
+
325
+ def inline_ami(str)
326
+ escape_html(str) # tmp
327
+ end
328
+
329
+ def inline_dtp(arg)
330
+ # ignore all
331
+ ''
332
+ end
333
+
334
+ def inline_code(str)
335
+ %Q(<span class="inline-code">#{str}</span>)
336
+ end
337
+
338
+ def text(str)
339
+ str
340
+ end
341
+
342
+ def bibpaper_header(id, caption)
343
+ puts %Q(<a name="bib-#{id}">)
344
+ puts "[#{@chapter.bibpaper(id).number}] #{caption}"
345
+ puts %Q(</a>)
346
+ end
347
+
348
+ def bibpaper_bibpaper(id, caption, lines)
349
+ puts %Q(<p>)
350
+ lines.each do |line|
351
+ puts detab(line)
352
+ end
353
+ puts %Q(</p>)
354
+ end
355
+
356
+ def inline_bib(id)
357
+ %Q(<a href=".#{@book.bib_file.gsub(/re$/, "html")}\#bib-#{id}">[#{@chapter.bibpaper(id).number}]</a>)
358
+ end
359
+
360
+ def inline_raw(str)
361
+ escape_html(str)
362
+ end
363
+
364
+ def nofunc_text(str)
365
+ escape_html(str)
366
+ end
367
+
368
+ end
369
+
370
+ end # module ReVIEW