review 2.0.0.beta1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +66 -1
  3. data/.rubocop_todo.yml +617 -0
  4. data/.travis.yml +16 -1
  5. data/ChangeLog +48 -0
  6. data/Dockerfile +22 -0
  7. data/Gemfile +0 -1
  8. data/README.md +97 -0
  9. data/Rakefile +10 -11
  10. data/appveyor.yml +9 -0
  11. data/bin/review +46 -0
  12. data/bin/review-check +8 -21
  13. data/bin/review-compile +26 -43
  14. data/bin/review-index +9 -22
  15. data/bin/review-init +21 -25
  16. data/bin/review-preproc +9 -13
  17. data/bin/review-validate +1 -1
  18. data/bin/review-vol +3 -17
  19. data/bin/review-webmaker +15 -0
  20. data/doc/NEWS.ja.md +534 -0
  21. data/doc/NEWS.md +538 -0
  22. data/doc/catalog.ja.md +10 -18
  23. data/doc/catalog.md +5 -9
  24. data/doc/config.yml.sample +319 -0
  25. data/doc/customize_epub.ja.md +42 -0
  26. data/doc/format.ja.md +320 -288
  27. data/doc/format.md +277 -170
  28. data/doc/format_idg.ja.md +82 -175
  29. data/doc/pdfmaker.ja.md +61 -0
  30. data/doc/pdfmaker.md +65 -0
  31. data/doc/quickstart.ja.md +88 -98
  32. data/doc/quickstart.md +72 -110
  33. data/doc/sample.css +41 -0
  34. data/doc/writing_vertical.ja.md +55 -0
  35. data/doc/writing_vertical.md +5 -0
  36. data/lib/epubmaker/content.rb +3 -3
  37. data/lib/epubmaker/epubcommon.rb +173 -145
  38. data/lib/epubmaker/epubv2.rb +24 -77
  39. data/lib/epubmaker/epubv3.rb +72 -73
  40. data/lib/epubmaker/producer.rb +54 -30
  41. data/lib/lineinput.rb +48 -0
  42. data/lib/review/book.rb +0 -1
  43. data/lib/review/book/base.rb +47 -27
  44. data/lib/review/book/chapter.rb +48 -19
  45. data/lib/review/book/compilable.rb +10 -14
  46. data/lib/review/book/index.rb +10 -19
  47. data/lib/review/book/page_metric.rb +0 -10
  48. data/lib/review/book/part.rb +17 -3
  49. data/lib/review/builder.rb +84 -68
  50. data/lib/review/catalog.rb +5 -1
  51. data/lib/review/compiler.rb +327 -4657
  52. data/lib/review/configure.rb +84 -10
  53. data/lib/review/converter.rb +28 -0
  54. data/lib/review/epubbuilder.rb +1 -1
  55. data/lib/review/epubmaker.rb +142 -158
  56. data/lib/review/ewbbuilder.rb +5 -5
  57. data/lib/review/exception.rb +1 -1
  58. data/lib/review/extentions.rb +1 -1
  59. data/lib/review/extentions/hash.rb +15 -0
  60. data/lib/review/extentions/string.rb +2 -1
  61. data/lib/review/htmlbuilder.rb +364 -348
  62. data/lib/review/htmltoc.rb +44 -0
  63. data/lib/review/htmlutils.rb +12 -6
  64. data/lib/review/i18n.rb +78 -6
  65. data/lib/review/i18n.yml +7 -4
  66. data/lib/review/idgxmlbuilder.rb +226 -267
  67. data/lib/review/latexbuilder.rb +281 -274
  68. data/lib/review/latexutils.rb +56 -49
  69. data/lib/review/makerhelper.rb +8 -4
  70. data/lib/review/markdownbuilder.rb +80 -124
  71. data/lib/review/pdfmaker.rb +197 -138
  72. data/lib/review/preprocessor.rb +16 -67
  73. data/lib/review/template.rb +24 -0
  74. data/lib/review/textbuilder.rb +1 -1
  75. data/lib/review/textutils.rb +18 -24
  76. data/lib/review/tocparser.rb +51 -106
  77. data/lib/review/tocprinter.rb +61 -117
  78. data/lib/review/topbuilder.rb +119 -126
  79. data/lib/review/unfold.rb +2 -2
  80. data/lib/review/version.rb +1 -1
  81. data/lib/review/webmaker.rb +302 -0
  82. data/lib/review/webtocprinter.rb +48 -0
  83. data/lib/review/yamlloader.rb +47 -0
  84. data/review.gemspec +3 -3
  85. data/templates/html/layout-html5.html.erb +17 -0
  86. data/templates/html/layout-xhtml1.html.erb +20 -0
  87. data/{lib/review → templates/latex}/layout.tex.erb +107 -115
  88. data/templates/ncx/epubv2.ncx.erb +11 -0
  89. data/templates/opf/epubv2.opf.erb +21 -0
  90. data/templates/opf/epubv3.opf.erb +18 -0
  91. data/templates/web/html/layout-html5.html.erb +56 -0
  92. data/templates/web/html/layout-xhtml1.html.erb +20 -0
  93. data/templates/xml/container.xml.erb +6 -0
  94. data/test/assets/test.xml.erb +3 -0
  95. data/test/assets/test_template.tex +28 -71
  96. data/test/assets/test_template_backmatter.tex +1 -9
  97. data/test/sample-book/src/Rakefile +12 -3
  98. data/{doc/sample.yml → test/sample-book/src/config-epub2.yml} +92 -147
  99. data/test/sample-book/src/config.yml +40 -154
  100. data/test/sample-book/src/style-web.css +45 -0
  101. data/test/sample-book/src/style.css +23 -1
  102. data/test/test.re +1 -1
  103. data/test/test_book.rb +15 -17
  104. data/test/test_book_chapter.rb +2 -80
  105. data/test/test_book_part.rb +1 -1
  106. data/test/test_builder.rb +28 -6
  107. data/test/test_catalog.rb +17 -0
  108. data/test/test_compiler.rb +14 -59
  109. data/test/test_configure.rb +94 -0
  110. data/test/test_converter.rb +21 -0
  111. data/test/test_epub3maker.rb +155 -3
  112. data/test/test_epubmaker.rb +245 -30
  113. data/test/test_epubmaker_cmd.rb +2 -2
  114. data/test/test_extentions_hash.rb +60 -0
  115. data/test/test_helper.rb +4 -47
  116. data/test/test_htmlbuilder.rb +282 -175
  117. data/test/test_htmltoc.rb +33 -0
  118. data/test/test_i18n.rb +134 -70
  119. data/test/test_idgxmlbuilder.rb +58 -39
  120. data/test/test_latexbuilder.rb +132 -14
  121. data/test/test_lineinput.rb +5 -26
  122. data/test/test_makerhelper.rb +6 -4
  123. data/test/test_markdownbuilder.rb +23 -5
  124. data/test/test_pdfmaker.rb +86 -20
  125. data/test/test_pdfmaker_cmd.rb +1 -3
  126. data/test/test_review_ext.rb +1 -1
  127. data/test/test_template.rb +27 -0
  128. data/test/test_textutils.rb +36 -0
  129. data/test/test_tocparser.rb +25 -0
  130. data/test/test_topbuilder.rb +34 -2
  131. data/test/test_yamlloader.rb +188 -0
  132. metadata +71 -29
  133. data/README.rdoc +0 -81
  134. data/bin/review-epubmaker-legacy +0 -1024
  135. data/doc/ruby-uuid/README +0 -11
  136. data/doc/ruby-uuid/README.ja +0 -34
  137. data/lib/review/compiler/literals_1_8.kpeg +0 -19
  138. data/lib/review/compiler/literals_1_8.rb +0 -432
  139. data/lib/review/compiler/literals_1_9.kpeg +0 -22
  140. data/lib/review/compiler/literals_1_9.rb +0 -435
  141. data/lib/review/extentions/array.rb +0 -25
  142. data/lib/review/htmllayout.rb +0 -41
  143. data/lib/review/inaobuilder.rb +0 -357
  144. data/lib/review/location.rb +0 -24
  145. data/lib/review/node.rb +0 -267
  146. data/lib/review/review.kpeg +0 -724
  147. data/lib/uuid.rb +0 -312
  148. data/rubocop-todo.yml +0 -456
  149. data/test/test_inaobuilder.rb +0 -247
  150. data/test/test_uuid.rb +0 -157
