review 2.5.0 → 3.0.0.preview1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +28 -10
  3. data/.travis.yml +11 -2
  4. data/NEWS.ja.md +89 -17
  5. data/NEWS.md +92 -0
  6. data/README.md +1 -1
  7. data/Rakefile +0 -13
  8. data/bin/review-catalog-converter +83 -37
  9. data/bin/review-check +17 -5
  10. data/bin/review-compile +1 -1
  11. data/bin/review-index +6 -0
  12. data/bin/review-init +3 -155
  13. data/bin/review-preproc +0 -5
  14. data/bin/review-validate +21 -7
  15. data/bin/review-vol +13 -5
  16. data/doc/config.yml.sample +12 -7
  17. data/doc/config.yml.sample-simple +1 -1
  18. data/doc/format.ja.md +39 -3
  19. data/doc/format.md +39 -3
  20. data/doc/format_idg.ja.md +0 -4
  21. data/doc/pdfmaker.ja.md +1 -1
  22. data/doc/pdfmaker.md +1 -1
  23. data/doc/sample.css +7 -0
  24. data/lib/epubmaker/content.rb +31 -12
  25. data/lib/epubmaker/epubcommon.rb +10 -3
  26. data/lib/epubmaker/epubv2.rb +11 -3
  27. data/lib/epubmaker/epubv3.rb +11 -3
  28. data/lib/epubmaker/producer.rb +55 -20
  29. data/lib/review/book/base.rb +63 -48
  30. data/lib/review/book/chapter.rb +19 -7
  31. data/lib/review/book/compilable.rb +5 -20
  32. data/lib/review/book/image_finder.rb +10 -3
  33. data/lib/review/book/index.rb +30 -9
  34. data/lib/review/book/part.rb +9 -6
  35. data/lib/review/book.rb +0 -14
  36. data/lib/review/builder.rb +110 -18
  37. data/lib/review/catalog.rb +24 -4
  38. data/lib/review/compiler.rb +3 -1
  39. data/lib/review/configure.rb +43 -9
  40. data/lib/review/epubmaker/reviewheaderlistener.rb +57 -0
  41. data/lib/review/epubmaker.rb +129 -85
  42. data/lib/review/htmlbuilder.rb +76 -58
  43. data/lib/review/htmlutils.rb +20 -13
  44. data/lib/review/i18n.rb +6 -2
  45. data/lib/review/idgxmlbuilder.rb +52 -41
  46. data/lib/review/init.rb +194 -0
  47. data/lib/review/latexbuilder.rb +118 -34
  48. data/lib/review/latexutils.rb +5 -5
  49. data/lib/review/logger.rb +2 -1
  50. data/lib/review/makerhelper.rb +1 -1
  51. data/lib/review/markdownbuilder.rb +66 -6
  52. data/lib/review/md2inaobuilder.rb +2 -2
  53. data/lib/review/pdfmaker.rb +74 -22
  54. data/lib/review/plaintextbuilder.rb +8 -4
  55. data/lib/review/preprocessor.rb +14 -17
  56. data/lib/review/sec_counter.rb +8 -2
  57. data/lib/review/textmaker.rb +2 -2
  58. data/lib/review/textutils.rb +9 -2
  59. data/lib/review/tocparser.rb +7 -4
  60. data/lib/review/tocprinter.rb +3 -1
  61. data/lib/review/version.rb +1 -1
  62. data/lib/review/webmaker.rb +19 -7
  63. data/lib/review/webtocprinter.rb +8 -4
  64. data/review.gemspec +4 -3
  65. data/templates/latex/config.erb +84 -0
  66. data/templates/latex/layout.tex.erb +76 -361
  67. data/templates/latex/review-jlreq/README.md +22 -0
  68. data/templates/latex/review-jlreq/review-base.sty +178 -0
  69. data/templates/latex/review-jlreq/review-custom.sty +1 -0
  70. data/templates/latex/review-jlreq/review-jlreq.cls +141 -0
  71. data/templates/latex/review-jlreq/review-style.sty +149 -0
  72. data/templates/latex/review-jlreq/reviewmacro.sty +8 -0
  73. data/templates/latex/review-jsbook/jumoline.sty +310 -0
  74. data/templates/latex/review-jsbook/plistings.sty +326 -0
  75. data/templates/latex/review-jsbook/review-base.sty +405 -0
  76. data/templates/latex/review-jsbook/review-custom.sty +1 -0
  77. data/templates/latex/review-jsbook/review-style.sty +38 -0
  78. data/templates/latex/review-jsbook/reviewmacro.sty +8 -0
  79. data/templates/latex-compat2/layout.tex.erb +387 -0
  80. data/test/assets/test_template.tex +105 -235
  81. data/test/assets/test_template_backmatter.tex +133 -14
  82. data/test/book_test_helper.rb +1 -1
  83. data/test/run_test.rb +2 -0
  84. data/test/sample-book/src/Rakefile +11 -6
  85. data/test/sample-book/src/config.yml +2 -2
  86. data/test/sample-book/src/sty/reviewmacro.sty +1 -39
  87. data/test/sample-book/src/style.css +6 -0
  88. data/test/syntax-book/config.yml +1 -1
  89. data/test/test_book.rb +13 -16
  90. data/test/test_book_chapter.rb +4 -10
  91. data/test/test_book_part.rb +4 -3
  92. data/test/test_catalog.rb +15 -4
  93. data/test/test_helper.rb +2 -2
  94. data/test/test_htmlbuilder.rb +78 -10
  95. data/test/test_htmlutils.rb +12 -5
  96. data/test/test_idgxmlbuilder.rb +1 -1
  97. data/test/test_latexbuilder.rb +94 -49
  98. data/test/test_latexbuilder_v2.rb +1077 -0
  99. data/test/test_logger.rb +20 -0
  100. data/test/test_markdownbuilder.rb +10 -0
  101. data/test/test_pdfmaker.rb +6 -7
  102. data/test/test_plaintextbuilder.rb +1 -1
  103. data/test/test_review_ext.rb +0 -1
  104. data/test/test_rstbuilder.rb +1 -1
  105. data/test/test_topbuilder.rb +19 -7
  106. data/test/test_webtocprinter.rb +14 -14
  107. data/{test/sample-book/src/vendor → vendor}/jumoline/README +0 -0
  108. data/{test/sample-book/src/vendor → vendor}/jumoline/jumoline.dtx +0 -0
  109. data/{test/sample-book/src/vendor → vendor}/jumoline/jumoline.ins +0 -0
  110. data/{test/sample-book/src/vendor → vendor}/jumoline/lppl.txt +0 -0
  111. data/vendor/plistings/.gitignore +9 -0
  112. data/vendor/plistings/LICENSE +21 -0
  113. data/vendor/plistings/README.md +18 -0
  114. data/vendor/plistings/plistings.sty +326 -0
  115. data/vendor/plistings/test1.tex +174 -0
  116. data/vendor/plistings/test2.tex +54 -0
  117. metadata +48 -19
  118. data/lib/review/unfold.rb +0 -129
  119. data/test/CHAPS +0 -2
  120. data/test/bib.re +0 -13
  121. data/test/test.re +0 -43
