review 1.7.2 → 2.0.0.beta1

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 (101) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -43
  3. data/.travis.yml +0 -9
  4. data/ChangeLog +0 -16
  5. data/Gemfile +1 -0
  6. data/README.rdoc +1 -1
  7. data/Rakefile +12 -1
  8. data/bin/review-check +21 -8
  9. data/bin/review-compile +15 -9
  10. data/bin/review-epubmaker-legacy +6 -6
  11. data/bin/review-index +13 -2
  12. data/bin/review-init +18 -12
  13. data/bin/review-preproc +14 -1
  14. data/bin/review-validate +1 -1
  15. data/bin/review-vol +13 -1
  16. data/doc/quickstart.ja.md +1 -1
  17. data/doc/quickstart.md +1 -1
  18. data/lib/epubmaker/content.rb +3 -3
  19. data/lib/epubmaker/epubcommon.rb +108 -91
  20. data/lib/epubmaker/epubv2.rb +67 -14
  21. data/lib/epubmaker/epubv3.rb +59 -25
  22. data/lib/epubmaker/producer.rb +1 -13
  23. data/lib/lineinput.rb +0 -48
  24. data/lib/review/book/base.rb +4 -12
  25. data/lib/review/book/compilable.rb +3 -1
  26. data/lib/review/book/index.rb +4 -4
  27. data/lib/review/builder.rb +54 -47
  28. data/lib/review/compiler.rb +4662 -326
  29. data/lib/review/compiler/literals_1_8.kpeg +19 -0
  30. data/lib/review/compiler/literals_1_8.rb +432 -0
  31. data/lib/review/compiler/literals_1_9.kpeg +22 -0
  32. data/lib/review/compiler/literals_1_9.rb +435 -0
  33. data/lib/review/configure.rb +8 -20
  34. data/lib/review/epubbuilder.rb +1 -1
  35. data/lib/review/epubmaker.rb +122 -52
  36. data/lib/review/ewbbuilder.rb +4 -4
  37. data/lib/review/exception.rb +1 -1
  38. data/lib/review/extentions.rb +1 -0
  39. data/lib/review/extentions/array.rb +25 -0
  40. data/lib/review/htmlbuilder.rb +286 -275
  41. data/lib/review/htmllayout.rb +0 -2
  42. data/lib/review/htmlutils.rb +4 -4
  43. data/lib/review/i18n.rb +2 -6
  44. data/lib/review/i18n.yml +1 -1
  45. data/lib/review/idgxmlbuilder.rb +239 -204
  46. data/lib/review/inaobuilder.rb +75 -73
  47. data/lib/review/latexbuilder.rb +265 -219
  48. data/lib/review/latexutils.rb +6 -6
  49. data/lib/review/layout.tex.erb +1 -1
  50. data/lib/review/location.rb +24 -0
  51. data/lib/review/markdownbuilder.rb +124 -79
  52. data/lib/review/node.rb +267 -0
  53. data/lib/review/pdfmaker.rb +92 -92
  54. data/lib/review/preprocessor.rb +51 -14
  55. data/lib/review/review.kpeg +724 -0
  56. data/lib/review/textbuilder.rb +1 -1
  57. data/lib/review/textutils.rb +24 -18
  58. data/lib/review/tocparser.rb +3 -3
  59. data/lib/review/tocprinter.rb +31 -8
  60. data/lib/review/topbuilder.rb +119 -111
  61. data/lib/review/unfold.rb +2 -2
  62. data/lib/review/version.rb +1 -1
  63. data/review.gemspec +2 -2
  64. data/rubocop-todo.yml +456 -0
  65. data/test/assets/test_template.tex +1 -1
  66. data/test/sample-book/src/config.yml +0 -1
  67. data/test/test.re +1 -1
  68. data/test/test_book.rb +4 -4
  69. data/test/test_book_chapter.rb +70 -0
  70. data/test/test_book_part.rb +1 -1
  71. data/test/test_builder.rb +6 -28
  72. data/test/test_compiler.rb +59 -14
  73. data/test/test_helper.rb +47 -4
  74. data/test/test_htmlbuilder.rb +104 -73
  75. data/test/test_i18n.rb +5 -3
  76. data/test/test_idgxmlbuilder.rb +5 -2
  77. data/test/test_inaobuilder.rb +4 -2
  78. data/test/test_latexbuilder.rb +18 -37
  79. data/test/test_lineinput.rb +25 -4
  80. data/test/test_markdownbuilder.rb +4 -22
  81. data/test/test_pdfmaker.rb +12 -11
  82. data/test/test_textutils.rb +0 -36
  83. data/test/test_topbuilder.rb +2 -0
  84. metadata +14 -28
  85. data/.rubocop_todo.yml +0 -605
  86. data/Dockerfile +0 -22
  87. data/doc/NEWS.ja.md +0 -362
  88. data/doc/NEWS.md +0 -366
  89. data/lib/review/htmltoc.rb +0 -45
  90. data/lib/review/template.rb +0 -21
  91. data/templates/html/layout-html5.html.erb +0 -17
  92. data/templates/html/layout-xhtml1.html.erb +0 -20
  93. data/templates/ncx/epubv2.ncx.erb +0 -11
  94. data/templates/opf/epubv2.opf.erb +0 -21
  95. data/templates/opf/epubv3.opf.erb +0 -18
  96. data/templates/xml/container.xml.erb +0 -6
  97. data/test/assets/test.xml.erb +0 -3
  98. data/test/sample-book/src/config-epub2.yml +0 -186
  99. data/test/test_configure.rb +0 -50
  100. data/test/test_htmltoc.rb +0 -32
  101. data/test/test_template.rb +0 -26