@@ -48,6 +48,46 @@ 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
+
51
91
  def each
52
92
  while line = gets()
53
93
  yield line
@@ -104,4 +144,12 @@ class LineInput
104
144
  nil
105
145
  end
106
146
 
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
+
107
155
  end
@@ -11,7 +11,6 @@
11
11
  #
12
12
 
13
13
  require 'review/exception'
14
- require 'review/extentions'
15
14
 
16
15
  require 'review/book/base'
17
16
  require 'review/book/chapter'
@@ -1,8 +1,6 @@
1
1
  #
2
- # $Id: book.rb 4315 2009-09-02 04:15:24Z kmuto $
3
- #
4
2
  # Copyright (c) 2002-2008 Minero Aoki
5
- # 2009 Minero Aoki, Kenshi Muto
3
+ # 2009-2016 Minero Aoki, Kenshi Muto
6
4
  #
7
5
  # This program is free software.
8
6
  # You can distribute or modify this program under the terms of
@@ -48,6 +46,7 @@ module ReVIEW
48
46
  @chapter_index = nil
49
47
  @config = ReVIEW::Configure.values
50
48
  @catalog = nil
49
+ @read_part = nil
51
50
  end
52
51
 
53
52
  def bib_file
@@ -84,10 +83,22 @@ module ReVIEW
84
83
  end