@@ -16,7 +16,7 @@ module ReVIEW
16
16
  include TextUtils
17
17
  include HTMLUtils
18
18
 
19
- %i[ttbold hint maru keytop labelref ref balloon].each { |e| Compiler.definline(e) }
19
+ %i[ttbold hint maru keytop labelref ref].each { |e| Compiler.definline(e) }
20
20
  Compiler.defsingle(:dtp, 1)
21
21
 
22
22
  Compiler.defblock(:insn, 0..1)
@@ -44,8 +44,7 @@ module ReVIEW
44
44
  '.xml'
45
45
  end
46
46
 
47
- def builder_init(no_error = false)
48
- @no_error = no_error
47
+ def builder_init
49
48
  end
50
49
  private :builder_init
51
50
 
@@ -62,13 +61,12 @@ module ReVIEW
62
61
  @ol_num = nil
63
62
  @first_line_num = nil
64
63
  @rootelement = 'doc'
65
- @secttags = nil
66
64
  @tsize = nil
67
65
  @texblockequation = 0
68
66
  @texinlineequation = 0
69
67
  print %Q(<?xml version="1.0" encoding="UTF-8"?>\n)
70
68
  print %Q(<#{@rootelement} xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/">)
71
- @secttags = true unless @book.config['structuredxml'].nil?
69
+ @secttags = @book.config['structuredxml']
72
70
  end
73
71
  private :builder_init_file
74
72
 
@@ -102,7 +100,7 @@ module ReVIEW
102
100
  print '</sect>' if @section > 0
103
101
  end
104
102
 
105
- print %Q(<chapter id="chap:#{@chapter.number}">) unless @secttags.nil?
103
+ print %Q(<chapter id="chap:#{@chapter.number}">) if @secttags
106
104
 
107
105
  @section = 0
108
106
  @subsection = 0
@@ -116,7 +114,7 @@ module ReVIEW
116
114
  print '</sect>' if @section > 0
117
115
  end
118
116
  @section += 1
119
- print %Q(<sect id="sect:#{@chapter.number}.#{@section}">) unless @secttags.nil?
117
+ print %Q(<sect id="sect:#{@chapter.number}.#{@section}">) if @secttags
120
118
 
121
119
  @subsection = 0
122
120
  @subsubsection = 0
@@ -129,7 +127,7 @@ module ReVIEW
129
127
  end
130
128
 
131
129
  @subsection += 1
132
- print %Q(<sect2 id="sect:#{@chapter.number}.#{@section}.#{@subsection}">) unless @secttags.nil?
130
+ print %Q(<sect2 id="sect:#{@chapter.number}.#{@section}.#{@subsection}">) if @secttags
133
131
 
134
132
  @subsubsection = 0
135
133
  @subsubsubsection = 0
@@ -155,7 +153,7 @@ module ReVIEW
155
153
  prefix, _anchor = headline_prefix(level)
156
154
 
157
155
  label = label.nil? ? '' : %Q( id="#{label}")
158
- toccaption = escape_html(compile_inline(caption.gsub(/@<fn>\{.+?\}/, '')).gsub(/<[^>]+>/, ''))
156
+ toccaption = escape(compile_inline(caption.gsub(/@<fn>\{.+?\}/, '')).gsub(/<[^>]+>/, ''))
159
157
  puts %Q(<title#{label} aid:pstyle="h#{level}">#{prefix}#{compile_inline(caption)}</title><?dtp level="#{level}" section="#{prefix}#{toccaption}"?>)
160
158
  end
161
159
 
@@ -591,12 +589,12 @@ module ReVIEW
591
589
  lines ||= []
592
590
  lines.unshift comment unless comment.blank?
593
591
  str = lines.join("\n")
594
- print "<msg>#{escape_html(str)}</msg>"
592
+ print "<msg>#{escape(str)}</msg>"
595
593
  end
596
594
 
597
595
  def inline_comment(str)
598
596
  if @book.config['draft']
599
- %Q(<msg>#{escape_html(str)}</msg>)
597
+ %Q(<msg>#{escape(str)}</msg>)
600
598
  else
601
599
  ''
602
600
  end
@@ -613,34 +611,34 @@ module ReVIEW
613
611
  end
614
612
 
615
613
  def compile_ruby(base, ruby)
616
- %Q(<GroupRuby><aid:ruby xmlns:aid="http://ns.adobe.com/AdobeInDesign/3.0/"><aid:rb>#{escape_html(base.strip)}</aid:rb><aid:rt>#{escape_html(ruby.strip)}</aid:rt></aid:ruby></GroupRuby>)
614
+ %Q(<GroupRuby><aid:ruby xmlns:aid="http://ns.adobe.com/AdobeInDesign/3.0/"><aid:rb>#{escape(base.strip)}</aid:rb><aid:rt>#{escape(ruby.strip)}</aid:rt></aid:ruby></GroupRuby>)
617
615
  end
618
616
 
619
617
  def compile_kw(word, alt)
620
618
  '<keyword>' +
621
619
  if alt
622
- then escape_html("#{word}(#{alt.strip})")
623
- else escape_html(word)
620
+ then escape("#{word}(#{alt.strip})")
621
+ else escape(word)
624
622
  end +
625
623
  '</keyword>' +
626
- %Q(<index value="#{escape_html(word)}" />) +
624
+ %Q(<index value="#{escape(word)}" />) +
627
625
  if alt
628
- alt.split(/\s*,\s*/).collect! { |e| %Q(<index value="#{escape_html(e.strip)}" />) }.join
626
+ alt.split(/\s*,\s*/).collect! { |e| %Q(<index value="#{escape(e.strip)}" />) }.join
629
627
  else
630
628
  ''
631
629
  end
632
630
  end
633
631
 
634
632
  def compile_href(url, label)
635
- %Q(<a linkurl='#{escape_html(url)}'>#{label.nil? ? escape_html(url) : escape_html(label)}</a>)
633
+ %Q(<a linkurl='#{escape(url)}'>#{label.nil? ? escape(url) : escape(label)}</a>)
636
634
  end
637
635
 
638
636
  def inline_sup(str)
639
- %Q(<sup>#{escape_html(str)}</sup>)
637
+ %Q(<sup>#{escape(str)}</sup>)
640
638
  end
641
639
 
642
640
  def inline_sub(str)
643
- %Q(<sub>#{escape_html(str)}</sub>)
641
+ %Q(<sub>#{escape(str)}</sub>)
644
642
  end
645
643
 
646
644
  def inline_raw(str)
@@ -649,9 +647,9 @@ module ReVIEW
649
647
 
650
648
  def inline_hint(str)
651
649
  if @book.config['nolf']
652
- %Q(<hint>#{escape_html(str)}</hint>)
650
+ %Q(<hint>#{escape(str)}</hint>)
653
651
  else
654
- %Q(\n<hint>#{escape_html(str)}</hint>)
652
+ %Q(\n<hint>#{escape(str)}</hint>)
655
653
  end
656
654
  end
657
655
 
@@ -676,41 +674,41 @@ module ReVIEW
676
674
  end
677
675
 
678
676
  def inline_idx(str)
679
- %Q(#{escape_html(str)}<index value="#{escape_html(str)}" />)
677
+ %Q(#{escape(str)}<index value="#{escape(str)}" />)
680
678
  end
681
679
 
682
680
  def inline_hidx(str)
683
- %Q(<index value="#{escape_html(str)}" />)
681
+ %Q(<index value="#{escape(str)}" />)
684
682
  end
685
683
 
686
684
  def inline_ami(str)
687
- %Q(<ami>#{escape_html(str)}</ami>)
685
+ %Q(<ami>#{escape(str)}</ami>)
688
686
  end
689
687
 
690
688
  def inline_i(str)
691
- %Q(<i>#{escape_html(str)}</i>)
689
+ %Q(<i>#{escape(str)}</i>)
692
690
  end
693
691
 
694
692
  def inline_b(str)
695
- %Q(<b>#{escape_html(str)}</b>)
693
+ %Q(<b>#{escape(str)}</b>)
696
694
  end
697
695
 
698
696
  def inline_tt(str)
699
- %Q(<tt>#{escape_html(str)}</tt>)
697
+ %Q(<tt>#{escape(str)}</tt>)
700
698
  end
701
699
 
702
700
  def inline_ttb(str)
703
- %Q(<tt style='bold'>#{escape_html(str)}</tt>)
701
+ %Q(<tt style='bold'>#{escape(str)}</tt>)
704
702
  end
705
703
 
706
704
  alias_method :inline_ttbold, :inline_ttb
707
705
 
708
706
  def inline_tti(str)
709
- %Q(<tt style='italic'>#{escape_html(str)}</tt>)
707
+ %Q(<tt style='italic'>#{escape(str)}</tt>)
710
708
  end
711
709
 
712
710
  def inline_u(str)
713
- %Q(<underline>#{escape_html(str)}</underline>)
711
+ %Q(<underline>#{escape(str)}</underline>)
714
712
  end
715
713
 
716
714
  def inline_icon(id)
@@ -723,25 +721,25 @@ module ReVIEW
723
721
  end
724
722
 
725
723
  def inline_bou(str)
726
- %Q(<bou>#{escape_html(str)}</bou>)
724
+ %Q(<bou>#{escape(str)}</bou>)
727
725
  end
728
726
 
729
727
  def inline_keytop(str)
730
- %Q(<keytop>#{escape_html(str)}</keytop>)
728
+ %Q(<keytop>#{escape(str)}</keytop>)
731
729
  end
732
730
 
733
731
  def inline_labelref(idref)
734
- %Q(<ref idref='#{escape_html(idref)}'>「#{I18n.t('label_marker')}#{escape_html(idref)}」</ref>) # FIXME: 節名とタイトルも込みで要出力
732
+ %Q(<ref idref='#{escape(idref)}'>「#{I18n.t('label_marker')}#{escape(idref)}」</ref>) # FIXME: 節名とタイトルも込みで要出力
735
733
  end
736
734
 
737
735
  alias_method :inline_ref, :inline_labelref
738
736
 
739
737
  def inline_pageref(idref)
740
- %Q(<pageref idref='#{escape_html(idref)}'>●●</pageref>) # ページ番号を参照
738
+ %Q(<pageref idref='#{escape(idref)}'>●●</pageref>) # ページ番号を参照
741
739
  end
742
740
 
743
741
  def inline_balloon(str)
744
- %Q(<balloon>#{escape_html(str).gsub(/@maru\[(\d+)\]/) { inline_maru($1) }}</balloon>)
742
+ %Q(<balloon>#{escape(str).gsub(/@maru\[(\d+)\]/) { inline_maru($1) }}</balloon>)
745
743
  end
746
744
 
747
745
  def inline_uchar(str)
@@ -750,7 +748,7 @@ module ReVIEW
750
748
 
751
749
  def inline_m(str)
752
750
  @texinlineequation += 1
753
- %Q(<replace idref="texinline-#{@texinlineequation}"><pre>#{escape_html(str)}</pre></replace>)
751
+ %Q(<replace idref="texinline-#{@texinlineequation}"><pre>#{escape(str)}</pre></replace>)
754
752
  end
755
753
 
756
754
  def noindent
@@ -766,12 +764,25 @@ module ReVIEW
766
764
  end
767
765
 
768
766
  def nonum_begin(level, _label, caption)
769
- puts %Q(<title aid:pstyle="h#{level}">#{compile_inline(caption)}</title><?dtp level="#{level}" section="#{escape_html(compile_inline(caption))}"?>)
767
+ puts %Q(<title aid:pstyle="h#{level}">#{compile_inline(caption)}</title><?dtp level="#{level}" section="#{escape(compile_inline(caption))}"?>)
770
768
  end
771
769
 
772
770
  def nonum_end(level)
773
771
  end
774
772
 
773
+ def notoc_begin(level, _label, caption)
774
+ puts %Q(<title aid:pstyle="h#{level}">#{compile_inline(caption)}</title>)
775
+ end
776
+
777
+ def notoc_end(level)
778
+ end
779
+
780
+ def nodisp_begin(level, label, caption)
781
+ end
782
+
783
+ def nodisp_end(level)
784
+ end
785
+
775
786
  def circle_begin(_level, _label, caption)
776
787
  puts %Q(<title aid:pstyle="smallcircle">&#x2022;#{compile_inline(caption)}</title>)
777
788
  end
@@ -783,7 +794,7 @@ module ReVIEW
783
794
  @column += 1
784
795
  a_id = %Q(id="column-#{@column}")
785
796
  print "<#{type}column #{a_id}>"
786
- puts %Q(<title aid:pstyle="#{type}column-title">#{compile_inline(caption)}</title><?dtp level="9" section="#{escape_html(compile_inline(caption))}"?>)
797
+ puts %Q(<title aid:pstyle="#{type}column-title">#{compile_inline(caption)}</title><?dtp level="9" section="#{escape(compile_inline(caption))}"?>)
787
798
  end
788
799
 
789
800
  def common_column_end(type)
@@ -1035,7 +1046,7 @@ module ReVIEW
1035
1046
  end
1036
1047
 
1037
1048
  def inline_code(str)
1038
- %Q(<tt type='inline-code'>#{escape_html(str)}</tt>)
1049
+ %Q(<tt type='inline-code'>#{escape(str)}</tt>)
1039
1050
  end
1040
1051
 
1041
1052
  def inline_br(_str)
@@ -1142,11 +1153,11 @@ module ReVIEW
1142
1153
 
1143
1154
  def inline_recipe(id)
1144
1155
  # FIXME
1145
- %Q(<recipe idref="#{escape_html(id)}">[XXX]「#{escape_html(id)}」 p.XX</recipe>)
1156
+ %Q(<recipe idref="#{escape(id)}">[XXX]「#{escape(id)}」 p.XX</recipe>)
1146
1157
  end
1147
1158
 
1148
1159
  def nofunc_text(str)
1149
- escape_html(str)
1160
+ escape(str)
1150
1161
  end
1151
1162
 
1152
1163
  def image_ext
@@ -0,0 +1,194 @@
1
+ #
2
+ # Copyright (c) 2018 Masanori Kado, Masayoshi Takahashi, Kenshi Muto
3
+ #
4
+ # This program is free software.
5
+ # You can distribute or modify this program under the terms of
6
+ # the GNU LGPL, Lesser General Public License version 2.1.
7
+ # For details of the GNU LGPL, see the file "COPYING".
8
+
9
+ require 'fileutils'
10
+ require 'optparse'
11
+ require 'review'
12
+
13
+ module ReVIEW
14
+ class Init
15
+ def self.execute(*args)
16
+ new.execute(*args)
17
+ end
18
+
19
+ def initialize
20
+ @template = 'review-jsbook'
21
+ @logger = ReVIEW.logger
22
+ @review_dir = File.dirname(File.expand_path('..', __dir__))
23
+ end
24
+
25
+ def execute(*args)
26
+ initdir = parse_options(args)
27
+
28
+ generate_dir(initdir) do |dir|
29
+ generate_catalog_file(dir)
30
+ generate_sample(dir)
31
+ generate_images_dir(dir)
32
+ generate_cover_image(dir)
33
+ generate_layout(dir)
34
+ generate_style(dir)
35
+ generate_texmacro(dir)
36
+ generate_config(dir)
37
+ generate_locale(dir) if @locale
38
+ generate_rakefile(dir)
39
+ generate_gemfile(dir)
40
+ generate_doc(dir) unless @without_doc
41
+ end
42
+ end
43
+
44
+ def parse_options(args)
45
+ opts = OptionParser.new
46
+ opts.version = ReVIEW::VERSION
47
+ opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [option] dirname"
48
+ opts.on('-h', '--help', 'print this message and quit.') do
49
+ puts opts.help
50
+ exit 0
51
+ end
52
+ opts.on('-f', '--force', 'generate files (except *.re) if directory has already existed.') do
53
+ @force = true
54
+ end
55
+ opts.on('-l', '--locale', 'generate locale.yml file.') do
56
+ @locale = true
57
+ end
58
+ opts.on('--latex-template name', 'specify LaTeX template name. (default: review-jsbook)') do |tname|
59
+ @template = tname
60
+ end
61
+ opts.on('', '--epub-version VERSION', 'define EPUB version') do |version|
62
+ @epub_version = version
63
+ end
64
+ opts.on('', '--without-doc', "don't generate doc files") do
65
+ @without_doc = true
66
+ end
67
+
68
+ begin
69
+ opts.parse!(args)
70
+ rescue OptionParser::ParseError => err
71
+ @logger.error err.message
72
+ $stderr.puts opts.help
73
+ exit 1
74
+ end
75
+
76
+ if args.empty?
77
+ $stderr.puts opts.help
78
+ exit 1
79
+ end
80
+
81
+ initdir = File.expand_path(args[0])
82
+
83
+ initdir
84
+ end
85
+
86
+ def generate_dir(dir)
87
+ if File.exist?(dir) && !@force
88
+ @logger.error "#{dir} already exists."
89
+ exit 1
90
+ end
91
+ FileUtils.mkdir_p dir
92
+ yield dir
93
+ end
94
+
95
+ def generate_sample(dir)
96
+ unless @force
97
+ File.write("#{dir}/#{File.basename(dir)}.re", '= ')
98
+ end
99
+ end
100
+
101
+ def generate_layout(dir)
102
+ FileUtils.mkdir_p dir + '/layouts'
103
+ end
104
+
105
+ def generate_catalog_file(dir)
106
+ File.open(dir + '/catalog.yml', 'w') do |file|
107
+ file.write <<-EOS
108
+ PREDEF:
109
+
110
+ CHAPS:
111
+ - #{File.basename(dir)}.re
112
+
113
+ APPENDIX:
114
+
115
+ POSTDEF:
116
+
117
+ EOS
118
+ end
119
+ end
120
+
121
+ def generate_images_dir(dir)
122
+ FileUtils.mkdir_p(dir + '/images')
123
+ end
124
+
125
+ def generate_cover_image(dir)
126
+ FileUtils.cp(@review_dir + '/test/sample-book/src/images/cover.jpg',
127
+ dir + '/images/')
128
+ end
129
+
130
+ def generate_config(dir)
131
+ today = Time.now.strftime('%Y-%m-%d')
132
+ content = File.read(@review_dir + '/doc/config.yml.sample', encoding: 'utf-8')
133
+ content.gsub!(/^#\s*coverimage:.*$/, 'coverimage: cover.jpg')
134
+ content.gsub!(/^#\s*date:.*$/, "date: #{today}")
135
+ content.gsub!(/^#\s*history:.*$/, %Q(history: [["#{today}"]]))
136
+ content.gsub!(/^#\s*texstyle:.*$/, 'texstyle: reviewmacro')
137
+ content.gsub!(/^(#\s*)?stylesheet:.*$/, %Q(stylesheet: ["style.css"]))
138
+ if @epub_version.to_i == 2
139
+ content.gsub!(/^#.*epubversion:.*$/, 'epubversion: 2')
140
+ content.gsub!(/^#.*htmlversion:.*$/, 'htmlversion: 4')
141
+ end
142
+ File.open(File.join(dir, 'config.yml'), 'w') { |f| f.write(content) }
143
+ end
144
+
145
+ def generate_style(dir)
146
+ FileUtils.cp @review_dir + '/test/sample-book/src/style.css', dir
147
+ end
148
+
149
+ def generate_texmacro(dir)
150
+ texmacrodir = dir + '/sty'
151
+ FileUtils.mkdir_p texmacrodir
152
+ tdir = File.join(@review_dir, '/templates/latex', @template)
153
+ @logger.error "#{tdir} not found." unless File.exist?(tdir)
154
+ FileUtils.cp Dir.glob(tdir + '/*.*'), texmacrodir
155
+ end
156
+
157
+ def generate_rakefile(dir)
158
+ FileUtils.mkdir_p dir + '/lib/tasks'
159
+
160
+ File.open(dir + '/Rakefile', 'w') do |file|
161
+ file.write <<-EOS
162
+ Dir.glob('lib/tasks/*.rake').each do |file|
163
+ load(file)
164
+ end
165
+ EOS
166
+ end
167
+
168
+ FileUtils.cp(@review_dir + '/test/sample-book/src/Rakefile',
169
+ dir + '/lib/tasks/review.rake')
170
+ end
171
+
172
+ def generate_locale(dir)
173
+ FileUtils.cp @review_dir + '/lib/review/i18n.yml', dir + '/locale.yml'
174
+ end
175
+
176
+ def generate_gemfile(dir)
177
+ File.open(dir + '/Gemfile', 'w') do |file|
178
+ file.write <<-EOS
179
+ source 'https://rubygems.org'
180
+
181
+ gem 'rake'
182
+ gem 'review', '#{ReVIEW::VERSION}'
183
+ EOS
184
+ end
185
+ end
186
+
187
+ def generate_doc(dir)
188
+ docdir = dir + '/doc'
189
+ FileUtils.mkdir_p docdir
190
+ md_files = Dir.glob(@review_dir + '/doc/*.md').map.to_a
191
+ FileUtils.cp md_files, docdir
192
+ end
193
+ end
194
+ end