@@ -22,13 +22,23 @@ module EPUBMaker
22
22
 
23
23
  # Return opf file content.
24
24
  def opf
25
- @opf_metainfo = opf_metainfo
26
- @opf_manifest = opf_manifest
27
- @opf_toc = opf_tocx
25
+ s = <<EOT
26
+ <?xml version="1.0" encoding="UTF-8"?>
27
+ <package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="#{@producer.params["language"]}">
28
+ <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
29
+ EOT
30
+
31
+ s << opf_metainfo
32
+
33
+ s << %Q[ </metadata>\n]
34
+
35
+ s << opf_manifest
36
+ s << opf_tocx
37
+ s << opf_guide # same as ePUB2
28
38
 
29
- tmplfile = File.expand_path('./opf/epubv3.opf.erb', ReVIEW::Template::TEMPLATE_DIR)
30
- tmpl = ReVIEW::Template.load(tmplfile)
31
- return tmpl.result(binding)
39
+ s << %Q[</package>\n]
40
+
41
+ s
32
42
  end
33
43
 
34
44
  def opf_metainfo
@@ -145,11 +155,7 @@ EOT
145
155
  end
146
156
 
147
157
  s = ""
148
- if @producer.params["direction"]
149
- s << %Q[ <spine page-progression-direction="#{@producer.params["direction"]}">\n]
150
- else
151
- s << %Q[ <spine>\n]
152
- end
158
+ s << %Q[ <spine>\n]
153
159
  s << %Q[ <itemref idref="#{@producer.params["bookname"]}" linear="#{cover_linear}"/>\n]
154
160
  s << %Q[ <itemref idref="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}" />\n] if @producer.params["toc"]
155
161
 
@@ -162,25 +168,38 @@ EOT
162
168
  s
163
169
  end
164
170
 
165
- def ncx(indentarray)
166
- if @producer.params["epubmaker"]["flattoc"].nil?
167
- ncx_main = hierarchy_ncx("ol")
168
- else
169
- ncx_main = flat_ncx("ol", @producer.params["epubmaker"]["flattocindent"])
170
- end
171
+ def opf_guide
172
+ s = ""
173
+ s << %Q[ <guide>\n]
174
+ s << %Q[ <reference type="cover" title="#{@producer.res.v("covertitle")}" href="#{@producer.params["cover"]}"/>\n]
175
+ s << %Q[ <reference type="title-page" title="#{@producer.res.v("titlepagetitle")}" href="titlepage.#{@producer.params["htmlext"]}"/>\n] unless @producer.params["titlepage"].nil?
176
+ s << %Q[ <reference type="toc" title="#{@producer.res.v("toctitle")}" href="#{@producer.params["bookname"]}-toc.#{@producer.params["htmlext"]}"/>\n]
177
+ s << %Q[ <reference type="colophon" title="#{@producer.res.v("colophontitle")}" href="colophon.#{@producer.params["htmlext"]}"/>\n] unless @producer.params["colophon"].nil?
178
+ s << %Q[ </guide>\n]
179
+ s
180
+ end
171
181
 
