review 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +92 -73
  3. data/{doc/NEWS.ja.md → NEWS.ja.md} +60 -0
  4. data/{doc/NEWS.md → NEWS.md} +60 -0
  5. data/bin/review-compile +1 -1
  6. data/bin/review-epubmaker +2 -2
  7. data/bin/review-pdfmaker +2 -2
  8. data/debian/control +1 -1
  9. data/{ChangeLog → doc/ChangeLog-0.x_to_2.0} +0 -0
  10. data/doc/config.yml.sample +6 -6
  11. data/doc/format.ja.md +19 -1
  12. data/doc/format.md +28 -10
  13. data/doc/quickstart.ja.md +1 -1
  14. data/doc/quickstart.md +1 -1
  15. data/lib/epubmaker.rb +2 -1
  16. data/lib/epubmaker/content.rb +2 -1
  17. data/lib/epubmaker/epubcommon.rb +1 -0
  18. data/lib/epubmaker/epubv2.rb +2 -1
  19. data/lib/epubmaker/epubv3.rb +2 -1
  20. data/lib/epubmaker/producer.rb +2 -1
  21. data/lib/epubmaker/zip_exporter.rb +2 -2
  22. data/lib/review/book/base.rb +2 -2
  23. data/lib/review/book/index.rb +7 -3
  24. data/lib/review/builder.rb +15 -7
  25. data/lib/review/compiler.rb +4 -3
  26. data/lib/review/converter.rb +1 -1
  27. data/lib/review/epubmaker.rb +2 -2
  28. data/lib/review/ewbbuilder.rb +2 -1
  29. data/lib/review/htmlbuilder.rb +59 -9
  30. data/lib/review/idgxmlbuilder.rb +13 -5
  31. data/lib/review/latexbuilder.rb +44 -17
  32. data/lib/review/latexutils.rb +2 -2
  33. data/lib/review/makerhelper.rb +2 -2
  34. data/lib/review/markdownbuilder.rb +12 -8
  35. data/lib/review/pdfmaker.rb +1 -2
  36. data/lib/review/rstbuilder.rb +10 -4
  37. data/lib/review/sec_counter.rb +9 -3
  38. data/lib/review/topbuilder.rb +47 -5
  39. data/lib/review/version.rb +1 -1
  40. data/lib/review/webmaker.rb +1 -2
  41. data/review.gemspec +1 -1
  42. data/templates/latex/layout.tex.erb +5 -0
  43. data/test/assets/test_template.tex +5 -0
  44. data/test/test_book.rb +2 -1
  45. data/test/test_book_chapter.rb +1 -3
  46. data/test/test_epub3maker.rb +0 -2
  47. data/test/test_htmlbuilder.rb +72 -3
  48. data/test/test_idgxmlbuilder.rb +11 -2
  49. data/test/test_index.rb +0 -1
  50. data/test/test_latexbuilder.rb +96 -2
  51. data/test/test_pdfmaker.rb +0 -1
  52. data/test/test_rstbuilder.rb +5 -0
  53. data/test/test_topbuilder.rb +26 -1
  54. metadata +6 -7
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- #
2
+
3
3
  # Copyright (c) 2002-2007 Minero Aoki
4
- # 2008-2016 Minero Aoki, Kenshi Muto
4
+ # 2008-2017 Minero Aoki, Kenshi Muto
5
5
  #
6
6
  # This program is free software.
7
7
  # You can distribute or modify this program under the terms of
@@ -563,10 +563,14 @@ module ReVIEW
563
563
  end
564
564
 
565
565
  def table_header(id, caption)