85
84
  end
86
85
 
86
+ def htmlversion
87
+ if config["htmlversion"].blank?
88
+ nil
89
+ else
90
+ config["htmlversion"].to_i
91
+ end
92
+ end
93
+
87
94
  def parts
88
95
  @parts ||= read_parts()
89
96
  end
90
97
 
98
+ def parts=(parts)
99
+ @parts = parts
100
+ end
101
+
91
102
  def parts_in_file
92
103
  parts.find_all{|part|
93
104
  part if part.present? and part.file?
@@ -102,6 +113,15 @@ module ReVIEW
102
113
  parts.each(&block)
103
114
  end
104
115
 
116
+ def contents
117
+ # TODO: includes predef, appendix, postdef
118
+ if parts.present?
119
+ chapters + parts
120
+ else
121
+ chapters
122
+ end
123
+ end
124
+
105
125
  def chapters
106
126
  parts().map {|p| p.chapters }.flatten
107
127
  end
@@ -111,7 +131,7 @@ module ReVIEW
111
131
  end
112
132
 
113
133
  def each_chapter_r(&block)
114
- chapters.reverse.each(&block)
134
+ chapters.reverse_each(&block)
115
135
  end
116
136
 
117
137
  def chapter_index
@@ -158,32 +178,26 @@ module ReVIEW
158
178
  @config ||= Configure.values
159
179
  end
160
180
 
161
- # backward compatible
162
- def param=(param)
163
- @config = param
164
- end
165
-
166
181
  def load_config(filename)
167
182
  new_conf = YAML.load_file(filename)
168
183
  @config.merge!(new_conf)
169
184
  end
170
185
 
171
- # backward compatible
172
- def param
173
- @config
174
- end
175
-
176
186
  def catalog
177
187
  return @catalog if @catalog.present?
178
188
 
179
189
  catalogfile_path = "#{basedir}/#{config["catalogfile"]}"
180
190
  if File.file? catalogfile_path
181
- @catalog = Catalog.new(File.open catalogfile_path)
191
+ @catalog = File.open(catalogfile_path){|f| Catalog.new(f) }
182
192
  end
183
193
 
184
194
  @catalog
185
195
  end
186
196
 
197
+ def catalog=(catalog)
198
+ @catalog = catalog
199
+ end
200
+
187
201
  def read_CHAPS
188
202
  if catalog
189
203
  catalog.chaps
@@ -217,12 +231,12 @@ module ReVIEW
217
231
  end
218
232
 
219
233
  def read_PART
220
- return @read_PART if @read_PART
234
+ return @read_part if @read_part
221
235
 
222
236
  if catalog
223
- @read_PART = catalog.parts
237
+ @read_part = catalog.parts
224
238
  else
225
- @read_PART = File.read("#{@basedir}/#{config["part_file"]}")
239
+ @read_part = File.read("#{@basedir}/#{config["part_file"]}")
226
240
  end
227
241
  end
228
242
 
@@ -300,6 +314,8 @@ module ReVIEW
300
314
  list
301
315
  end
302
316
 
317
+ # return Array of Part, not Chapter
318
+ #
303
319
  def parse_chapters
304
320
  part = 0
305
321
  num = 0
@@ -308,26 +324,32 @@ module ReVIEW
308
324
  return catalog.parts_with_chaps.map do |entry|
309
325
  if entry.is_a? Hash
310
326
  chaps = entry.values.first.map do |chap|
311
- Chapter.new(self, (num += 1), chap, "#{@basedir}/#{chap}")
327
+ chap = Chapter.new(self, (num += 1), chap, "#{@basedir}/#{chap}")
328
+ chap
312
329
  end
313
330
  Part.new(self, (part += 1), chaps, read_PART.split("\n")[part - 1])
314
331
  else
315
332
  chap = Chapter.new(self, (num += 1), entry, "#{@basedir}/#{entry}")
333
+ if chap.number
334
+ num = chap.number
335
+ else
336
+ num -= 1
337
+ end
316
338
  Part.new(self, nil, [chap])
317
339
  end
318
340
  end
319
341
  end
320
342
 
321
343
  chap = read_CHAPS()\
322
- .strip.lines.map {|line| line.strip }.join("\n").split(/\n{2,}/)\
323
- .map {|part_chunk|
344
+ .strip.lines.map {|line| line.strip }.join("\n").split(/\n{2,}/)\
345
+ .map {|part_chunk|
324
346
  chaps = part_chunk.split.map {|chapid|
325
347
  Chapter.new(self, (num += 1), chapid, "#{@basedir}/#{chapid}")
326
348
  }
327
- if part_exist? && read_PART.split("\n").size >= part
349
+ if part_exist? && read_PART.split("\n").size > part
328
350
  Part.new(self, (part += 1), chaps, read_PART.split("\n")[part-1])
329
351
  else
330
- Part.new(self, (part += 1), chaps)
352
+ Part.new(self, nil, chaps)
331
353
  end
332
354
  }
333
355
  return chap
@@ -335,8 +357,7 @@ module ReVIEW
335
357
 
336
358
  def mkpart_from_namelistfile(path)
337
359
  chaps = []
338
- File.read(path).split.each_with_index do |name, idx|
339
- name.sub!(/\A\xEF\xBB\xBF/u, '') # remove BOM
360
+ File.read(path, :mode => 'r:BOM|utf-8').split.each_with_index do |name, idx|
340
361
  if path =~ /PREDEF/
341
362
  chaps << mkchap(name)
342
363
  else
@@ -372,9 +393,8 @@ module ReVIEW
372
393
 
373
394
  def read_FILE(filename)
374
395
  res = ""
375
- File.open("#{@basedir}/#{filename}") do |f|
396
+ File.open("#{@basedir}/#{filename}", 'r:BOM|utf-8') do |f|
376
397
  while line = f.gets
377
- line.sub!(/\A\xEF\xBB\xBF/u, '') # remove BOM
378
398
  if /\A#/ =~ line
379
399
  next
380
400
  end
@@ -1,8 +1,6 @@
1
1
  #
2
- # $Id: book.rb 4315 2009-09-02 04:15:24Z kmuto $
3
- #
4
2
  # Copyright (c) 2002-2008 Minero Aoki
5
- # 2009 Minero Aoki, Kenshi Muto
3
+ # 2009-2016 Minero Aoki, Kenshi Muto
6
4
  #
7
5
  # This program is free software.
8
6
  # You can distribute or modify this program under the terms of
@@ -10,11 +8,11 @@
10
8
  # For details of the GNU LGPL, see the file "COPYING".
11
9
  #
12
10
  require 'review/book/compilable'
11
+ require 'review/lineinput'
12
+ require 'review/preprocessor'
13
+
13
14
  module ReVIEW
14
15
  module Book
15
- ROMAN = %w[0 I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII]
16
- ALPHA = %w[0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
17
-
18
16
  class Chapter
19
17
  include Compilable
20
18
 
@@ -27,7 +25,19 @@ module ReVIEW
27
25
  @path = path
28
26
  @io = io
29
27
  @title = nil
30
- @content = nil
28
+ if @io
29
+ begin
30
+ @content = @io.read
31
+ rescue
32
+ @content = nil
33
+ end
34
+ else
35
+ @content = nil
36
+ end
37
+ if !@content && @path && File.exist?(@path)
38
+ @content = File.read(@path, :mode => 'r:BOM|utf-8')
39
+ @number = nil if ['nonum', 'nodisp', 'notoc'].include?(find_first_header_option)
40
+ end
31
41
  @list_index = nil
32
42
  @table_index = nil
33
43
  @footnote_index = nil
@@ -37,6 +47,25 @@ module ReVIEW
37
47
  @indepimage_index = nil
38
48
  @headline_index = nil
39
49
  @column_index = nil
50
+ @volume = nil
51
+ end
52
+
53
+ def find_first_header_option
54
+ f = LineInput.new(Preprocessor::Strip.new(StringIO.new(@content)))
55
+ while f.next?
56
+ case f.peek
57
+ when /\A=+[\[\s\{]/
58
+ m = /\A(=+)(?:\[(.+?)\])?(?:\{(.+?)\})?(.*)/.match(f.gets)
59
+ return m[2] # tag
60
+ when %r</\A//[a-z]+/>
61
+ line = f.gets
62
+ if line.rstrip[-1,1] == "{"
63
+ f.until_match(%r<\A//\}>)
64
+ end
65
+ end
66
+ f.gets
67
+ end
68
+ nil
40
69
  end
41
70
 
42
71
  def inspect
@@ -44,27 +73,27 @@ module ReVIEW
44
73
  end
45
74
 
46
75
  def format_number(heading = true)
76
+ return "" unless @number
77
+
47
78
  if on_PREDEF?
48
79
  return "#{@number}"
49
80
  end
50
81
 
51
82
  if on_APPENDIX?
52
83
  return "#{@number}" if @number < 1 || @number > 27
84
+ if @book.config["appendix_format"]
85
+ raise ReVIEW::ConfigError,
86
+ "'appendix_format:' in config.yml is obsoleted."
87
+ end
88
+
89
+ i18n_appendix = I18n.get("appendix")
90
+ fmt = i18n_appendix.scan(/%\w{1,3}/).first || "%s"
91
+ I18n.update({"appendix_without_heading" => fmt})
53
92
 
54
- type = @book.config["appendix_format"].blank? ? "arabic" : @book.config["appendix_format"].downcase.strip
55
- appendix = case type
56
- when "roman"
57
- ROMAN[@number]
58
- when "alphabet", "alpha"
59
- ALPHA[@number]
60
- else
61
- # nil, "arabic", etc...
62
- "#{@number}"
63
- end
64
93
  if heading
65
- return "#{I18n.t("appendix", appendix)}"
94
+ return I18n.t("appendix", @number)
66
95
  else
67
- return "#{appendix}"
96
+ return I18n.t("appendix_without_heading", @number)
68
97
  end
69
98
  end
70
99
 
@@ -42,20 +42,18 @@ module ReVIEW
42
42
  return @title if @title
43
43
 
44
44
  @title = ''
45
- open {|f|
46
- f.each_line {|l|
47
- l = convert_inencoding(l, book.config["inencoding"])
48
- if l =~ /\A=+/
49
- @title = l.sub(/\A=+(\[.+?\])?(\{.+?\})?/, '').strip
50
- break
51
- end
52
- }
53
- }
45
+ return @title if !content
46
+ content.each_line do |line|
47
+ if line =~ /\A=+/
48
+ @title = line.sub(/\A=+(\[.+?\])?(\{.+?\})?/, '').strip
49
+ break
50
+ end
51
+ end
54
52
  @title
55
53
  end
56
54
 
57
55
  def size
58
- File.size(path())
56
+ content.size
59
57
  end
60
58
 
61
59
  def volume
@@ -66,17 +64,15 @@ module ReVIEW
66
64
  @volume
67
65
  end
68
66
 
67
+ # deprecated; use content()
69
68
  def open(&block)
70
69
  return (block_given?() ? yield(@io) : @io) if @io
71
- File.open(path(), &block)
70
+ StringIO.new(content)
72
71
  end
73
72
 
74
73
  attr_writer :content
75
74
 
76
75
  def content
77
- @content = convert_inencoding(File.read(path()),
78
- book.config["inencoding"])
79
- rescue
80
76
  @content
81
77
  end
82
78
 
@@ -58,8 +58,8 @@ 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
62
- select{|k, v| k == id && v > 1 }.present? # detect duplicated
61
+ reduce(Hash.new(0)){|h, i| h[i] += 1; h}. # number of occurrences
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
65
65
 
@@ -118,7 +118,7 @@ module ReVIEW
118
118
 
119
119
  class TableIndex < Index
120
120
  def TableIndex.item_type
121
- 'table'
121
+ '(table|imgtable)'
122
122
  end
123
123
  end
124
124
 
@@ -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
@@ -184,7 +184,7 @@ module ReVIEW
184
184
  end
185
185
 
186
186
  def ImageIndex.item_type
187
- '(image|graph)'
187
+ '(image|graph|imgtable)'
188
188
  end
189
189
 
190
190
  attr_reader :image_finder
@@ -245,12 +245,12 @@ module ReVIEW
245
245
  end
246
246
 
247
247
  def title(id)
248
- sprintf(@locale["#{@index.item_type}_caption_format".intern],
248
+ sprintf(@locale["#{@index.item_type}_caption_format".to_sym],
249
249
  @index.title(id))
250
250
  end
251
251
 
252
252
  def number(id)
253
- sprintf(@locale["#{@index.item_type}_number_format".intern],
253
+ sprintf(@locale["#{@index.item_type}_number_format".to_sym],
254
254
  @index.number(id))
255
255
  end
256
256
 
@@ -296,7 +296,7 @@ module ReVIEW
296
296
  end
297
297
 
298
298
  def IndepImageIndex.item_type
299
- 'indepimage'
299
+ '(indepimage|imgtable)'
300
300
  end
301
301
 
302
302
  def number(id)
@@ -365,16 +365,7 @@ module ReVIEW
365
365
  def number(id)
366
366
  n = @chap.number
367
367
  if @chap.on_APPENDIX? && @chap.number > 0 && @chap.number < 28
368
- type = @chap.book.config["appendix_format"].blank? ? "arabic" : @chap.book.config["appendix_format"].downcase.strip
369
- n = case type
370
- when "roman"
371
- ROMAN[@chap.number]
372
- when "alphabet", "alpha"
373
- ALPHA[@chap.number]
374
- else
375
- # nil, "arabic", etc...
376
- "#{@chap.number}"
377
- end
368
+ n = @chap.format_number(false)
378
369
  end
379
370
  return ([n] + self[id].number).join(".")
380
371
  end
@@ -389,7 +380,7 @@ module ReVIEW
389
380
  seq = 1
390
381
  src.each do |line|
391
382
  if m = COLUMN_PATTERN.match(line)
392
- level = m[1] ## not use it yet
383
+ _level = m[1] ## not use it yet
393
384
  id = m[2]
394
385
  caption = m[3].strip
395
386
  if !id || id == ""