172
- @body = <<EOT
182
+ def ncx(indentarray)
183
+ s = common_header
184
+ s << <<EOT
185
+ <title>#{@producer.res.v("toctitle")}</title>
186
+ </head>
187
+ <body>
173
188
  <nav xmlns:epub="http://www.idpf.org/2007/ops" epub:type="toc" id="toc">
174
189
  <h1 class="toc-title">#{@producer.res.v("toctitle")}</h1>
175
- #{ncx_main} </nav>
176
190
  EOT
177
191
 
178
- @title = @producer.res.v("toctitle")
179
- @language = @producer.params['language']
180
- @stylesheets = @producer.params["stylesheet"]
181
- tmplfile = File.expand_path('./html/layout-html5.html.erb', ReVIEW::Template::TEMPLATE_DIR)
182
- tmpl = ReVIEW::Template.load(tmplfile)
183
- return tmpl.result(binding)
192
+ if @producer.params["epubmaker"]["flattoc"].nil?
193
+ s << hierarchy_ncx("ol")
194
+ else
195
+ s << flat_ncx("ol", @producer.params["epubmaker"]["flattocindent"])
196
+ end
197
+ s << <<EOT
198
+ </nav>
199
+ </body>
200
+ </html>
201
+ EOT
202
+ s
184
203
  end
185
204
 
186
205
  # Produce EPUB file +epubfile+.
@@ -218,5 +237,20 @@ EOT
218
237
  s
219
238
  end
220
239
 
240
+ def common_header
241
+ s =<<EOT
242
+ <?xml version="1.0" encoding="UTF-8"?>
243
+ <!DOCTYPE html>
244
+ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="#{@producer.params["language"]}">
245
+ <head>
246
+ <meta charset="UTF-8" />
247
+ <meta name="generator" content="Re:VIEW" />
248
+ EOT
249
+
250
+ @producer.params["stylesheet"].each do |file|
251
+ s << %Q[ <link rel="stylesheet" type="text/css" href="#{file}"/>\n]
252
+ end
253
+ s
254
+ end
221
255
  end
222
256
  end
@@ -54,18 +54,6 @@ module EPUBMaker
54
54
  end
55
55
  end
56
56
 
57
- def coverimage
58
- if !params["coverimage"]
59
- return nil
60
- end
61
- @contents.each do |item|
62
- if item.media =~ /\Aimage/ && item.file =~ /#{params["coverimage"]}\Z/ # /
63
- return item.file
64
- end
65
- end
66
- return nil
67
- end
68
-
69
57
  # Update parameters by merging from new parameter hash +params+.
70
58
  def merge_params(params)
71
59
  @params = @params.merge(params)
@@ -280,7 +268,7 @@ module EPUBMaker
280
268
  end
281
269
  end
282
270
 
283
- @params["htmlversion"] = 5 if @params["epubversion"] >= 3
271
+ @params["htmlversion"] == 5 if @params["epubversion"] >= 3
284
272
 
285
273
  %w[bookname title].each do |k|
286
274
  raise "Key #{k} must have a value. Abort." if @params[k].nil?
data/lib/lineinput.rb CHANGED
@@ -48,46 +48,6 @@ class LineInput
48
48
  line
49
49
  end
50
50
 
51
- def peek
52
- line = gets()
53
- ungets line if line
54
- line
55
- end
56
-
57
- def next?
58
- peek() ? true : false
59
- end
60
-
61
- def skip_blank_lines
62
- n = 0
63
- while line = gets()
64
- unless line.strip.empty?
65
- ungets line
66
- return n
67
- end
68
- n += 1
69
- end
70
- n
71
- end
72
-
73
- def gets_if(re)
74
- line = gets()
75
- if not line or not (re =~ line)
76
- ungets line
77
- return nil
78
- end
79
- line
80
- end
81
-
82
- def gets_unless(re)
83
- line = gets()
84
- if not line or re =~ line
85
- ungets line
86
- return nil
87
- end
88
- line
89
- end
90
-
91
51
  def each
92
52
  while line = gets()
93
53
  yield line
@@ -144,12 +104,4 @@ class LineInput
144
104
  nil
145
105
  end
146
106
 