566
- if get_chap.nil?
567
- puts %Q[<caption>#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}</caption>]
566
+ if id.nil?
567
+ puts %Q[<caption>#{compile_inline(caption)}</caption>]
568
568
  else
569
- puts %Q[<caption>#{I18n.t("table")}#{I18n.t("format_number", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}</caption>]
569
+ if get_chap.nil?
570
+ puts %Q[<caption>#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}</caption>]
571
+ else
572
+ puts %Q[<caption>#{I18n.t("table")}#{I18n.t("format_number", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}</caption>]
573
+ end
570
574
  end
571
575
  end
572
576
 
@@ -589,6 +593,10 @@ module ReVIEW
589
593
  print "<?dtp tablerow last?>"
590
594
  end
591
595
 
596
+ def emtable(lines, caption = nil)
597
+ table(lines, nil, caption)
598
+ end
599
+
592
600
  def imgtable(lines, id, caption = nil, metric = nil)
593
601
  if @chapter.image(id).bound?
594
602
  metrics = parse_metric("idgxml", metric)
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- #
2
+
3
3
  # Copyright (c) 2002-2007 Minero Aoki
4
4
  # 2008-2009 Minero Aoki, Kenshi Muto
5
- # 2010-2016 Minero Aoki, Kenshi Muto, TAKAHASHI Masayoshi
5
+ # 2010-2017 Minero Aoki, Kenshi Muto, TAKAHASHI Masayoshi
6
6
  #
7
7
  # This program is free software.
8
8
  # You can distribute or modify this program under the terms of
@@ -32,6 +32,7 @@ module ReVIEW
32
32
  end
33
33
 
34
34
  def builder_init_file
35
+ @chapter.book.image_types = %w(.ai .eps .pdf .tif .tiff .png .bmp .jpg .jpeg .gif)
35
36
  @blank_needed = false
36
37
  @latex_tsize = nil
37
38
  @tsize = nil
@@ -339,7 +340,11 @@ module ReVIEW
339
340
  puts macro(command + 'caption', "#{compile_inline(caption)}")
340
341
  else
341
342
  begin
342
- puts macro('reviewlistcaption', "#{I18n.t("list")}#{I18n.t("format_number_header", [@chapter.number, @chapter.list(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}")
343
+ if get_chap.nil?
344
+ puts macro('reviewlistcaption', "#{I18n.t("list")}#{I18n.t("format_number_header_without_chapter", [@chapter.list(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}")
345
+ else
346
+ puts macro('reviewlistcaption', "#{I18n.t("list")}#{I18n.t("format_number_header", [get_chap, @chapter.list(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}")
347
+ end
343
348
  rescue KeyError
344
349
  error "no such list: #{id}"
345
350
  end
@@ -395,7 +400,6 @@ module ReVIEW
395
400
  end
396
401
  end
397
402
 
398
-
399
403
  def image_header(id, caption)
400
404
  end
401
405
 
@@ -504,7 +508,7 @@ module ReVIEW
504
508
  sepidx ||= idx
505
509
  next
506
510
  end
507
- rows.push line.strip.split(/\t+/).map {|s| s.sub(/\A\./, '') }
511
+ rows.push(line.strip.split(/\t+/).map {|s| s.sub(/\A\./, '') })
508
512
  end
509
513
  rows = adjust_n_cols(rows)
510
514
 
@@ -517,27 +521,35 @@ module ReVIEW
517
521
  table_begin rows.first.size
518
522
  if sepidx
519
523
  sepidx.times do
520
- tr rows.shift.map {|s| th(s) }
524
+ tr(rows.shift.map {|s| th(s) })
521
525
  end
522
526
  rows.each do |cols|
523
- tr cols.map {|s| td(s) }
527
+ tr(cols.map {|s| td(s) })
524
528
  end
525
529
  else
526
530
  rows.each do |cols|
527
531
  h, *cs = *cols
528
- tr [th(h)] + cs.map {|s| td(s) }
532
+ tr([th(h)] + cs.map {|s| td(s) })
529
533
  end
530
534
  end
531
535
  table_end
532
536
  end
533
537
 
534
538
  def table_header(id, caption)
535
- if caption.present?
536
- @table_caption = true
537
- puts '\begin{table}[h]'
538
- puts macro('reviewtablecaption', compile_inline(caption))
539
+ if id.nil?
540
+ if caption.present?
541
+ @table_caption = true
542
+ puts '\begin{table}[h]'
543
+ puts macro('reviewtablecaption*', compile_inline(caption))
544
+ end
545
+ else
546
+ if caption.present?
547
+ @table_caption = true
548
+ puts '\begin{table}[h]'
549
+ puts macro('reviewtablecaption', compile_inline(caption))
550
+ end
551
+ puts macro('label', table_label(id))
539
552
  end
540
- puts macro('label', table_label(id))
541
553
  end
542
554
 
543
555
  def table_begin(ncols)
@@ -594,6 +606,10 @@ module ReVIEW
594
606
  blank
595
607
  end
596
608
 
609
+ def emtable(lines, caption = nil)
610
+ table(lines, nil, caption)
611
+ end
612
+
597
613
  def imgtable(lines, id, caption = nil, metric = nil)
598
614
  if !@chapter.image(id).bound?
599
615
  warn "image not bound: #{id}"
@@ -735,21 +751,32 @@ module ReVIEW
735
751
  nofunc_text("[UnknownChapter:#{id}]")
736
752
  end
737
753
 
738
-
739
754
  # FIXME: use TeX native label/ref.
740
755
  def inline_list(id)
741
756
  chapter, id = extract_chapter_id(id)
742
- macro('reviewlistref', "#{chapter.number}.#{chapter.list(id).number}")
757
+ if get_chap(chapter).nil?
758
+ macro('reviewlistref', I18n.t("format_number_without_header", [chapter.list(id).number]))
759
+ else
760
+ macro('reviewlistref', I18n.t("format_number", [get_chap(chapter), chapter.list(id).number]))
761
+ end
743
762
  end
744
763
 
745
764
  def inline_table(id)
746
765
  chapter, id = extract_chapter_id(id)
747
- macro('reviewtableref', "#{chapter.number}.#{chapter.table(id).number}", table_label(id, chapter))
766
+ if get_chap(chapter).nil?
767
+ macro('reviewtableref', I18n.t("format_number_without_header", [chapter.table(id).number]), table_label(id, chapter))
768
+ else
769
+ macro('reviewtableref', I18n.t("format_number", [get_chap(chapter), chapter.table(id).number]), table_label(id, chapter))
770
+ end
748
771
  end
749
772
 
750
773
  def inline_img(id)
751
774
  chapter, id = extract_chapter_id(id)
752
- macro('reviewimageref', "#{chapter.number}.#{chapter.image(id).number}", image_label(id, chapter))
775
+ if get_chap(chapter).nil?
776
+ macro('reviewimageref', I18n.t("format_number_without_header", [chapter.image(id).number]), image_label(id, chapter))
777
+ else
778
+ macro('reviewimageref', I18n.t("format_number", [get_chap(chapter), chapter.image(id).number]), image_label(id, chapter))
779
+ end
753
780
  end
754
781
 
755
782
  def footnote(id, content)
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- #
2
+
3
3
  # Copyright (c) 2002-2006 Minero Aoki
4
- # Copyright (c) 2006-2016 Minero Aoki, Kenshi Muto and Masayoshi Takahashi
4
+ # Copyright (c) 2006-2017 Minero Aoki, Kenshi Muto and Masayoshi Takahashi
5
5
  #
6
6
  # This program is free software.
7
7
  # You can distribute or modify this program under the terms of
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- #
3
- # Copyright (c) 2012-2016 Yuto HAYAMIZU, Kenshi Muto
2
+
3
+ # Copyright (c) 2012-2017 Yuto HAYAMIZU, Kenshi Muto
4
4
  #
5
5
  # This program is free software.
6
6
  # You can distribute or modify this program under the terms of
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
+
2
3
  # This program is free software.
3
4
  # You can distribute or modify this program under the terms of
4
5
  # the GNU LGPL, Lesser General Public License version 2.1.
@@ -162,7 +163,6 @@ module ReVIEW
162
163
  "`#{str}`"
163
164
  end
164
165
 
165
-
166
166
  def image_image(id, caption, metric)
167
167
  blank
168
168
  puts "![#{compile_inline(caption)}](#{@chapter.image(id).path.sub(/\A\.\//, "")})"
@@ -212,7 +212,7 @@ module ReVIEW
212
212
  sepidx ||= idx
213
213
  next
214
214
  end
215
- rows.push line.strip.split(/\t+/).map {|s| s.sub(/\A\./, '') }
215
+ rows.push(line.strip.split(/\t+/).map {|s| s.sub(/\A\./, '') })
216
216
  end
217
217
  rows = adjust_n_cols(rows)
218
218
 
@@ -225,26 +225,30 @@ module ReVIEW
225
225
  return if rows.empty?
226
226
  if sepidx
227
227
  sepidx.times do
228
- tr rows.shift.map {|s| th(s) }
228
+ tr(rows.shift.map {|s| th(s) })
229
229
  end
230
230
  table_border rows.first.size
231
231
  rows.each do |cols|
232
- tr cols.map {|s| td(s) }
232
+ tr(cols.map {|s| td(s) })
233
233
  end
234
234
  else
235
235
  rows.each do |cols|
236
236
  h, *cs = *cols
237
- tr [th(h)] + cs.map {|s| td(s) }
237
+ tr([th(h)] + cs.map {|s| td(s) })
238
238
  end
239
239
  end
240
240
  table_end
241
241
  end
242
242
 
243
243
  def table_header(id, caption)
244
- if get_chap.nil?
245
- puts %Q[#{I18n.t("table")}#{I18n.t("format_number_header_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}]
244
+ if id.nil?
245
+ puts compile_inline(caption)
246
246
  else
247
- puts %Q[#{I18n.t("table")}#{I18n.t("format_number_header", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}]
247
+ if get_chap.nil?
248
+ puts %Q[#{I18n.t("table")}#{I18n.t("format_number_header_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}]
249
+ else
250
+ puts %Q[#{I18n.t("table")}#{I18n.t("format_number_header", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}]
251
+ end
248
252
  end
249
253
  blank
250
254
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- #
2
+
3
3
  # Copyright (c) 2010-2017 Kenshi Muto and Masayoshi Takahashi
4
4
  #
5
5
  # This program is free software.
@@ -241,7 +241,6 @@ module ReVIEW
241
241
  build_pdf
242
242
 
243
243
  FileUtils.cp(File.join(@path, "book.pdf"), pdf_filepath)
244
-
245
244
  ensure
246
245
  unless @config["debug"]
247
246
  remove_entry_secure @path
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- #
2
+
3
3
  # Copyright (c) 2002-2006 Minero Aoki
4
- # 2008-2016 Minero Aoki, Kenshi Muto
4
+ # 2008-2017 Minero Aoki, Kenshi Muto
5
5
  #
6
6
  # This program is free software.
7
7
  # You can distribute or modify this program under the terms of
@@ -317,8 +317,10 @@ module ReVIEW
317
317
  end
318
318
 
319
319
  def table_header(id, caption)
320
- blank
321
- puts ".. _#{id}:"
320
+ unless id.nil?
321
+ blank
322
+ puts ".. _#{id}:"
323
+ end
322
324
  blank
323
325
  puts ".. list-table:: #{compile_inline(caption)}"
324
326
  puts " :header-rows: 1"
@@ -352,6 +354,10 @@ module ReVIEW
352
354
  blank
353
355
  end
354
356
 
357
+ def emtable(lines, caption = nil)
358
+ table(lines, nil, caption)
359
+ end
360
+
355
361
  def comment(lines, comment = nil)
356
362
  puts lines.map{|line| " .. #{line}"}.join("")
357
363
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- #
3
- # Copyright (c) 2008-2014 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
2
+
3
+ # Copyright (c) 2008-2017 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
4
4
  # KADO Masanori
5
5
  #
6
6
  # This program is free software.
@@ -55,7 +55,13 @@ module ReVIEW
55
55
  end
56
56
  end
57
57
  elsif secnolevel >= level
58
- prefix = @chapter.format_number(false)
58
+ prefix = ''
59
+ if @chapter.is_a? ReVIEW::Book::Part
60
+ prefix = I18n.t('part_short', @chapter.number)
61
+ else
62
+ prefix = @chapter.format_number(false)
63
+ end
64
+
59
65
  0.upto(level - 2) do |i|
60
66
  prefix << ".#{@counter[i]}"
61
67
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- #
2
+
3
3
  # Copyright (c) 2002-2006 Minero Aoki
4
4
  # 2008-2017 Minero Aoki, Kenshi Muto
5
5
  #
@@ -315,13 +315,55 @@ module ReVIEW
315
315
  blank
316
316
  end
317
317
 
318
- def table_header(id, caption)
318
+ def table(lines, id = nil, caption = nil)
319
319
  blank
320
320
  puts "◆→開始:#{@titles["table"]}←◆"
321
- if get_chap.nil?
322
- puts "#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}"
321
+
322
+ rows = []
323
+ sepidx = nil
324
+ lines.each_with_index do |line, idx|
325
+ if /\A[\=\-]{12}/ =~ line
326
+ # just ignore
327
+ #error "too many table separator" if sepidx
328
+ sepidx ||= idx
329
+ next
330
+ end
331
+ rows.push(line.strip.split(/\t+/).map {|s| s.sub(/\A\./, '') })
332
+ end
333
+ rows = adjust_n_cols(rows)
334
+
335
+ begin
336
+ table_header id, caption unless caption.nil?
337
+ rescue KeyError
338
+ error "no such table: #{id}"
339
+ end
340
+ return if rows.empty?
341
+ table_begin rows.first.size
342
+ if sepidx
343
+ sepidx.times do
344
+ tr(rows.shift.map {|s| th(s) })
345
+ end
346
+ rows.each do |cols|
347
+ tr(cols.map {|s| td(s) })
348
+ end
349
+ else
350
+ rows.each do |cols|
351
+ h, *cs = *cols
352
+ tr([th(h)] + cs.map {|s| td(s) })
353
+ end
354
+ end
355
+ table_end
356
+ end
357
+
358
+ def table_header(id, caption)
359
+ if id.nil?
360
+ puts compile_inline(caption)
323
361
  else
324
- puts "#{I18n.t("table")}#{I18n.t("format_number", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}"
362
+ if get_chap.nil?
363
+ puts "#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}"
364
+ else
365
+ puts "#{I18n.t("table")}#{I18n.t("format_number", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}"
366
+ end
325
367
  end
326
368
  blank
327
369
  end
@@ -1,3 +1,3 @@
1
1
  module ReVIEW
2
- VERSION = "2.2.0"
2
+ VERSION = "2.3.0"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- #
2
+
3
3
  # This program is free software.
4
4
  # You can distribute or modify this program under the terms of
5
5
  # the GNU LGPL, Lesser General Public License version 2.1.
@@ -65,7 +65,6 @@ module ReVIEW
65
65
  FileUtils.rm_rf(path)
66
66
  end
67
67
 
68
-
69
68
  def execute(*args)
70
69
  @config = ReVIEW::Configure.values
71
70
  @config.maker = "webmaker"
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+
2
3
  $:.push File.expand_path("../lib", __FILE__)
3
4
  require "review/version"
4
5
 
@@ -19,7 +20,6 @@ Gem::Specification.new do |gem|
19
20
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
21
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
22
  gem.extra_rdoc_files = [
22
- "ChangeLog",
23
23
  ]
24
24
  gem.require_paths = ["lib"]
25
25
 
@@ -8,6 +8,8 @@
8
8
  <%- else -%>
9
9
  \usepackage[deluxe]{otf}
10
10
  <%- end -%>
11
+ \usepackage{caption}
12
+ \usepackage{suffix}
11
13
  \usepackage[T1]{fontenc}\usepackage{textcomp}%T1/TS1
12
14
  % \usepackage{lmodern}
13
15
  \usepackage[dvipdfmx]{graphicx}
@@ -136,6 +138,9 @@
136
138
  \newcommand{\reviewtablecaption}[1]{%
137
139
  \caption{#1}}
138
140
 
141
+ \WithSuffix\newcommand\reviewtablecaption*[1]{%
142
+ \caption*{#1}}
143
+
139
144
  \newcommand{\reviewimgtablecaption}[1]{%
140
145
  \caption{#1}\vspace{-3mm}}
141
146