review 4.0.0 → 5.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-tex.yml +31 -0
  3. data/.github/workflows/ruby-win.yml +45 -0
  4. data/.github/workflows/ruby.yml +27 -0
  5. data/.rubocop.yml +141 -38
  6. data/Dockerfile +21 -5
  7. data/NEWS.ja.md +338 -1
  8. data/NEWS.md +339 -2
  9. data/README.md +11 -7
  10. data/Rakefile +7 -2
  11. data/appveyor.yml +0 -20
  12. data/bin/review +2 -4
  13. data/bin/review-catalog-converter +4 -4
  14. data/bin/review-check +8 -12
  15. data/bin/review-checkdep +2 -5
  16. data/bin/review-compile +11 -20
  17. data/bin/review-epub2html +1 -4
  18. data/bin/review-epubmaker +3 -4
  19. data/bin/review-idgxmlmaker +1 -3
  20. data/bin/review-index +5 -86
  21. data/bin/review-init +1 -4
  22. data/bin/review-pdfmaker +1 -3
  23. data/bin/review-preproc +3 -5
  24. data/bin/review-textmaker +1 -3
  25. data/bin/review-update +1 -4
  26. data/bin/review-validate +5 -5
  27. data/bin/review-vol +5 -82
  28. data/bin/review-webmaker +1 -3
  29. data/doc/config.yml.sample +55 -12
  30. data/doc/config.yml.sample-simple +4 -3
  31. data/doc/format.ja.md +119 -17
  32. data/doc/format.md +106 -17
  33. data/doc/makeindex.ja.md +2 -2
  34. data/doc/pdfmaker.ja.md +42 -0
  35. data/doc/pdfmaker.md +41 -0
  36. data/doc/quickstart.ja.md +55 -25
  37. data/doc/quickstart.md +47 -17
  38. data/lib/review.rb +1 -1
  39. data/lib/review/book.rb +2 -2
  40. data/lib/review/book/base.rb +69 -30
  41. data/lib/review/book/bib.rb +21 -0
  42. data/lib/review/book/book_unit.rb +158 -0
  43. data/lib/review/book/chapter.rb +33 -26
  44. data/lib/review/book/index.rb +39 -206
  45. data/lib/review/book/index/item.rb +8 -2
  46. data/lib/review/book/page_metric.rb +7 -7
  47. data/lib/review/book/part.rb +26 -11
  48. data/lib/review/book/volume.rb +5 -5
  49. data/lib/review/builder.rb +124 -27
  50. data/lib/review/call_hook.rb +20 -0
  51. data/lib/review/catalog.rb +3 -2
  52. data/lib/review/compiler.rb +197 -91
  53. data/lib/review/configure.rb +95 -9
  54. data/lib/review/converter.rb +1 -1
  55. data/lib/review/epub2html.rb +6 -1
  56. data/lib/review/epubmaker.rb +116 -117
  57. data/lib/review/epubmaker/content.rb +113 -0
  58. data/lib/review/epubmaker/epubcommon.rb +372 -0
  59. data/lib/review/epubmaker/epubv2.rb +178 -0
  60. data/lib/review/epubmaker/epubv3.rb +231 -0
  61. data/lib/review/epubmaker/producer.rb +168 -0
  62. data/lib/review/epubmaker/reviewheaderlistener.rb +12 -2
  63. data/lib/review/epubmaker/zip_exporter.rb +84 -0
  64. data/lib/review/exception.rb +6 -0
  65. data/lib/review/extentions/string.rb +0 -4
  66. data/lib/review/htmlbuilder.rb +132 -87
  67. data/lib/review/htmlutils.rb +8 -11
  68. data/lib/review/i18n.rb +2 -1
  69. data/lib/review/idgxmlbuilder.rb +156 -76
  70. data/lib/review/idgxmlmaker.rb +22 -18
  71. data/lib/review/img_math.rb +245 -0
  72. data/lib/review/index_builder.rb +654 -0
  73. data/lib/review/init.rb +17 -18
  74. data/lib/review/latexbox.rb +58 -0
  75. data/lib/review/latexbuilder.rb +173 -43
  76. data/lib/review/latexutils.rb +9 -1
  77. data/lib/review/lineinput.rb +112 -2
  78. data/lib/review/logger.rb +42 -3
  79. data/lib/review/makerhelper.rb +12 -187
  80. data/lib/review/markdownbuilder.rb +51 -2
  81. data/lib/review/pdfmaker.rb +78 -73
  82. data/lib/review/plaintextbuilder.rb +98 -14
  83. data/lib/review/preprocessor.rb +18 -12
  84. data/lib/review/rstbuilder.rb +28 -9
  85. data/lib/review/sec_counter.rb +14 -0
  86. data/lib/review/template.rb +6 -0
  87. data/lib/review/textmaker.rb +21 -19
  88. data/lib/review/textutils.rb +3 -12
  89. data/lib/review/tocprinter.rb +242 -97
  90. data/lib/review/topbuilder.rb +91 -24
  91. data/lib/review/update.rb +12 -13
  92. data/lib/review/version.rb +1 -1
  93. data/lib/review/volumeprinter.rb +97 -0
  94. data/lib/review/webmaker.rb +34 -33
  95. data/lib/review/webtocprinter.rb +39 -35
  96. data/lib/review/yamlloader.rb +2 -1
  97. data/review.gemspec +5 -3
  98. data/samples/sample-book/src/.gitignore +1 -0
  99. data/samples/sample-book/src/config-ebook.yml +4 -0
  100. data/samples/sample-book/src/config-epub2.yml +1 -1
  101. data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
  102. data/samples/sample-book/src/config.yml +3 -3
  103. data/samples/sample-book/src/lib/tasks/review.rake +26 -6
  104. data/samples/syntax-book/Gemfile +1 -1
  105. data/samples/syntax-book/ch01.re +3 -1
  106. data/samples/syntax-book/ch02.re +28 -21
  107. data/samples/syntax-book/ch03.re +1 -1
  108. data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
  109. data/samples/syntax-book/config-print.yml +3 -0
  110. data/samples/syntax-book/config.yml +1 -1
  111. data/samples/syntax-book/images/img3-2.png +0 -0
  112. data/samples/syntax-book/lib/tasks/review.rake +23 -8
  113. data/templates/html/_colophon.html.erb +23 -0
  114. data/templates/html/_colophon_history.html.erb +9 -0
  115. data/templates/html/_cover.html.erb +10 -0
  116. data/templates/html/_part_body.html.erb +6 -0
  117. data/templates/html/_titlepage.html.erb +20 -0
  118. data/templates/html/layout-html5.html.erb +6 -0
  119. data/templates/html/layout-xhtml1.html.erb +6 -0
  120. data/templates/latex/config.erb +41 -29
  121. data/templates/latex/review-jlreq/README.md +3 -1
  122. data/templates/latex/review-jlreq/review-base.sty +47 -22
  123. data/templates/latex/review-jlreq/review-jlreq.cls +25 -24
  124. data/templates/latex/review-jlreq/review-style.sty +6 -1
  125. data/templates/latex/review-jlreq/review-tcbox.sty +348 -0
  126. data/templates/latex/review-jlreq/reviewmacro.sty +5 -0
  127. data/templates/latex/review-jsbook/README.md +7 -5
  128. data/templates/latex/review-jsbook/review-base.sty +47 -21
  129. data/templates/latex/review-jsbook/review-jsbook.cls +12 -2
  130. data/templates/latex/review-jsbook/review-style.sty +6 -1
  131. data/templates/latex/review-jsbook/review-tcbox.sty +348 -0
  132. data/templates/latex/review-jsbook/reviewmacro.sty +5 -0
  133. data/templates/opf/epubv2.opf.erb +7 -7
  134. data/templates/opf/epubv3.opf.erb +7 -7
  135. data/templates/opf/opf_manifest_epubv2.opf.erb +10 -0
  136. data/templates/opf/opf_manifest_epubv3.opf.erb +10 -0
  137. data/templates/opf/opf_metainfo_epubv2.opf.erb +17 -0
  138. data/templates/opf/opf_metainfo_epubv3.opf.erb +49 -0
  139. data/templates/opf/opf_tocx_epubv2.opf.erb +9 -0
  140. data/templates/opf/opf_tocx_epubv3.opf.erb +17 -0
  141. data/templates/web/html/layout-html5.html.erb +9 -8
  142. data/templates/web/html/layout-xhtml1.html.erb +6 -0
  143. data/test/assets/header_listener.html +35 -0
  144. data/test/assets/img_math/img1.png +0 -0
  145. data/test/assets/img_math/img2.png +0 -0
  146. data/test/assets/img_math/img3.png +0 -0
  147. data/test/assets/syntax_book_index_detail.txt +58 -0
  148. data/test/assets/test_template.tex +12 -9
  149. data/test/assets/test_template_backmatter.tex +12 -9
  150. data/test/book_test_helper.rb +11 -5
  151. data/test/run_test.rb +1 -1
  152. data/test/test_book.rb +62 -63
  153. data/test/test_book_chapter.rb +99 -56
  154. data/test/test_book_part.rb +3 -3
  155. data/test/test_builder.rb +24 -15
  156. data/test/test_catalog.rb +1 -0
  157. data/test/test_catalog_converter_cmd.rb +1 -1
  158. data/test/test_converter.rb +1 -0
  159. data/test/test_epub3maker.rb +170 -126
  160. data/test/test_epubmaker.rb +249 -129
  161. data/test/test_epubmaker_cmd.rb +14 -7
  162. data/test/test_helper.rb +23 -11
  163. data/test/test_htmlbuilder.rb +956 -76
  164. data/test/test_htmlutils.rb +0 -12
  165. data/test/test_i18n.rb +33 -33
  166. data/test/test_idgxmlbuilder.rb +568 -10
  167. data/test/test_idgxmlmaker_cmd.rb +50 -0
  168. data/test/test_image_finder.rb +52 -70
  169. data/test/test_img_math.rb +111 -0
  170. data/test/test_index.rb +62 -52
  171. data/test/test_indexbuilder.rb +52 -0
  172. data/test/test_latexbuilder.rb +1056 -30
  173. data/test/test_latexbuilder_v2.rb +52 -12
  174. data/test/test_lineinput.rb +20 -93
  175. data/test/test_logger.rb +7 -7
  176. data/test/test_makerhelper.rb +0 -12
  177. data/test/test_markdownbuilder.rb +32 -0
  178. data/test/test_pdfmaker.rb +100 -11
  179. data/test/test_pdfmaker_cmd.rb +101 -7
  180. data/test/test_plaintextbuilder.rb +531 -25
  181. data/test/test_review_ext.rb +2 -1
  182. data/test/test_reviewheaderlistener.rb +49 -0
  183. data/test/test_rstbuilder.rb +25 -1
  184. data/test/test_sec_counter.rb +156 -0
  185. data/test/test_template.rb +12 -2
  186. data/test/test_textmaker_cmd.rb +58 -0
  187. data/test/test_tocprinter.rb +46 -0
  188. data/test/test_topbuilder.rb +365 -10
  189. data/test/test_update.rb +44 -44
  190. data/test/test_webtocprinter.rb +75 -43
  191. data/test/test_zip_exporter.rb +5 -6
  192. data/vendor/gentombow/LICENSE +1 -1
  193. data/vendor/gentombow/Makefile +0 -1
  194. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  195. data/vendor/gentombow/bounddvi-en.tex +1 -0
  196. data/vendor/gentombow/bounddvi.pdf +0 -0
  197. data/vendor/gentombow/bounddvi.sty +30 -7
  198. data/vendor/gentombow/bounddvi.tex +1 -0
  199. data/vendor/gentombow/create_archive.sh +1 -0
  200. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  201. data/vendor/gentombow/gentombow-ja.tex +9 -0
  202. data/vendor/gentombow/gentombow.pdf +0 -0
  203. data/vendor/gentombow/gentombow.sty +32 -10
  204. data/vendor/gentombow/gentombow.tex +8 -0
  205. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  206. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  207. data/vendor/jsclasses/LICENSE +1 -1
  208. data/vendor/jsclasses/Makefile +3 -2
  209. data/vendor/jsclasses/create_archive.sh +5 -5
  210. data/vendor/jsclasses/jis/Makefile +3 -2
  211. data/vendor/jsclasses/jis/jsarticle.cls +74 -31
  212. data/vendor/jsclasses/jis/jsbook.cls +74 -31
  213. data/vendor/jsclasses/jis/jsclasses.dtx +176 -36
  214. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  215. data/vendor/jsclasses/jis/jslogo.dtx +4 -4
  216. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  217. data/vendor/jsclasses/jis/jslogo.sty +4 -16
  218. data/vendor/jsclasses/jis/jspf.cls +73 -30
  219. data/vendor/jsclasses/jis/jsreport.cls +74 -31
  220. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  221. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  222. data/vendor/jsclasses/jis/kiyou.cls +74 -31
  223. data/vendor/jsclasses/jis/minijs.sty +65 -22
  224. data/vendor/jsclasses/jis/okumacro.dtx +4 -5
  225. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  226. data/vendor/jsclasses/jis/okumacro.sty +4 -17
  227. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  228. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  229. data/vendor/jsclasses/jis/winjis.sty +23 -19
  230. data/vendor/jsclasses/jsarticle.cls +74 -31
  231. data/vendor/jsclasses/jsbook.cls +74 -31
  232. data/vendor/jsclasses/jsclasses.dtx +176 -36
  233. data/vendor/jsclasses/jsclasses.ins +15 -5
  234. data/vendor/jsclasses/jsclasses.pdf +0 -0
  235. data/vendor/jsclasses/jslogo.dtx +4 -4
  236. data/vendor/jsclasses/jslogo.ins +9 -0
  237. data/vendor/jsclasses/jslogo.pdf +0 -0
  238. data/vendor/jsclasses/jslogo.sty +4 -16
  239. data/vendor/jsclasses/jspf.cls +73 -30
  240. data/vendor/jsclasses/jsreport.cls +74 -31
  241. data/vendor/jsclasses/jsverb.ins +9 -0
  242. data/vendor/jsclasses/jsverb.pdf +0 -0
  243. data/vendor/jsclasses/jsverb.sty +1 -13
  244. data/vendor/jsclasses/kiyou.cls +74 -31
  245. data/vendor/jsclasses/minijs.sty +68 -22
  246. data/vendor/jsclasses/okumacro.dtx +4 -5
  247. data/vendor/jsclasses/okumacro.ins +9 -0
  248. data/vendor/jsclasses/okumacro.pdf +0 -0
  249. data/vendor/jsclasses/okumacro.sty +4 -17
  250. data/vendor/jsclasses/okuverb.ins +9 -0
  251. data/vendor/jsclasses/okuverb.pdf +0 -0
  252. data/vendor/jsclasses/okuverb.sty +1 -13
  253. data/vendor/jsclasses/tests/relfont.tex +10 -0
  254. data/vendor/jsclasses/winjis.sty +23 -19
  255. metadata +109 -20
  256. data/.rubocop_todo.yml +0 -7
  257. data/lib/epubmaker.rb +0 -23
  258. data/lib/epubmaker/content.rb +0 -110
  259. data/lib/epubmaker/epubcommon.rb +0 -441
  260. data/lib/epubmaker/epubv2.rb +0 -143
  261. data/lib/epubmaker/epubv3.rb +0 -233
  262. data/lib/epubmaker/producer.rb +0 -375
  263. data/lib/epubmaker/zip_exporter.rb +0 -81
  264. data/lib/lineinput.rb +0 -155
  265. data/lib/review/book/compilable.rb +0 -178
  266. data/lib/review/tocparser.rb +0 -271
  267. data/samples/syntax-book/review-ext.rb +0 -14
  268. data/test/test_tocparser.rb +0 -25