147
- def getblock(term_re)
148
- buf = []
149
- until_terminator(term_re) do |line|
150
- buf.push line
151
- end
152
- buf
153
- end
154
-
155
107
  end
@@ -84,14 +84,6 @@ module ReVIEW
84
84
  end
85
85
  end
86
86
 
87
- def htmlversion
88
- if config["htmlversion"].blank?
89
- nil
90
- else
91
- config["htmlversion"].to_i
92
- end
93
- end
94
-
95
87
  def parts
96
88
  @parts ||= read_parts()
97
89
  end
@@ -119,7 +111,7 @@ module ReVIEW
119
111
  end
120
112
 
121
113
  def each_chapter_r(&block)
122
- chapters.reverse_each(&block)
114
+ chapters.reverse.each(&block)
123
115
  end
124
116
 
125
117
  def chapter_index
@@ -225,12 +217,12 @@ module ReVIEW
225
217
  end
226
218
 
227
219
  def read_PART
228
- return @read_part if @read_part
220
+ return @read_PART if @read_PART
229
221
 
230
222
  if catalog
231
- @read_part = catalog.parts
223
+ @read_PART = catalog.parts
232
224
  else
233
- @read_part = File.read("#{@basedir}/#{config["part_file"]}")
225
+ @read_PART = File.read("#{@basedir}/#{config["part_file"]}")
234
226
  end
235
227
  end
236
228
 
@@ -44,6 +44,7 @@ module ReVIEW
44
44
  @title = ''