@@ -1,54 +1,58 @@
1
1
  require 'review/tocprinter'
2
2
  require 'review/i18n'
3
+ require 'review/htmlutils'
3
4
 
4
5
  module ReVIEW
5
6
  class WEBTOCPrinter < TOCPrinter
6
7
  include HTMLUtils
7
8
 
8
9
  def self.book_to_string(book)
9
- io = StringIO.new
10
- ReVIEW::WEBTOCPrinter.new(1, {}, io).print_book(book)
11
- io.seek(0)
12
- io.read
10
+ ReVIEW::WEBTOCPrinter.new.print_book(book)
13
11
  end
14
12
 
15
13
  def print_book(book)
16
- @out.puts '<ul class="book-toc">'
17
- @out.puts %Q(<li><a href="index.html">TOP</a></li>\n)
18
- book.each_part do |part|
19
- print_part(part)
20
- end
21
- @out.puts '</ul>'
14
+ @book = book
15
+ @indent = nil
16
+ @upper = 1 # only part and chapter
17
+ print_result(build_result_array)
22
18
  end
23
19
 
24
- def print_part(part)
25
- if part.number
26
- if part.file?
27
- ext = part.book.config['htmlext'] || 'html'
28
- path = File.basename(part.path.sub(/\.re/, '.' + ext))
29
- @out.puts %Q(<li><a href="#{path}">#{h(I18n.t('part_short', part.number) + ' ' + part.title)}</a>\n<ul>\n)
20
+ def print_result(result_array)
21
+ content = <<EOT
22
+ <ul class="book-toc">
23
+ <li><a href="index.html">TOP</a></li>
24
+ EOT
25
+
26
+ path = ''
27
+ result_array.each do |result|
28
+ unless result.headline
29
+ result.headline = '-'
30
+ end
31
+
32
+ if result.name
33
+ path = "#{result.name}.#{@book.config['htmlext']}"
34
+ next
35
+ end
36
+
37
+ if result.part
38
+ if result.part == 'end'
39
+ content << "</ul></li>\n"
40
+ end
41
+ next
42
+ end
43
+
44
+ if path.start_with?('.')
45
+ content << "<li>#{escape(result.headline)}"
30
46
  else
31
- @out.puts %Q(<li>#{h(I18n.t('part_short', part.number) + ' ' + part.title)}\n<ul>\n)
47
+ content << %Q(<li><a href="#{path}">#{escape(result.headline)}</a>)
48
+ end
49
+ if result.level == 0
50
+ content << "\n<ul>" # part
51
+ else
52
+ content << "</li>\n"
32
53
  end
33
54
  end
34
- part.each_chapter do |chap|
35
- print_chapter(chap)
36
- end
37
- if part.number
38
- @out.puts "</ul>\n</li>\n"
39
- end
40
- end
41
-
42
- def print_chapter(chap)
43
- chap_node = TOCParser.chapter_node(chap)
44
- ext = chap.book.config['htmlext'] || 'html'
45
- path = File.basename(chap.path.sub(/\.re/, '.' + ext))
46
- label = if chap_node.number && chap.on_chaps?
47
- "#{I18n.t('chapter_short', chap.number)} #{chap.title}"
48
- else
49
- chap.title
50
- end
51
- @out.puts %Q(<li><a href="#{path}">#{h(label)}</a></li>\n)
55
+ content << "</ul>\n"
52
56
  end
53
57
  end
54
58
  end
@@ -18,9 +18,10 @@ module ReVIEW
18
18
  while file_queue.present?
19
19
  current_file = file_queue.shift
20
20
  current_yaml = YAML.load_file(current_file)
21
- if current_yaml.class == FalseClass
21
+ if current_yaml.instance_of?(FalseClass)
22
22
  raise "#{File.basename(current_file)} is malformed."
23
23
  end
24
+
24
25
  yaml = current_yaml.deep_merge(yaml)
25
26
 
26
27
  if yaml.key?('inherit')
data/review.gemspec CHANGED
@@ -7,12 +7,11 @@ Gem::Specification.new do |gem|
7
7
  gem.platform = Gem::Platform::RUBY
8
8
  gem.license = 'LGPL'
9
9
  gem.authors = %w[kmuto takahashim]
10
- gem.email = 'kmuto@debian.org'
10
+ gem.email = 'kmuto@kmuto.jp'
11
11
  gem.homepage = 'http://github.com/kmuto/review'
12
12
  gem.summary = 'Re:VIEW: a easy-to-use digital publishing system'
13
13
  gem.description = 'Re:VIEW is a digital publishing system for books and ebooks. It supports InDesign, EPUB and LaTeX.'
14
14
  gem.required_rubygems_version = Gem::Requirement.new('>= 0') if gem.respond_to?(:required_rubygems_version=)
15
- gem.date = '2019-10-29'
16
15
 
17
16
  gem.files = `git ls-files`.split("\n")
18
17
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -23,10 +22,13 @@ Gem::Specification.new do |gem|
23
22
  gem.add_dependency('image_size')
24
23
  gem.add_dependency('rouge')
25
24
  gem.add_dependency('rubyzip')
25
+ gem.add_dependency('tty-logger')
26
+ gem.add_development_dependency('mini_magick')
26
27
  gem.add_development_dependency('pygments.rb')
27
28
  gem.add_development_dependency('rake')
28
- gem.add_development_dependency('rubocop', '~> 0.72.0')
29
+ gem.add_development_dependency('rubocop', '~> 1.10.0')
29
30
  gem.add_development_dependency('rubocop-performance')
31
+ gem.add_development_dependency('rubocop-rake')
30
32
  gem.add_development_dependency('simplecov')
31
33
  gem.add_development_dependency('test-unit')
32
34
  gem.add_development_dependency('unicode-eaw')
@@ -5,6 +5,7 @@
5
5
  /*-pdf
6
6
  /*-epub
7
7
  /*-text
8
+ /*-idgxml
8
9
 
9
10
  /vendor
10
11
  /.bundle
@@ -0,0 +1,4 @@
1
+ # call me by 'REVIEW_CONFIG_FILE=config-ebook.yml rake pdf'
2
+ inherit: ["config.yml"]
3
+ pdfmaker:
4
+ texdocumentclass: ["review-jsbook", "media=ebook,paper=a5"]
@@ -11,7 +11,7 @@ language: ja
11
11
  # 書名
12
12
  booktitle: Re:VIEWサンプル書籍
13
13
  # 固有IDに使用するドメイン。省略した場合は時刻に基づくランダムUUIDが入る
14
- urnid: urn:uid:http://tatsu-zine.com/books/review-sample-book/1.0.0/
14
+ urnid: urn:uuid:http://tatsu-zine.com/books/review-sample-book/1.0.0/
15
15
  # ISBN。省略した場合はurnidが入る
16
16
  # isbn: null
17
17
  # 著者名。["高橋征義", "John Doe"] のように配列を使うことで複数指定可
@@ -0,0 +1,4 @@
1
+ # call me by 'REVIEW_TEMPLATE=review-jlreq REVIEW_CONFIG_FILE=config-jlreq-ebook.yml rake pdf'
2
+ inherit: ["config.yml"]
3
+ pdfmaker:
4
+ texdocumentclass: ["review-jlreq", "media=ebook,paper=a5"]
@@ -1,9 +1,9 @@
1
1
  ## config.yml for sample book
2
- review_version: 3.0
2
+ review_version: 5.0
3
3
  bookname: book
4
4
  language: ja
5
5
  booktitle: Re:VIEWサンプル書籍
6
- urnid: urn:uid:http://reviewml.com/books/review-sample-book/
6
+ urnid: urn:uuid:http://reviewml.com/books/review-sample-book/
7
7
  # isbn: null
8
8
  aut: Re:VIEW Writers
9
9
  pbl: Re:VIEW Publishers
@@ -35,7 +35,7 @@ colophon: true
35
35
  # font_ext: ["ttf", "woff", "otf"]
36
36
  # catalogfile: catalog.yml
37
37
  # page_metric: A5
38
- # page_metric: [40,80,40,80,2]
38
+ # page_metric: [40,34,29,34]
39
39
  # direction: "ltr"
40
40
 
41
41
  epubmaker:
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2006-2019 Minero Aoki, Kenshi Muto, Masayoshi Takahashi, Masanori Kado.
1
+ # Copyright (c) 2006-2021 Minero Aoki, Kenshi Muto, Masayoshi Takahashi, Masanori Kado.
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the "Software"), to deal
@@ -30,7 +30,16 @@ WEBROOT = ENV['REVIEW_WEBROOT'] || 'webroot'
30
30
  TEXTROOT = BOOK + '-text'
31
31
  TOPROOT = BOOK + '-text'
32
32
  IDGXMLROOT = BOOK + '-idgxml'
33
+ PDF_OPTIONS = ENV['REVIEW_PDF_OPTIONS'] || ''
34
+ EPUB_OPTIONS = ENV['REVIEW_EPUB_OPTIONS'] || ''
35
+ WEB_OPTIONS = ENV['REVIEW_WEB_OPTIONS'] || ''
33
36
  IDGXML_OPTIONS = ENV['REVIEW_IDGXML_OPTIONS'] || ''
37
+ TEXT_OPTIONS = ENV['REVIEW_TEXT_OPTIONS'] || ''
38
+
39
+ REVIEW_VSCLI = ENV['REVIEW_VSCLI'] || 'vivliostyle'
40
+ REVIEW_VSCLI_USESANDBOX = ENV['REVIEW_VSCLI_USESANDBOX'] ? '' : '--no-sandbox'
41
+ REVIEW_VSCLI_PDF = ENV['REVIEW_VSCLI_PDF'] || BOOK_PDF
42
+ REVIEW_VSCLI_OPTIONS = ENV['REVIEW_VSCLI_OPTIONS'] || ''
34
43
 
35
44
  def build(mode, chapter)
36
45
  sh("review-compile --target=#{mode} --footnotetext --stylesheet=style.css #{chapter} > tmp")
@@ -76,12 +85,12 @@ task web: WEBROOT
76
85
 
77
86
  desc 'generate text file (without decoration)'
78
87
  task plaintext: TEXTROOT do
79
- sh "review-textmaker -n #{CONFIG_FILE}"
88
+ sh "review-textmaker #{TEXT_OPTIONS} -n #{CONFIG_FILE}"
80
89
  end
81
90
 
82
91
  desc 'generate (decorated) text file'
83
92
  task text: TOPROOT do
84
- sh "review-textmaker #{CONFIG_FILE}"
93
+ sh "review-textmaker #{TEXT_OPTIONS} #{CONFIG_FILE}"
85
94
  end
86
95
 
87
96
  desc 'generate IDGXML file'
@@ -100,17 +109,17 @@ SRC_PDF = FileList['layouts/*.erb', 'sty/**/*.sty']
100
109
 
101
110
  file BOOK_PDF => SRC + SRC_PDF do
102
111
  FileUtils.rm_rf([BOOK_PDF, BOOK, BOOK + '-pdf'])
103
- sh "review-pdfmaker #{CONFIG_FILE}"
112
+ sh "review-pdfmaker #{PDF_OPTIONS} #{CONFIG_FILE}"
104
113
  end
105
114
 
106
115
  file BOOK_EPUB => SRC + SRC_EPUB do
107
116
  FileUtils.rm_rf([BOOK_EPUB, BOOK, BOOK + '-epub'])
108
- sh "review-epubmaker #{CONFIG_FILE}"
117
+ sh "review-epubmaker #{EPUB_OPTIONS} #{CONFIG_FILE}"
109
118
  end
110
119
 
111
120
  file WEBROOT => SRC do
112
121
  FileUtils.rm_rf([WEBROOT])
113
- sh "review-webmaker #{CONFIG_FILE}"
122
+ sh "review-webmaker #{WEB_OPTIONS} #{CONFIG_FILE}"
114
123
  end
115
124
 
116
125
  file TEXTROOT => SRC do
@@ -121,4 +130,15 @@ file IDGXMLROOT => SRC do
121
130
  FileUtils.rm_rf([IDGXMLROOT])
122
131
  end
123
132
 
133
+ desc 'run vivliostyle'
134
+ task 'vivliostyle:preview': BOOK_EPUB do
135
+ sh "#{REVIEW_VSCLI} preview #{REVIEW_VSCLI_USESANDBOX} #{REVIEW_VSCLI_OPTIONS} #{BOOK_EPUB}"
136
+ end
137
+
138
+ task 'vivliostyle:build': BOOK_EPUB do
139
+ sh "#{REVIEW_VSCLI} build #{REVIEW_VSCLI_USESANDBOX} #{REVIEW_VSCLI_OPTIONS} -o #{REVIEW_VSCLI_PDF} #{BOOK_EPUB}"
140
+ end
141
+
142
+ task vivliostyle: 'vivliostyle:build'
143
+
124
144
  CLEAN.include([BOOK, BOOK_PDF, BOOK_EPUB, BOOK + '-pdf', BOOK + '-epub', WEBROOT, 'images/_review_math', 'images/_review_math_text', TEXTROOT, IDGXMLROOT])
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'rake'
4
- gem 'review', '2.3.0'
4
+ gem 'review', '4.2.0'
@@ -104,7 +104,7 @@ olnumで一応番号が変更可能なことを期待していますが、Webブ
104
104
  === 用語リスト
105
105
  用語リスト(HTMLの@<i>{dl}、TeXの@<i>{description})は@<i>{スペース}+@<tt>{:}+@<i>{スペース}で見出しを、説明は行頭にタブかスペースを入れて表現します。
106
106
 
107
- : Alpha@<b>{bold太字}@<i>{italicイタ}@<tt>{等幅code}
107
+ : Alpha@<b>{bold太字}@<i>{italicイタ}@<tt>{等幅code}@<fn>{foot1}
108
108
  @<i>{DEC}の作っていた@<b>{RISC CPU}。@<i>{italicイタ}@<tt>{等幅code}
109
109
  浮動小数点数演算が速い。
110
110
  : POWER
@@ -114,6 +114,8 @@ olnumで一応番号が変更可能なことを期待していますが、Webブ
114
114
  Sunが作っているRISC CPU。
115
115
  CPU数を増やすのが得意。
116
116
 
117
+ //footnote[foot1][箇条書き見出しへの脚注。]
118
+
117
119
  //emlist{
118
120
  @<b>{bold太字}@<i>{italicイタ}
119
121
 
@@ -49,9 +49,9 @@ print('hello');
49
49
  puts 'Hello'
50
50
  //}
51
51
 
52
- #@# //source{
53
- #@# //}
54
- #@# FIXME:キャプションなしはLaTeXだとエラーになることがわかった。Re:VIEW側修正予定
52
+ //source{
53
+ puts 'Hello'
54
+ //}
55
55
 
56
56
  実行例を示すとき用にはcmdを用意しています。いずれにせよ、商業書籍レベルでは必要なので用意しているものの、原稿レベルで書き手が使うコードブロックはほどほどの数に留めておいたほうがいいのではないかと思います。TeX版の紙面ではデフォルトは黒アミ。印刷によってはベタ黒塗りはちょっと怖いかもなので、あまり長々したものには使わないほうがいいですね。
57
57
 
@@ -62,12 +62,7 @@ $ @<b>{ls /}
62
62
  === 図
63
63
  採番・キャプション付きの図の貼り付けはimageを使用します(@<img>{ball})。図版ファイルは識別子とビルダが対応しているフォーマットから先着順に探索されます。詳細については@<href>{https://github.com/kmuto/review/wiki/ImagePath, ImagePath}のドキュメントを参照してください。
64
64
 
65
- @<fn>{madebygimp}
66
- 本当はimageのキャプションにfootnoteを付けたいのですが、TeXではエラーになりますね。厳しい……。
67
- #@# FIXME:TeXのキャプションfootnote問題
68
-
69
- #@# //image[ball][ボール@<fn>{madebygimp}]{
70
- //image[ball][ボール]{
65
+ //image[ball][ボール@<fn>{madebygimp}]{
71
66
  //}
72
67
 
73
68
  //footnote[madebygimp][GIMPのフィルタで作成。@<br>{}footnote内改行]
@@ -86,11 +81,8 @@ $ @<b>{ls /}
86
81
  === 表
87
82
  表はtableを使います。@<table>{tab2-1}
88
83
 
89
- tableもキャプション・セル内含めてTeXでは脚注できないですね…
90
- 本当は→@<fn>{tabalign}はキャプション内。TeXだとセル内の脚注は脚注文書が消えています。
91
-
92
- #@# //table[tab2-1][表の@<b>{例}@<fn>{tabalign}]{
93
- //table[tab2-1][表の@<b>{例}]{
84
+ //table[tab2-1][表の@<b>{例}@<fn>{tabalign}]{
85
+ #@#//table[tab2-1][表の@<b>{}]{
94
86
  A B C
95
87
  ----------------------------------
96
88
  D E@<b>{太字bold}@<i>{italicイタ}@<tt>{等幅code} F@<br>{}G
@@ -111,7 +103,7 @@ D E@<b>{太字bold}@<i>{italicイタ}@<tt>{等幅code} F@<br>{}G
111
103
  H I 長いセルの折り返し■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
112
104
  //}
113
105
 
114
- TeXの普通のクラスファイルだと、列指定はl,c,r,p(幅指定+左均等)しかないので、幅指定+左寄せ(均等なし)、幅指定+中寄せ、幅指定+右寄せの指定ができると嬉しそうです。
106
+ TeXの普通のクラスファイルだと、列指定はl,c,r,p(幅指定+左均等)しかないのですが、Re:VIEWのスタイルファイルでL(幅指定+左寄せ,均等なし)、C(幅指定+中寄せ)、R(幅指定+右寄せ)を指定可能です。
115
107
 
116
108
  あとは縦に長い表がTeXだとそのままはみ出してしまうのでlongtableがあるけれどもそれはまた問題がいろいろあり……。
117
109
 
@@ -263,7 +255,7 @@ Tips。@<b>{太字bold}@<i>{italicイタ}@<tt>{等幅code}
263
255
  #@# doorquote、bpo、talk、graph、address、box、linebreak、pagebreak、hr、comment、abbr、acronym、dfn、kbd、q、samp、var、big、small、del、ins、recipe、dtp、raw、embed、include
264
256
 
265
257
  == LaTeX式
266
- LaTeX式はTeX紙面以外は保証されません。EPUBではMathML(@<tt>{mathml: true})を使えますが、表現や互換性が不足しており、LaTeXをバックエンドとして画像化する@<tt>{imgmath: true}のほうがよさそうです。
258
+ LaTeX式はTeX紙面以外は保証されません。EPUBではMathML(@<tt>{math_format: mathml})を使えますが、表現や互換性が不足しており、LaTeXをバックエンドとして画像化する@<tt>{math_format: imgmath}のほうがよさそうです。
267
259
 
268
260
  //texequation{
269
261
  \sum_{i=1}^nf_n(x)
@@ -293,7 +285,7 @@ a_{m1} & \cdots & a_{mn}
293
285
  #@# 場所ラベル定義
294
286
 
295
287
  === 書体
296
- 本文での……キーワード@<kw>{キーワード, keyword}@<fn>{kw}、太字@<b>{b太字}、イタリック@<i>{iイタリック}、等幅@<tt>{tt等幅}、強調@<strong>{strong強調}、強調@<em>{em強調}、下線@<u>{u下線}、等幅@<code>{code等幅}、等幅太字@<ttb>{ttb等幅太字}、等幅イタリック@<tti>{tti等幅イタリック}、網カケ@<ami>{amiアミ}、16進UTF文字指定@<uchar>{3042}、インラインアイコン@<icon>{inlineicon}
288
+ 本文での……キーワード@<kw>{キーワード, keyword}@<fn>{kw}、太字@<b>{b太字}、イタリック@<i>{iイタリック}、等幅@<tt>{tt等幅}、強調@<strong>{strong強調}、強調@<em>{em強調}、下線@<u>{u下線}、等幅@<code>{code等幅}、等幅太字@<ttb>{ttb等幅太字}、等幅イタリック@<tti>{tti等幅イタリック}、網カケ@<ami>{amiアミ}、挿入@<ins>{ins挿入}、削除@<del>{del削除}、16進UTF文字指定@<uchar>{3042}、インラインアイコン@<icon>{inlineicon}
297
289
 
298
290
  傍点@<embed>{@}<bou>{bou傍点}、ルビ@<embed>{@}<ruby>{愕然, がくぜん}、縦中横@<embed>{@}<tcy>{90}、はTeXでは現状、別パッケージが必要です。
299
291
  #@# FIXME:TEXでの文字スタイル。外部パッケージが必要
@@ -307,23 +299,25 @@ a_{m1} & \cdots & a_{mn}
307
299
 
308
300
  //footnote[kw][キーワードのカッコは太字にしないほうがいいのかなと思いつつあります(手元の案件では太字にしないよう挙動を変えてしまっているほうが多い)。]
309
301
 
310
- * 箇条書き内での……キーワード@<kw>{キーワード, keyword}、太字@<b>{b太字}、イタリック@<i>{iイタリック}、等幅@<tt>{tt等幅}、強調@<strong>{strong強調}、強調@<em>{em強調}、下線@<u>{u下線}、等幅@<code>{code等幅}、等幅太字@<ttb>{ttb等幅太字}、等幅イタリック@<tti>{tti等幅イタリック}、網カケ@<ami>{amiアミ}、16進UTF文字指定@<uchar>{3042}、インラインアイコン@<icon>{inlineicon}
302
+ * 箇条書き内での……キーワード@<kw>{キーワード, keyword}、太字@<b>{b太字}、イタリック@<i>{iイタリック}、等幅@<tt>{tt等幅}、強調@<strong>{strong強調}、強調@<em>{em強調}、下線@<u>{u下線}、等幅@<code>{code等幅}、等幅太字@<ttb>{ttb等幅太字}、等幅イタリック@<tti>{tti等幅イタリック}、網カケ@<ami>{amiアミ}、挿入@<ins>{ins挿入}、削除@<del>{del削除}、16進UTF文字指定@<uchar>{3042}、インラインアイコン@<icon>{inlineicon}
311
303
 
312
304
  //tsize[|latex|p{120mm}]
313
305
  //table{
314
- 表内での……キーワード@<kw>{キーワード, keyword}、太字@<b>{b太字}、イタリック@<i>{iイタリック}、等幅@<tt>{tt等幅}、強調@<strong>{strong強調}、強調@<em>{em強調}、下線@<u>{u下線}、等幅@<code>{code等幅}、等幅太字@<ttb>{ttb等幅太字}、等幅イタリック@<tti>{tti等幅イタリック}、網カケ@<ami>{amiアミ}、16進UTF文字指定@<uchar>{3042}、インラインアイコン@<icon>{inlineicon}
306
+ 表内での……キーワード@<kw>{キーワード, keyword}、太字@<b>{b太字}、イタリック@<i>{iイタリック}、等幅@<tt>{tt等幅}、強調@<strong>{strong強調}、強調@<em>{em強調}、下線@<u>{u下線}、等幅@<code>{code等幅}、等幅太字@<ttb>{ttb等幅太字}、等幅イタリック@<tti>{tti等幅イタリック}、網カケ@<ami>{amiアミ}、挿入@<ins>{ins挿入}、削除@<del>{del削除}、16進UTF文字指定@<uchar>{3042}、インラインアイコン@<icon>{inlineicon}
315
307
  //}
316
308
 
317
309
  コードブロック内では対応装飾は減らしてよいと考えます。代わりにballoonが追加されます。
318
310
 
319
- //emlist[キャプション内での……キーワード@<kw>{キーワード, keyword}、太字@<b>{b太字}、イタリック@<i>{iイタリック}、等幅@<tt>{tt等幅}、強調@<strong>{strong強調}、強調@<em>{em強調}、下線@<u>{u下線}、等幅@<code>{code等幅}、等幅太字@<ttb>{ttb等幅太字}、等幅イタリック@<tti>{tti等幅イタリック}、網カケ@<ami>{amiアミ}、16進UTF文字指定@<uchar>{3042}、インラインアイコン@<icon>{inlineicon}]{
311
+ //emlist[キャプション内での……キーワード@<kw>{キーワード, keyword}、太字@<b>{b太字}、イタリック@<i>{iイタリック}、等幅@<tt>{tt等幅}、強調@<strong>{strong強調}、強調@<em>{em強調}、下線@<u>{u下線}、等幅@<code>{code等幅}、等幅太字@<ttb>{ttb等幅太字}、等幅イタリック@<tti>{tti等幅イタリック}、網カケ@<ami>{amiアミ}、挿入@<ins>{ins挿入}、削除@<del>{del削除}、16進UTF文字指定@<uchar>{3042}、インラインアイコン@<icon>{inlineicon}]{
320
312
  コードブロック内での……
321
313
  太字@<b>{b太字}
322
314
  イタリック@<i>{iイタリック}
323
315
  下線@<u>{u下線}
324
316
  網カケ@<ami>{amiアミ} @<balloon>{ふきだし説明}
317
+ 挿入@<ins>{ins挿入}、削除@<del>{del削除}
325
318
  //}
326
319
 
320
+ === 見出し内 @<b>{BOLD},@<i>{ITALIC},@<tt>{TT},@<strong>{STRONG},@<em>{EM},@<code>{CODE},@<ttb>{TTB},@<tti>{TTI},@<ami>{AMI},@<bou>{BOU},@<kw>{KW},@<u>{UNDERLINE},@<ins>{INS}、@<del>{DEL}
327
321
 
328
322
  ==={crossref} 参照
329
323
  #@# FIXME:任意ラベルを使うと、EPUBチェックエラーになることがある?
@@ -331,7 +325,6 @@ a_{m1} & \cdots & a_{mn}
331
325
  * 章番号:@<chap>{ch01}、@<chap>{appA}、@<chap>{part2}、@<chap>{bib}
332
326
  * 章題:@<title>{ch01}、@<title>{part2}、@<title>{appA}、@<title>{bib}
333
327
  * 章番号+題:@<chapref>{ch02}、@<chapref>{part2}、@<chapref>{appA}、@<chapref>{bib}
334
- #@# FIXME:TeXで、部が実際のページではIIなのに参照では2になっているのはおかしい→i18n.ymlがおかしいせいか
335
328
 
336
329
  節や項への参照はhdを使います。
337
330
 
@@ -347,10 +340,24 @@ labelで定義したラベルへの参照の例です。EPUBだと@<href>{#inlin
347
340
  #@# FIXME:EPUB側にTeXのほうを寄せるようにRe:VIEWコードを直す
348
341
  #@# FIXME:TeXではpagerefがほしい、ということがありそう。EPUBとの整合性を検討
349
342
 
343
+ 説明箇条書きはTeXで特殊な扱いをしているため、参照の確認を以下でしておきます。
344
+
345
+ : @<chap>{ch01}
346
+ 章番号
347
+ : @<title>{ch01}
348
+ 章題
349
+ : @<chapref>{ch01}
350
+ 章番号+題
351
+ : @<hd>{ch02|crossref}
352
+
353
+ : @<column>{ch03|column2}
354
+ コラム参照
355
+
350
356
  === 参考文献
351
357
  参考文献@<tt>{bib.re}ファイルへの文献参照は、@<bib>{lins}とします。
352
358
 
353
359
  === 索引
354
360
  @<hidx>{索引}@<hidx>{index}索引はTeXとIDGXML以外では妥当な動作を定義していません。idx@<hidx>{索引<<>>idx}は文中にも表示し、hidx@<hidx>{索引<<>>hidx}は文中からは隠した形の索引にします。読みは@<idx>{Mecab}があればそちらを使いますが、@<idx>{辞書ファイル}を直接定義することもできます。@<hidx>{!<>"$&()~=|,./\{\}?_[]*:;+%#()'`^}
361
+ @<hidx>{|}@<hidx>{{}@<hidx>$}$
355
362
 
356
363
  idx, hidxいずれも=見出しの中には入れないようにし、後続の段落先頭にhidxで入れるように注意します(入れてしまうと目次などがおかしくなります)。
@@ -21,7 +21,7 @@ puts "Re:VIEW is #{impression}."
21
21
  //image[img3-1][適当に作ったコラム内画像]{
22
22
  //}
23
23
 
24
- //indepimage[img3-1][適当に作ったコラム内画像]{
24
+ //indepimage[img3-2][適当に作ったコラム内画像]{
25
25
  //}
26
26
 
27
27
  //table[tab3-1][コラム表]{
@@ -0,0 +1,4 @@
1
+ # call me by 'REVIEW_TEMPLATE=review-jlreq REVIEW_CONFIG_FILE=config-jlreq-lualatex.yml rake pdf'
2
+ inherit: ["config-jlreq.yml"]
3
+ texcommand: "lualatex"
4
+ dvicommand: null
@@ -0,0 +1,3 @@
1
+ # call me by 'REVIEW_CONFIG_FILE=config-print.yml rake pdf'
2
+ inherit: ["config.yml"]
3
+ texdocumentclass: ["review-jsbook", "media=print,paper=b5"]
@@ -1,4 +1,4 @@
1
- review_version: 3.0
1
+ review_version: 5.0
2
2
  bookname: syntax-book
3
3
  language: ja
4
4
  booktitle: {name: "Re:VIEW文法使用例", file-as: "リビューブンポウシヨウレイ"}