45
45
  open {|f|
46
46
  f.each_line {|l|
47
+ l = convert_inencoding(l, book.config["inencoding"])
47
48
  if l =~ /\A=+/
48
49
  @title = l.sub(/\A=+(\[.+?\])?(\{.+?\})?/, '').strip
49
50
  break
@@ -73,7 +74,8 @@ module ReVIEW
73
74
  attr_writer :content
74
75
 
75
76
  def content
76
- @content = File.read(path())
77
+ @content = convert_inencoding(File.read(path()),
78
+ book.config["inencoding"])
77
79
  rescue
78
80
  @content
79
81
  end
@@ -58,7 +58,7 @@ module ReVIEW
58
58
  @index.fetch(id)
59
59
  rescue
60
60
  if @index.keys.map{|i| i.split(/\|/).last }.flatten. # unfold all ids
61
- reduce(Hash.new(0)){|h, i| h[i] += 1; h}. # number of occurrences
61
+ reduce(Hash.new(0)){|h, i| h[i] += 1; h}. # number of occurrences
62
62
  select{|k, v| k == id && v > 1 }.present? # detect duplicated
63
63
  raise KeyError, "key '#{id}' is ambiguous for #{self.class}"
64
64
  end
@@ -172,7 +172,7 @@ module ReVIEW
172
172
  attr_reader :id
173
173
  attr_reader :number
174
174
  attr_reader :caption
175
- attr_writer :index # internal use only
175
+ attr_writer :index # internal use only
176
176
 
177
177
  def bound?
178
178
  path
@@ -245,12 +245,12 @@ module ReVIEW
245
245
  end
246
246
 
247
247
  def title(id)
248
- sprintf(@locale["#{@index.item_type}_caption_format".to_sym],
248
+ sprintf(@locale["#{@index.item_type}_caption_format".intern],
249
249
  @index.title(id))
250
250
  end
251
251
 
252
252
  def number(id)
253
- sprintf(@locale["#{@index.item_type}_number_format".to_sym],
253
+ sprintf(@locale["#{@index.item_type}_number_format".intern],
254
254
  @index.number(id))
255
255
  end
256
256
 
@@ -22,6 +22,9 @@ module ReVIEW
22
22
 
23
23
  CAPTION_TITLES = %w(note memo tip info planning best important security caution term link notice point shoot reference practice expert)
24
24
 
25
+ attr_accessor :output
26
+ attr_accessor :ast
27
+
25
28
  def pre_paragraph
26
29
  nil
27
30
  end
@@ -42,6 +45,7 @@ module ReVIEW
42
45
  @compiler = compiler
43
46
  @chapter = chapter
44
47
  @location = location
48
+ @ast = nil
45
49
  @output = StringIO.new
46
50
  @book = @chapter.book if @chapter.present?
47
51
  @tabwidth = nil
@@ -63,11 +67,11 @@ module ReVIEW
63
67
  alias_method :raw_result, :result
64
68
 
65
69
  def print(*s)
66
- @output.print(*s)
70
+ raise NotImplementedError, "XXX: `print` method is obsoleted. Do not use it."
67
71
  end
68
72
 
69
73
  def puts(*s)
70
- @output.puts(*s)
74
+ raise NotImplementedError, "XXX: `puts` method is obsoleted. Do not use it."
71
75
  end
72
76
 
73
77
  def target_name
@@ -82,27 +86,33 @@ module ReVIEW
82
86
  end
83
87
  private :headline_prefix
84
88
 
85
- def list(lines, id, caption, lang = nil)
89
+ def list(lines, id, caption = nil, lang = nil)
90
+ buf = ""
86
91
  begin
87
- list_header id, caption, lang
92
+ buf << list_header(id, caption, lang)
88
93
  rescue KeyError
89
94
  error "no such list: #{id}"
90
95
  end
91
- list_body id, lines, lang
96
+ buf << list_body(id, lines, lang)
97
+ buf
92
98
  end
93
99
 
94
- def listnum(lines, id, caption, lang = nil)
100
+ def listnum(lines, id, caption = nil, lang = nil)
101
+ buf = ""
95
102
  begin
96
- list_header id, caption, lang
103
+ buf << list_header(id, caption, lang)
97
104
  rescue KeyError
98
105
  error "no such list: #{id}"
99
106
  end
100
- listnum_body lines, lang
107
+ buf << listnum_body(lines, lang)
108
+ buf
101
109
  end
102
110
 
103
- def source(lines, caption, lang = nil)
104
- source_header caption
105
- source_body lines, lang
111
+ def source(lines, caption = nil)
112
+ buf = ""
113
+ buf << source_header(caption)
114
+ buf << source_body(lines)
115
+ buf
106
116
  end
107
117
 
108
118
  def image(lines, id, caption, metric = nil)
@@ -115,6 +125,7 @@ module ReVIEW
115
125
  end
116
126
 
117
127
  def table(lines, id = nil, caption = nil)
128
+ buf = ""
118
129
  rows = []
119
130
  sepidx = nil
120
131
  lines.each_with_index do |line, idx|
@@ -129,26 +140,27 @@ module ReVIEW
129
140
  rows = adjust_n_cols(rows)
130
141
 
131
142
  begin
132
- table_header id, caption unless caption.nil?
143
+ buf << table_header(id, caption) unless caption.nil?
133
144
  rescue KeyError
134
145
  error "no such table: #{id}"
135
146
  end
136
- return if rows.empty?
137
- table_begin rows.first.size
147
+ return buf if rows.empty?
148
+ buf << table_begin(rows.first.size)
138
149
  if sepidx
139
150
  sepidx.times do
140
- tr rows.shift.map {|s| th(s) }
151
+ buf << tr(rows.shift.map {|s| th(s) })
141
152
  end
142
153
  rows.each do |cols|
143
- tr cols.map {|s| td(s) }
154
+ buf << tr(cols.map {|s| td(s) })
144
155
  end
145
156
  else
146
157
  rows.each do |cols|
147
158
  h, *cs = *cols
148
- tr [th(h)] + cs.map {|s| td(s) }
159
+ buf << tr([th(h)] + cs.map {|s| td(s) })
149
160
  end
150
161
  end
151
- table_end
162
+ buf << table_end
163
+ buf
152
164
  end
153
165
 
154
166
  def adjust_n_cols(rows)
@@ -177,12 +189,12 @@ module ReVIEW
177
189
  # footnote_end
178
190
  #end
179
191
 
180
- def compile_inline(s)
181
- @compiler.text(s)
182
- end
192
+ # def compile_inline(s)
193
+ # @compiler.text(s)
194
+ # end
183
195
 
184
196
  def inline_chapref(id)
185
- compile_inline @book.chapter_index.display_string(id)
197
+ @book.chapter_index.display_string(id)
186
198
  rescue KeyError
187
199
  error "unknown chapter: #{id}"
188
200
  nofunc_text("[UnknownChapter:#{id}]")
@@ -244,22 +256,17 @@ module ReVIEW
244
256
  text(str)
245
257
  end
246
258
 
247
- def inline_ruby(arg)
248
- base, *ruby = *arg.scan(/(?:(?:(?:\\\\)*\\,)|[^,\\]+)+/)
249
- base = base.gsub(/\\,/, ",") if base
250
- ruby = ruby.join(",").gsub(/\\,/, ",") if ruby
259
+ def inline_ruby(base, ruby)
251
260
  compile_ruby(base, ruby)
252
261
  end
253
262
 
254
- def inline_kw(arg)
255
- word, alt = *arg.split(',', 2)
263
+ def inline_kw(word, alt = nil)
256
264
  compile_kw(word, alt)
257
265
  end
258
266
 
259
- def inline_href(arg)
260
- url, label = *arg.scan(/(?:(?:(?:\\\\)*\\,)|[^,\\]+)+/).map(&:lstrip)
261
- url = url.gsub(/\\,/, ",").strip
262
- label = label.gsub(/\\,/, ",").strip if label
267
+ def inline_href(url, label = nil)
268
+ url = url.strip
269
+ label = label.strip if label
263
270
  compile_href(url, label)
264
271
  end
265
272
 
@@ -268,15 +275,18 @@ module ReVIEW
268
275
  end
269
276
 
270
277
  def bibpaper(lines, id, caption)
271
- bibpaper_header id, caption
278
+ buf = ""
279
+ buf << bibpaper_header(id, caption)
272
280
  unless lines.empty?
273
- puts ""
274
- bibpaper_bibpaper id, caption, lines
281
+ buf << "\n"
282
+ buf << bibpaper_bibpaper(id, caption, lines)
275
283
  end
276
- puts ""
284
+ buf << "\n"
285
+ buf
277
286
  end
278
287
 
279
- def inline_hd(id)
288
+ def node_inline_hd(nodelist)
289
+ id = nodelist[0].to_raw
280
290
  m = /\A([^|]+)\|(.+)/.match(id)
281
291
  chapter = @book.chapters.detect{|chap| chap.id == m[1]} if m && m[1]
282
292
  return inline_hd_chap(chapter, m[2]) if chapter
@@ -295,12 +305,12 @@ module ReVIEW
295
305
  builders = matched[1].split(/,/).map{|i| i.gsub(/\s/, '') }
296
306
  c = target_name
297
307
  if builders.include?(c)
298
- print matched[2].gsub("\\n", "\n")
308
+ matched[2].gsub("\\n", "\n")
299
309
  else
300
310
  ""
301
311
  end
302
312
  else
303
- print str.gsub("\\n", "\n")
313
+ str.gsub("\\n", "\n")
304
314
  end
305
315
  end
306
316
 
@@ -309,7 +319,7 @@ module ReVIEW
309
319
  end
310
320
 
311
321
  def error(msg)
312
- raise ApplicationError, "#{@location}: error: #{msg}"
322
+ raise ApplicationError, "error: #{msg} at #{@compiler.show_pos} \n (#{@compiler.failure_oneline})"
313
323
  end
314
324
 
315
325
  def handle_metric(str)
@@ -376,7 +386,7 @@ module ReVIEW
376
386
  line = self.unescape(lines.join("\n"))
377
387
  cmds = {
378
388
  :graphviz => "echo '#{line}' | dot -T#{image_ext} -o#{file_path}",
379
- :gnuplot => "echo 'set terminal " +
389
+ :gnuplot => "echo 'set terminal " +
380
390
  "#{(image_ext == "eps") ? "postscript eps" : image_ext}\n" +
381
391
  " set output \"#{file_path}\"\n#{line}' | gnuplot",
382
392
  :blockdiag => "echo '#{line}' "+
@@ -395,13 +405,9 @@ module ReVIEW
395
405
  raise NotImplementedError
396
406
  end
397
407
 
398
- def inline_include(file_name)
399
- compile_inline File.open(file_name).read
400
- end
401
-
402
408
  def include(file_name)
403
409
  File.foreach(file_name) do |line|
404
- paragraph([line])
410
+ paragraph([convert_inencoding(line, @book.config["inencoding"])])
405
411
  end
406
412
  end
407
413
 
@@ -410,6 +416,7 @@ module ReVIEW
410
416
  end
411
417
 
412
418
  def ul_item_end
419
+ ""
413
420
  end
414
421
 
415
422
  def inline_raw(args)
@@ -438,4 +445,4 @@ module ReVIEW
438
445
  end
439
446
  end
440
447
 
441
- end # module ReVIEW
448
+ end # module ReVIEW