review 3.2.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) 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 +167 -42
  6. data/.travis.yml +1 -1
  7. data/Dockerfile +21 -5
  8. data/NEWS.ja.md +428 -1
  9. data/NEWS.md +429 -2
  10. data/README.md +11 -7
  11. data/Rakefile +7 -2
  12. data/appveyor.yml +0 -20
  13. data/bin/review +2 -4
  14. data/bin/review-catalog-converter +5 -5
  15. data/bin/review-check +13 -17
  16. data/bin/review-checkdep +3 -6
  17. data/bin/review-compile +13 -22
  18. data/bin/review-epub2html +1 -4
  19. data/bin/review-epubmaker +3 -4
  20. data/bin/review-idgxmlmaker +14 -0
  21. data/bin/review-index +5 -86
  22. data/bin/review-init +1 -4
  23. data/bin/review-pdfmaker +1 -3
  24. data/bin/review-preproc +11 -13
  25. data/bin/review-textmaker +1 -3
  26. data/bin/review-update +1 -4
  27. data/bin/review-validate +7 -7
  28. data/bin/review-vol +5 -82
  29. data/bin/review-webmaker +1 -3
  30. data/doc/config.yml.sample +67 -16
  31. data/doc/config.yml.sample-simple +4 -3
  32. data/doc/format.ja.md +133 -21
  33. data/doc/format.md +135 -34
  34. data/doc/makeindex.ja.md +2 -2
  35. data/doc/pdfmaker.ja.md +43 -1
  36. data/doc/pdfmaker.md +42 -1
  37. data/doc/quickstart.ja.md +55 -25
  38. data/doc/quickstart.md +47 -17
  39. data/lib/review.rb +1 -1
  40. data/lib/review/book.rb +2 -2
  41. data/lib/review/book/base.rb +89 -90
  42. data/lib/review/book/bib.rb +21 -0
  43. data/lib/review/book/book_unit.rb +158 -0
  44. data/lib/review/book/chapter.rb +51 -29
  45. data/lib/review/book/index.rb +42 -248
  46. data/lib/review/book/index/item.rb +46 -0
  47. data/lib/review/book/page_metric.rb +7 -7
  48. data/lib/review/book/part.rb +45 -10
  49. data/lib/review/book/volume.rb +5 -5
  50. data/lib/review/builder.rb +171 -54
  51. data/lib/review/call_hook.rb +20 -0
  52. data/lib/review/catalog.rb +15 -17
  53. data/lib/review/compiler.rb +240 -102
  54. data/lib/review/configure.rb +101 -12
  55. data/lib/review/converter.rb +1 -1
  56. data/lib/review/epub2html.rb +6 -1
  57. data/lib/review/epubmaker.rb +120 -118
  58. data/lib/review/epubmaker/content.rb +113 -0
  59. data/lib/review/epubmaker/epubcommon.rb +372 -0
  60. data/lib/review/epubmaker/epubv2.rb +178 -0
  61. data/lib/review/epubmaker/epubv3.rb +231 -0
  62. data/lib/review/epubmaker/producer.rb +168 -0
  63. data/lib/review/epubmaker/reviewheaderlistener.rb +12 -2
  64. data/lib/review/epubmaker/zip_exporter.rb +84 -0
  65. data/lib/review/exception.rb +6 -0
  66. data/lib/review/extentions/string.rb +0 -4
  67. data/lib/review/htmlbuilder.rb +147 -149
  68. data/lib/review/htmlutils.rb +10 -14
  69. data/lib/review/i18n.rb +4 -3
  70. data/lib/review/idgxmlbuilder.rb +229 -103
  71. data/lib/review/idgxmlmaker.rb +188 -0
  72. data/lib/review/img_math.rb +245 -0
  73. data/lib/review/index_builder.rb +654 -0
  74. data/lib/review/init-web/finish.html +10 -0
  75. data/lib/review/init-web/index.html +190 -0
  76. data/lib/review/init-web/review-layout-design.js +691 -0
  77. data/lib/review/init.rb +124 -41
  78. data/lib/review/latexbox.rb +58 -0
  79. data/lib/review/latexbuilder.rb +249 -97
  80. data/lib/review/latexutils.rb +9 -1
  81. data/lib/review/lineinput.rb +113 -3
  82. data/lib/review/logger.rb +43 -8
  83. data/lib/review/makerhelper.rb +13 -186
  84. data/lib/review/markdownbuilder.rb +75 -39
  85. data/lib/review/md2inaobuilder.rb +3 -5
  86. data/lib/review/pdfmaker.rb +88 -83
  87. data/lib/review/plaintextbuilder.rb +158 -83
  88. data/lib/review/preprocessor.rb +30 -24
  89. data/lib/review/rstbuilder.rb +58 -39
  90. data/lib/review/sec_counter.rb +14 -0
  91. data/lib/review/template.rb +6 -0
  92. data/lib/review/textmaker.rb +29 -17
  93. data/lib/review/textutils.rb +68 -2
  94. data/lib/review/tocprinter.rb +242 -97
  95. data/lib/review/topbuilder.rb +147 -61
  96. data/lib/review/update.rb +27 -28
  97. data/lib/review/version.rb +1 -1
  98. data/lib/review/volumeprinter.rb +97 -0
  99. data/lib/review/webmaker.rb +36 -35
  100. data/lib/review/webtocprinter.rb +39 -35
  101. data/lib/review/yamlloader.rb +4 -0
  102. data/review.gemspec +8 -5
  103. data/samples/sample-book/README.md +7 -2
  104. data/samples/sample-book/src/.gitignore +154 -0
  105. data/samples/sample-book/src/config-ebook.yml +4 -0
  106. data/samples/sample-book/src/config-epub2.yml +1 -1
  107. data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
  108. data/samples/sample-book/src/config-jlreq.yml +6 -0
  109. data/samples/sample-book/src/config.yml +3 -3
  110. data/samples/sample-book/src/lib/tasks/review.rake +45 -14
  111. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
  112. data/samples/syntax-book/Gemfile +1 -1
  113. data/samples/syntax-book/ch01.re +3 -1
  114. data/samples/syntax-book/ch02.re +28 -21
  115. data/samples/syntax-book/ch03.re +4 -7
  116. data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
  117. data/samples/syntax-book/config-jlreq.yml +5 -0
  118. data/samples/syntax-book/config-print.yml +3 -0
  119. data/samples/syntax-book/config.yml +1 -1
  120. data/samples/syntax-book/images/img3-2.png +0 -0
  121. data/samples/syntax-book/lib/tasks/review.rake +30 -15
  122. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
  123. data/templates/html/_colophon.html.erb +23 -0
  124. data/templates/html/_colophon_history.html.erb +9 -0
  125. data/templates/html/_cover.html.erb +10 -0
  126. data/templates/html/_part_body.html.erb +6 -0
  127. data/templates/html/_titlepage.html.erb +20 -0
  128. data/templates/html/layout-html5.html.erb +6 -0
  129. data/templates/html/layout-xhtml1.html.erb +6 -0
  130. data/templates/latex/config.erb +45 -27
  131. data/templates/latex/layout.tex.erb +1 -0
  132. data/templates/latex/review-jlreq/README.md +3 -1
  133. data/templates/latex/review-jlreq/review-base.sty +124 -37
  134. data/templates/latex/review-jlreq/review-jlreq.cls +29 -22
  135. data/templates/latex/review-jlreq/review-style.sty +9 -1
  136. data/templates/latex/review-jlreq/review-tcbox.sty +348 -0
  137. data/templates/latex/review-jlreq/reviewmacro.sty +5 -0
  138. data/templates/latex/review-jsbook/README.md +46 -5
  139. data/templates/latex/review-jsbook/review-base.sty +111 -30
  140. data/templates/latex/review-jsbook/review-jsbook.cls +16 -2
  141. data/templates/latex/review-jsbook/review-style.sty +10 -2
  142. data/templates/latex/review-jsbook/review-tcbox.sty +348 -0
  143. data/templates/latex/review-jsbook/reviewmacro.sty +5 -0
  144. data/templates/opf/epubv2.opf.erb +7 -7
  145. data/templates/opf/epubv3.opf.erb +7 -7
  146. data/templates/opf/opf_manifest_epubv2.opf.erb +10 -0
  147. data/templates/opf/opf_manifest_epubv3.opf.erb +10 -0
  148. data/templates/opf/opf_metainfo_epubv2.opf.erb +17 -0
  149. data/templates/opf/opf_metainfo_epubv3.opf.erb +49 -0
  150. data/templates/opf/opf_tocx_epubv2.opf.erb +9 -0
  151. data/templates/opf/opf_tocx_epubv3.opf.erb +17 -0
  152. data/templates/web/html/layout-html5.html.erb +9 -8
  153. data/templates/web/html/layout-xhtml1.html.erb +6 -0
  154. data/test/assets/header_listener.html +35 -0
  155. data/test/assets/img_math/img1.png +0 -0
  156. data/test/assets/img_math/img2.png +0 -0
  157. data/test/assets/img_math/img3.png +0 -0
  158. data/test/assets/syntax_book_index_detail.txt +58 -0
  159. data/test/assets/test_template.tex +20 -9
  160. data/test/assets/test_template_backmatter.tex +20 -9
  161. data/test/book_test_helper.rb +11 -5
  162. data/test/run_test.rb +1 -1
  163. data/test/test_book.rb +123 -78
  164. data/test/test_book_chapter.rb +99 -56
  165. data/test/test_book_part.rb +3 -3
  166. data/test/test_builder.rb +24 -15
  167. data/test/test_catalog.rb +19 -42
  168. data/test/test_catalog_converter_cmd.rb +1 -1
  169. data/test/test_converter.rb +1 -0
  170. data/test/test_epub3maker.rb +170 -126
  171. data/test/test_epubmaker.rb +249 -129
  172. data/test/test_epubmaker_cmd.rb +16 -9
  173. data/test/test_helper.rb +23 -11
  174. data/test/test_htmlbuilder.rb +1083 -114
  175. data/test/test_htmlutils.rb +0 -12
  176. data/test/test_i18n.rb +37 -37
  177. data/test/test_idgxmlbuilder.rb +627 -27
  178. data/test/test_idgxmlmaker_cmd.rb +50 -0
  179. data/test/test_image_finder.rb +52 -70
  180. data/test/test_img_math.rb +111 -0
  181. data/test/test_index.rb +62 -52
  182. data/test/test_indexbuilder.rb +52 -0
  183. data/test/test_latexbuilder.rb +1189 -59
  184. data/test/test_latexbuilder_v2.rb +74 -34
  185. data/test/test_lineinput.rb +20 -93
  186. data/test/test_logger.rb +17 -4
  187. data/test/test_makerhelper.rb +2 -14
  188. data/test/test_markdownbuilder.rb +77 -4
  189. data/test/test_md2inaobuilder.rb +12 -2
  190. data/test/test_pdfmaker.rb +101 -12
  191. data/test/test_pdfmaker_cmd.rb +102 -8
  192. data/test/test_plaintextbuilder.rb +562 -31
  193. data/test/test_review_ext.rb +2 -1
  194. data/test/test_reviewheaderlistener.rb +49 -0
  195. data/test/test_rstbuilder.rb +58 -5
  196. data/test/test_sec_counter.rb +156 -0
  197. data/test/test_template.rb +12 -2
  198. data/test/test_textmaker_cmd.rb +58 -0
  199. data/test/test_textutils.rb +109 -2
  200. data/test/test_tocprinter.rb +46 -0
  201. data/test/test_topbuilder.rb +400 -17
  202. data/test/test_update.rb +53 -44
  203. data/test/test_webtocprinter.rb +75 -43
  204. data/test/test_yamlloader.rb +13 -0
  205. data/test/test_zip_exporter.rb +5 -6
  206. data/vendor/gentombow/LICENSE +1 -1
  207. data/vendor/gentombow/Makefile +0 -1
  208. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  209. data/vendor/gentombow/bounddvi-en.tex +1 -0
  210. data/vendor/gentombow/bounddvi.pdf +0 -0
  211. data/vendor/gentombow/bounddvi.sty +30 -7
  212. data/vendor/gentombow/bounddvi.tex +1 -0
  213. data/vendor/gentombow/create_archive.sh +1 -0
  214. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  215. data/vendor/gentombow/gentombow-ja.tex +9 -0
  216. data/vendor/gentombow/gentombow.pdf +0 -0
  217. data/vendor/gentombow/gentombow.sty +32 -10
  218. data/vendor/gentombow/gentombow.tex +8 -0
  219. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  220. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  221. data/vendor/jsclasses/LICENSE +1 -1
  222. data/vendor/jsclasses/Makefile +3 -2
  223. data/vendor/jsclasses/create_archive.sh +5 -5
  224. data/vendor/jsclasses/jis/Makefile +3 -2
  225. data/vendor/jsclasses/jis/jsarticle.cls +74 -31
  226. data/vendor/jsclasses/jis/jsbook.cls +74 -31
  227. data/vendor/jsclasses/jis/jsclasses.dtx +176 -36
  228. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  229. data/vendor/jsclasses/jis/jslogo.dtx +4 -4
  230. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  231. data/vendor/jsclasses/jis/jslogo.sty +4 -16
  232. data/vendor/jsclasses/jis/jspf.cls +73 -30
  233. data/vendor/jsclasses/jis/jsreport.cls +74 -31
  234. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  235. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  236. data/vendor/jsclasses/jis/kiyou.cls +74 -31
  237. data/vendor/jsclasses/jis/minijs.sty +65 -22
  238. data/vendor/jsclasses/jis/okumacro.dtx +4 -5
  239. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  240. data/vendor/jsclasses/jis/okumacro.sty +4 -17
  241. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  242. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  243. data/vendor/jsclasses/jis/winjis.sty +23 -19
  244. data/vendor/jsclasses/jsarticle.cls +74 -31
  245. data/vendor/jsclasses/jsbook.cls +74 -31
  246. data/vendor/jsclasses/jsclasses.dtx +176 -36
  247. data/vendor/jsclasses/jsclasses.ins +15 -5
  248. data/vendor/jsclasses/jsclasses.pdf +0 -0
  249. data/vendor/jsclasses/jslogo.dtx +4 -4
  250. data/vendor/jsclasses/jslogo.ins +9 -0
  251. data/vendor/jsclasses/jslogo.pdf +0 -0
  252. data/vendor/jsclasses/jslogo.sty +4 -16
  253. data/vendor/jsclasses/jspf.cls +73 -30
  254. data/vendor/jsclasses/jsreport.cls +74 -31
  255. data/vendor/jsclasses/jsverb.ins +9 -0
  256. data/vendor/jsclasses/jsverb.pdf +0 -0
  257. data/vendor/jsclasses/jsverb.sty +1 -13
  258. data/vendor/jsclasses/kiyou.cls +74 -31
  259. data/vendor/jsclasses/minijs.sty +68 -22
  260. data/vendor/jsclasses/okumacro.dtx +4 -5
  261. data/vendor/jsclasses/okumacro.ins +9 -0
  262. data/vendor/jsclasses/okumacro.pdf +0 -0
  263. data/vendor/jsclasses/okumacro.sty +4 -17
  264. data/vendor/jsclasses/okuverb.ins +9 -0
  265. data/vendor/jsclasses/okuverb.pdf +0 -0
  266. data/vendor/jsclasses/okuverb.sty +1 -13
  267. data/vendor/jsclasses/tests/relfont.tex +10 -0
  268. data/vendor/jsclasses/winjis.sty +23 -19
  269. metadata +136 -23
  270. data/.rubocop_todo.yml +0 -7
  271. data/lib/epubmaker.rb +0 -23
  272. data/lib/epubmaker/content.rb +0 -110
  273. data/lib/epubmaker/epubcommon.rb +0 -441
  274. data/lib/epubmaker/epubv2.rb +0 -143
  275. data/lib/epubmaker/epubv3.rb +0 -233
  276. data/lib/epubmaker/producer.rb +0 -375
  277. data/lib/epubmaker/zip_exporter.rb +0 -81
  278. data/lib/lineinput.rb +0 -155
  279. data/lib/review/book/compilable.rb +0 -173
  280. data/lib/review/tocparser.rb +0 -271
  281. data/samples/syntax-book/review-ext.rb +0 -14
  282. data/test/test_tocparser.rb +0 -25
@@ -0,0 +1,10 @@
1
+ <html>
2
+ <head>
3
+ <meta charset="UTF-8" />
4
+ <title>Re:VIEWレイアウトデザイナ</title>
5
+ </head>
6
+ <body>
7
+ <p>プロジェクトフォルダを作成しました。このウィンドウを閉じてください。</p>
8
+ </body>
9
+ </html>
10
+
@@ -0,0 +1,190 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ja">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <title>Re:VIEWレイアウトデザイナ</title>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
7
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous" />
8
+ <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
9
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
10
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
11
+ <script src="https://code.createjs.com/1.0.0/easeljs.min.js" charset="UTF-8"></script>
12
+ <script src="review-layout-design.js" charset="UTF-8"></script>
13
+ </head>
14
+ <body onload="init();">
15
+ <div class="container">
16
+ <form method="post" name="reviewform" action="/finish">
17
+ <div class="form-group row">
18
+ <div class="col-auto">
19
+ <label for="cls" data-toggle="tooltip" data-placement="bottom" title="文書基本テンプレート。jsbookはよく使われているクラス。jlreqは紙面をカスタマイズしやすい新しいクラス">クラス</label>
20
+ <select id="cls" name="cls" class="btn btn-outline-dark" onchange="change_cls();">
21
+ <option value="review-jsbook" selected="true">review-jsbook (jsbook派生)</option>
22
+ <option value="review-jlreq">review-jlreq (jlreq派生)</option>
23
+ </select>
24
+ </div>
25
+ <div class="col-auto">
26
+ <label for="papersize" data-toggle="tooltip" data-placement="bottom" title="仕上がりサイズ。他のサイズ指定はsty/README.md参照">紙のサイズ</label>
27
+ <select id="papersize" name="papersize" class="btn btn-outline-dark" onchange="change_paper();">
28
+ <option value="a5" selected="true">A5 (148mm×210mm)</option>
29
+ <option value="b5">B5 (182mm×257mm)</option>
30
+ <option value="a4">A4 (210mm×297mm)</option>
31
+ </select>
32
+ </div>
33
+ <div class="col-auto">
34
+ <input type="button" id="reset" name="reset" class="btn btn-danger" value="初期値に戻す" onclick="reset_all();" data-toggle="tooltip" data-placement="bottom" title="クラスおよび紙に基づく初期値に復帰" />
35
+ </div>
36
+ </div>
37
+ <hr />
38
+
39
+ <div class="form-group row">
40
+ <div class="col-auto" style="padding-right: 0;">
41
+ <label for="fontsize" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="基本の文字の大きさ。review-jsbookでは8,9,10,11,12,14,17,20,21,25,30,36,43のみ">文字サイズ</label>
42
+ </div>
43
+ <div class="col-auto">
44
+ <input type="number" id="fontsize" name="fontsize" class="form-control" style="width: 4em;" min="0" max="100" step="any" onchange="change_fontsize();" />
45
+ </div>
46
+ <label for="fontsize" class="col-form-label">pt </label>
47
+ <label for="baselineskip" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="行のベースライン間の幅">行送り</label>
48
+ <div class="col-auto">
49
+ <input type="number" id="baselineskip" name="baselineskip" class="form-control" style="width: 4em;" min="0" max="100" step="any" onchange="change_baselineskip();" />
50
+ </div>
51
+ <label for="baselineskip" class="col-form-label">pt</label>
52
+ <div class="col-auto">
53
+ <label class="col-form-label">(<span id="fontsize_q" data-toggle="tooltip" data-placement="bottom" title="1Q=1H=0.25mm。1pt=0.35146mm(英米ポイント)"></span>)</label>
54
+ </div>
55
+ </div>
56
+
57
+ <div class="form-group row">
58
+ <div class="col-auto">
59
+ <input type="number" id="line_length" name="line_length" class="form-control" min="1" max="400" step="1" style="width: 4em;" onchange="change_line_length();" />
60
+ </div>
61
+ <label for="line_length" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="和文字での1行あたりの文字数">文字 ×</label>
62
+ <div class="col-auto">
63
+ <input type="number" id="number_of_lines" name="number_of_lines" class="form-control" min="1" max="400" step="1" style="width: 4em;" onchange="change_number_of_lines();" />
64
+ </div>
65
+ <label for="number_of_lines" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="ページあたりの行の数">行</label>
66
+ <div class="col-auto">
67
+ <label class="col-form-label">(版面 <span id="hanmen" data-toggle="tooltip" data-placement="bottom" title="主となるコンテンツの入る領域。下画面の方眼の箇所"></span>)</label>
68
+ </div>
69
+ </div>
70
+
71
+ <hr/>
72
+
73
+ <div class="form-group row">
74
+ <div class="col-auto" style="padding-right: 0;">
75
+ <label for="gutter" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="ページ内側から版面までの余白">ノド</label>
76
+ </div>
77
+ <div class="col-auto">
78
+ <input type="number" id="gutter" name="gutter" class="form-control" style="width: 5em;" min="0" max="1000" step="any" onchange="change_gutter();" />
79
+ </div>
80
+ <label for="gutter" class="col-form-label">mm </label>
81
+ <label for="edge" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="ページ外側から版面までの余白。ノドと版面横幅から導出">小口</label>
82
+ <div class="col-auto">
83
+ <input type="number" id="edge" name="edge" class="form-control" style="width: 5em;" min="0" max="1000" step="any" readonly="true" />
84
+ </div>
85
+ <label for="edge" class="col-form-label">mm </label>
86
+
87
+ <label for="head_space" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="ページ上側から版面までの余白">天 </label>
88
+ <div class="col-auto">
89
+ <input type="number" id="head_space" name="head_space" class="form-control" style="width: 5em;" min="0" max="1000" step="any" onchange="change_head_space();" />
90
+ </div>
91
+ <label for="head_space" class="col-form-label">mm </label>
92
+ <label for="bottom_space" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="ページ下側から版面までの余白。天と版面縦幅から導出">地 </label>
93
+ <div class="col-auto">
94
+ <input type="number" id="bottom_space" name="bottom_space" class="form-control" style="width: 5em;" min="0" max="1000" step="any" readonly="true" />
95
+ </div>
96
+ <label for="bottom_space" class="col-form-label">mm</label>
97
+ </div>
98
+
99
+ <div class="form-group row">
100
+ <div class="col-auto" style="padding-right: 0;">
101
+ <label for="headsep" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="ヘッダ領域下部と版面上との間隔">ヘッダ下/本文上間隔</label>
102
+ </div>
103
+ <div class="col-auto">
104
+ <input type="number" id="headsep" name="headsep" class="form-control" style="width: 4em;" min="-1000" max="1000" step="any" onchange="change_headsep();" />
105
+ </div>
106
+ <label for="headsep" class="col-form-label">mm </label>
107
+ <label for="footskip" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="フッタ領域下部と版面下との間隔">本文下/フッタ下間隔</label>
108
+ <div class="col-auto">
109
+ <input type="number" id="footskip" name="footskip" class="form-control" style="width: 4em;" min="-1000" max="1000" step="any" onchange="change_footskip();" />
110
+ </div>
111
+ <label for="footskip" class="col-form-label">mm</label>
112
+ </div>
113
+ <hr/>
114
+
115
+ <div class="form-group row">
116
+ <div class="col-auto">
117
+ <input type="button" id="showdetails" name="showdatails" class="btn btn-secondary" value="詳細設定を表示" onclick="show_details();" data-toggle="tooltip" data-placement="bottom" title="版面設計以外の設定" />
118
+ </div>
119
+ <div class="col-auto">
120
+ <input type="button" id="fordoujin" name="fordoujin" class="btn btn-secondary" value="技術系同人誌印刷の設定" onclick="set_doujin();" data-toggle="tooltip" data-placement="bottom" title="技術系同人誌の印刷所でよく使われる設定をマーク" />
121
+ </div>
122
+ </div>
123
+
124
+ <div id="details">
125
+ <div class="form-group form-check">
126
+ <input type="checkbox" id="ebook" name="ebook" class="form-check-input" checked="true" />
127
+ <label for="ebook" class="form-check-label" data-toggle="tooltip" data-placement="bottom" title="表紙あり・トンボなしの電子配布版のための設定ファイルを準備">電子版の設定ファイル (config-ebook.yml) も作成</label>
128
+ </div>
129
+
130
+ <div class="form-group form-check">
131
+ <input type="checkbox" id="openany" name="openany" class="form-check-input" />
132
+ <label for="openany" data-toggle="tooltip" data-placement="bottom" title="標準では章や目次は常に奇数(右)ページ開始">章や目次が左右どちらのページからも始まることを許可する</label>
133
+ </div>
134
+ <div class="form-group form-check">
135
+ <input type="checkbox" id="fleqno" name="fleqno" class="form-check-input" />
136
+ <label for="fleqno" class="form-check-label" data-toggle="tooltip" data-placement="bottom" title="標準では式は左右中央揃え">数式を左寄せにする</label>
137
+ </div>
138
+ <div class="form-group row">
139
+ <div class="col-auto">
140
+ <label for="startpage" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="通常は1(本文から数えたい場合)または3(表紙から数えたい場合)">冒頭ページ番号</label>
141
+ </div>
142
+ <div class="col-auto">
143
+ <input type="number" id="startpage" name="startpage" class="form-control" style="width: 4em;" value="1" min="1" max="999" />
144
+ </div>
145
+ </div>
146
+ <div class="form-group form-check">
147
+ <input type="checkbox" id="serial_pagination" name="serial_pagination" class="form-check-input" />
148
+ <label for="serial_pagination" class="form-check-label" data-toggle="tooltip" data-placement="bottom" title="標準では前付け(PREDEF)部分はローマ数字">最初からページ番号にアラビア数字を使う</label>
149
+ </div>
150
+ <div class="form-group form-check">
151
+ <input type="checkbox" id="hiddenfolio" name="hiddenfolio" class="form-check-input" />
152
+ <label for="hiddenfolio" class="form-check-label" data-toggle="tooltip" data-placement="bottom" title="ノドのきわにページ番号を埋め込む。印刷所によっては隠しノンブルは不要">ノドへの隠しノンブルの設置 (日光企画等)</label>
153
+ </div>
154
+ <div class="form-group row">
155
+ <div class="col-auto">
156
+ <label for="tombopaper" class="form-check-label" data-toggle="tooltip" data-placement="bottom" title="「自動」の場合は仕上がりのひとまわり大きな紙が選ばれる">トンボ付きの紙サイズ</label>
157
+ </div>
158
+ <div class="col-auto">
159
+ <select id="tombopaper" name="tombopaper" class="btn btn-outline-dark" onchange="change_tombopaper();">
160
+ <option value="auto">自動</option>
161
+ <option value="b5">B5</option>
162
+ <option value="a4">A4</option>
163
+ <option value="b4">B4</option>
164
+ <option value="a3">A3</option>
165
+ </select>
166
+ </div>
167
+ </div>
168
+ <div class="form-group row">
169
+ <div class="col-auto">
170
+ <label for="bleed_margin" class="col-form-label" data-toggle="tooltip" data-placement="bottom" title="通常は3。印刷所によって異なることがある">塗り足し幅(mm)</label>
171
+ </div>
172
+ <div class="col-auto">
173
+ <input type="number" id="bleed_margin" name="bleed_margin" style="width: 4em;" value="3" min="1" max="8" class="form-control" />
174
+ </div>
175
+ </div>
176
+ </div>
177
+
178
+ <div id="result" style="display: none;">
179
+ print: <input type="text" id="result_print" name="result_print" value="" size="80" /><br/>
180
+ ebook: <input type="text" id="result_ebook" name="result_ebook" value="" size="80" />
181
+ </div>
182
+
183
+ <hr/>
184
+ <input type="button" class="btn btn-success" value="作成" onclick="update_result();" data-toggle="tooltip" data-placement="bottom" title="入力に基づいて設定ファイルを作成"/>
185
+ </form>
186
+ <hr/>
187
+ <canvas id="mainCanvas"></canvas>
188
+ </div>
189
+ </body>
190
+ </html>
@@ -0,0 +1,691 @@
1
+ /*
2
+ # Copyright (c) 2019 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
+
10
+ // パラメータオブジェクト
11
+ var p = new Object;
12
+
13
+ // 初期実行
14
+ function init() {
15
+ $('[data-toggle="tooltip"]').tooltip();
16
+ document.getElementById("details").style.display = "none";
17
+ p.cls = "review-jsbook";
18
+ p.scale = 1;
19
+ update_paper_info("a5");
20
+
21
+ reset_all();
22
+ }
23
+
24
+ // パラメータ初期化
25
+ function init_val() {
26
+ p.textwidth = p.o_textwidth;
27
+ p.textheight = p.o_textheight;
28
+ p.head_space = p.o_head_space;
29
+ p.topmargin = p.o_topmargin;
30
+ p.headheight = p.o_headheight;
31
+ p.headsep = p.o_headsep;
32
+ p.footskip = p.o_footskip;
33
+ p.footheight = p.headheight; // もう存在しないものだけど高さは必要
34
+ p.oddsidemargin = p.o_oddsidemargin;
35
+ p.evensidemargin = p.o_evensidemargin;
36
+ p.gutter = p.o_gutter;
37
+
38
+ p.fontsize = p.o_fontsize;
39
+ p.baselineskip = p.o_baselineskip;
40
+
41
+ p.line_length = null;
42
+ p.number_of_lines = null;
43
+
44
+ p.edge = p.paperwidth - p.textwidth - p.gutter;
45
+ p.bottom_space = p.paperheight - p.textheight - p.head_space;
46
+
47
+ p.ebookyaml = true;
48
+
49
+ update_fontsize();
50
+ write_values();
51
+ }
52
+
53
+ // クラス変更
54
+ function change_cls() {
55
+ var v = document.getElementById("cls").value;
56
+ if (v == "review-jsbook" || v == "review-jlreq") {
57
+ p.cls = v;
58
+ change_paper();
59
+ init_val();
60
+ base_draw();
61
+ }
62
+ return true;
63
+ }
64
+
65
+ // 初期化
66
+ function reset_all() {
67
+ init_val();
68
+ base_draw();
69
+ return true;
70
+ }
71
+
72
+ // 詳細表示切り替え
73
+ function show_details() {
74
+ if (document.getElementById("details").style.display == "none") {
75
+ document.getElementById("details").style.display = "block";
76
+ document.getElementById("showdetails").value = "詳細設定を隠す";
77
+
78
+ } else {
79
+ document.getElementById("details").style.display = "none";
80
+ document.getElementById("showdetails").value = "詳細設定を表示";
81
+ }
82
+ return true;
83
+ }
84
+
85
+ // 同人誌基本設定
86
+ function set_doujin() {
87
+ if (document.getElementById("details").style.display == "none") {
88
+ show_details();
89
+ }
90
+ document.getElementById("ebook").checked = true;
91
+ document.getElementById("serial_pagination").checked = true;
92
+ document.getElementById("hiddenfolio").checked = true;
93
+
94
+ return true;
95
+ }
96
+
97
+ // 文字サイズ変更
98
+ function change_fontsize() {
99
+ var v = Number(document.getElementById("fontsize").value);
100
+ if (v == NaN || v < 0.1 || v >= 100) {
101
+ write_values();
102
+ return true;
103
+ }
104
+ if (v > p.baselineskip) {
105
+ var baselineskip = dp2(v * ((p.cls == "review-jlreq") ? 1.7 : 1.6));
106
+ p.baselineskip = baselineskip;
107
+ }
108
+
109
+ if (p.cls == "review-jsbook") {
110
+ var v2 = round_fontsize_jsbook(v);
111
+ if (v != v2) {
112
+ // alert(v + " は、jsbook で許容するpt値 " + v2 + " に丸められます");
113
+ v = v2;
114
+ }
115
+ }
116
+
117
+ p.fontsize = v;
118
+ update_fontsize();
119
+ write_values();
120
+ base_draw();
121
+ return true;
122
+ }
123
+
124
+ // jsbookのQ数丸め
125
+ function round_fontsize_jsbook(v) {
126
+ if (v < 8.5) {
127
+ return 8;
128
+ } else if (v < 9.5) {
129
+ return 9;
130
+ } else if (v < 10.5) {
131
+ return 10;
132
+ } else if (v < 11.5) {
133
+ return 11;
134
+ } else if (v < 12.5) {
135
+ return 12;
136
+ } else if (v < 15.5) {
137
+ return 14;
138
+ } else if (v < 18.5) {
139
+ return 17;
140
+ } else if (v < 20.5) {
141
+ return 20;
142
+ } else if (v < 23.5) {
143
+ return 21;
144
+ } else if (v < 27.5) {
145
+ return 25;
146
+ } else if (v < 33) {
147
+ return 30;
148
+ } else if (v < 39.5) {
149
+ return 36;
150
+ } else {
151
+ return 43;
152
+ }
153
+ }
154
+
155
+ // 行送りの変更
156
+ function change_baselineskip() {
157
+ var v = Number(document.getElementById("baselineskip").value);
158
+ if (v == NaN || v < p.fontsize || v >= 100) {
159
+ write_values();
160
+ return true;
161
+ }
162
+ p.baselineskip = v;
163
+ update_fontsize();
164
+ write_values();
165
+ base_draw();
166
+ return true;
167
+ }
168
+
169
+ // 文字数の変更
170
+ function change_line_length() {
171
+ var v = Number(document.getElementById("line_length").value);
172
+ if (v == NaN || v < 1 || v >= 400) {
173
+ write_values();
174
+ return true;
175
+ }
176
+ p.line_length = Math.floor(v);
177
+ update_wl();
178
+ // 小口を変える
179
+ update_sidemargin();
180
+ write_values();
181
+ base_draw();
182
+ return true;
183
+ }
184
+
185
+ // 行数の変更
186
+ function change_number_of_lines() {
187
+ var v = Number(document.getElementById("number_of_lines").value);
188
+ if (v == NaN || v < 1 || v >= 400) {
189
+ write_values();
190
+ return true;
191
+ }
192
+
193
+ p.number_of_lines = Math.floor(v);
194
+ update_wl();
195
+ // 地を変える
196
+ write_values();
197
+ base_draw();
198
+ return true;
199
+ }
200
+
201
+ // ノドの変更
202
+ function change_gutter() {
203
+ var v = Number(document.getElementById("gutter").value);
204
+ if (v == NaN) {
205
+ write_values();
206
+ return true;
207
+ }
208
+
209
+ v = mmtopt(v);
210
+ var edge = p.paperwidth - v - p.textwidth;
211
+ if (v < 0 || v > mmtopt(p.paperwidth) || edge < 0) {
212
+ write_values(); // はみだし
213
+ return true;
214
+ }
215
+
216
+ p.gutter = v;
217
+ p.edge = edge;
218
+ update_sidemargin();
219
+ write_values();
220
+ base_draw();
221
+ return true;
222
+ }
223
+
224
+ // 天変更
225
+ function change_head_space() {
226
+ var v = Number(document.getElementById("head_space").value);
227
+ if (v == NaN) {
228
+ write_values();
229
+ return true;
230
+ }
231
+
232
+ v = mmtopt(v);
233
+ var bottom_space = p.paperheight - v - p.textheight;
234
+ if (v < 0 || v > mmtopt(p.paperheight) || bottom_space < 0) {
235
+ write_values();
236
+ return true;
237
+ }
238
+
239
+ p.head_space = v;
240
+ p.bottom_space = bottom_space;
241
+ update_head();
242
+ write_values();
243
+ base_draw();
244
+ return true;
245
+ }
246
+
247
+ // ヘッダ下/本文上アキ変更
248
+ function change_headsep() {
249
+ var v = Number(document.getElementById("headsep").value);
250
+ if (v == NaN) {
251
+ write_values();
252
+ return true;
253
+ }
254
+
255
+ v = mmtopt(v);
256
+ if (v < -1 * mmtopt(p.paperheight) || v > p.head_space) {
257
+ write_values();
258
+ return true;
259
+ }
260
+
261
+ p.headsep = v;
262
+ update_head();
263
+ base_draw();
264
+ return true;
265
+ }
266
+
267
+ // 本文下/フッタ下変更
268
+ function change_footskip() {
269
+ var v = Number(document.getElementById("footskip").value);
270
+ if (v == NaN) {
271
+ write_values();
272
+ return true;
273
+ }
274
+
275
+ v = mmtopt(v);
276
+ if (v < 0 || v > p.edge) {
277
+ write_values();
278
+ return true;
279
+ }
280
+
281
+ p.footskip = v;
282
+ base_draw();
283
+ return true;
284
+ }
285
+
286
+ // 紙変更
287
+ function change_paper() {
288
+ var paper = document.getElementById("papersize").value;
289
+ update_paper_info(paper);
290
+ p.textwidth = p.o_textwidth;
291
+ p.textheight = p.o_textheight;
292
+ p.topmargin = p.o_topmargin;
293
+ p.head_space = p.o_head_space;
294
+ p.gutter = p.o_gutter;
295
+
296
+ update_fontsize();
297
+ p.edge = p.paperwidth - p.textwidth - p.gutter;
298
+ update_sidemargin();
299
+ p.bottom_space = p.paperheight - p.head_space - p.textheight;
300
+ write_values();
301
+ change_tombopaper();
302
+ base_draw();
303
+ }
304
+
305
+ // トンボ紙変更
306
+ function change_tombopaper() {
307
+ var f = document.getElementById("tombopaper");
308
+ var papersize = document.getElementById("papersize").value;
309
+ if (f.value != "auto") {
310
+ if (papersize == "b5" && f.value == "b5") {
311
+ f.value = "auto";
312
+ } else if (papersize == "a4" && (f.value == "b5" || f.value == "a4")) {
313
+ f.value = "auto";
314
+ }
315
+ }
316
+ return true;
317
+ }
318
+
319
+ // フォームへの値書き込み
320
+ function write_values() {
321
+ document.getElementById("fontsize").value = p.fontsize;
322
+ document.getElementById("baselineskip").value = p.baselineskip;
323
+ document.getElementById("line_length").value = p.line_length;
324
+ document.getElementById("number_of_lines").value = p.number_of_lines;
325
+ document.getElementById("gutter").value = pttomm(p.gutter);
326
+ document.getElementById("edge").value = pttomm(p.edge);
327
+ document.getElementById("head_space").value = pttomm(p.head_space);
328
+ document.getElementById("bottom_space").value = pttomm(p.bottom_space);
329
+ document.getElementById("headsep").value = pttomm(p.headsep);
330
+ document.getElementById("footskip").value = pttomm(p.footskip);
331
+ update_qh();
332
+ update_hanmen();
333
+ }
334
+
335
+ // 紙情報の初期情報
336
+ function update_paper_info(paper) {
337
+ switch(p.cls + "-" + paper) {
338
+ case "review-jsbook-a5":
339
+ p.o_fontsize = 10;
340
+ p.o_baselineskip = 16;
341
+ p.papersize = "a5";
342
+ p.paperwidth = mmtopt(148);
343
+ p.paperheight = mmtopt(210);
344
+ p.o_textwidth = 314.39209;
345
+ p.o_textheight = 460.86066;
346
+ p.o_headsep = 14.31091;
347
+ p.o_headheight = 20.0;
348
+ p.o_topmargin = -16.10184;
349
+ p.o_oddsidemargin = -18.91565;
350
+ p.o_evensidemargin = -18.91565;
351
+ p.o_footskip = 0;
352
+ break;
353
+
354
+ case "review-jlreq-a5":
355
+ p.o_fontsize = 10;
356
+ p.o_baselineskip = 17;
357
+ p.papersize = "a5";
358
+ p.paperwidth = mmtopt(148);
359
+ p.paperheight = mmtopt(210);
360
+ p.o_textwidth = 310.0;
361
+ p.o_textheight = 435.0;
362
+ p.o_headsep = 18.79999;
363
+ p.o_headheight = 10.0;
364
+ p.o_topmargin = -21.01604;
365
+ p.o_oddsidemargin = -16.7196;
366
+ p.o_evensidemargin = -16.7196;
367
+ p.o_footskip = 30;
368
+ break;
369
+
370
+ case "review-jsbook-b5":
371
+ p.o_fontsize = 10;
372
+ p.o_baselineskip = 16;
373
+ p.papersize = "b5";
374
+ p.paperwidth = mmtopt(182);
375
+ p.paperheight = mmtopt(257);
376
+ p.o_textwidth = 369.87305;
377
+ p.o_textheight = 572.86066;
378
+ p.o_headsep = 14.31091;
379
+ p.o_headheight = 20.0;
380
+ p.o_topmargin = -5.23787;
381
+ p.o_oddsidemargin = -16.78009;
382
+ p.o_evensidemargin = 20.20721;
383
+ p.o_footskip = 0;
384
+ break;
385
+
386
+ case "review-jlreq-b5":
387
+ p.o_fontsize = 10;
388
+ p.o_baselineskip = 17;
389
+ p.papersize = "b5";
390
+ p.paperwidth = mmtopt(182);
391
+ p.paperheight = mmtopt(257);
392
+ p.o_textwidth = 380.0;
393
+ p.o_textheight = 537.0;
394
+ p.o_headsep = 18.79999;
395
+ p.o_headheight = 10.0;
396
+ p.o_topmargin = -5.15207;
397
+ p.o_oddsidemargin = -3.34991;
398
+ p.o_evensidemargin = -3.34991;
399
+ p.o_footskip = 30;
400
+ break;
401
+
402
+ case "review-jsbook-a4":
403
+ p.o_fontsize = 10;
404
+ p.o_baselineskip = 16;
405
+ p.papersize = "a4";
406
+ p.paperwidth = mmtopt(210);
407
+ p.paperheight = mmtopt(297);
408
+ p.o_textwidth = 369.87305;
409
+ p.o_textheight = 572.86066;
410
+ p.o_headsep = 14.31091;
411
+ p.o_headheight = 20.0;
412
+ p.o_topmargin = -5.23787;
413
+ p.o_oddsidemargin = -18.55695;
414
+ p.o_evensidemargin = 101.6518;
415
+ p.o_footskip = 0;
416
+ break;
417
+
418
+ case "review-jlreq-a4":
419
+ p.o_fontsize = 10;
420
+ p.o_baselineskip = 17;
421
+ p.papersize = "a4";
422
+ p.paperwidth = mmtopt(210);
423
+ p.paperheight = mmtopt(297);
424
+ p.o_textwidth = 440.0;
425
+ p.o_textheight = 622.0;
426
+ p.o_headsep = 18.79999;
427
+ p.o_headheight = 10.0;
428
+ p.o_topmargin = 9.25345;
429
+ p.o_oddsidemargin = 6.48395;
430
+ p.o_evensidemargin = 6.48395;
431
+ p.o_footskip = 30;
432
+ break;
433
+ }
434
+
435
+ p.o_head_space = inchpt() + p.o_topmargin + p.o_headheight + p.o_headsep;
436
+ p.o_gutter = inchpt() + p.o_oddsidemargin;
437
+ }
438
+
439
+ // 文字サイズに伴う行・列更新
440
+ function update_fontsize() {
441
+ p.jfontsize = p.fontsize;
442
+ if (p.cls == "review-jsbook") p.jfontsize = p.fontsize * 0.9246895759999999; // http://akahana-1.hatenablog.jp/entry/2017/12/06/234615
443
+
444
+ p.line_length = Math.floor(nearlyRound(p.textwidth / p.jfontsize)); // .99→繰り上げにする
445
+ p.number_of_lines = Math.floor(nearlyRound((p.textheight + p.headsep) / p.baselineskip));
446
+ }
447
+
448
+ // 小口、地の追従更新
449
+ function update_wl() {
450
+ p.textwidth = p.jfontsize * p.line_length;
451
+ p.textheight = p.baselineskip * p.number_of_lines;
452
+ p.edge = p.paperwidth - p.textwidth - p.gutter;
453
+ p.bottom_space = p.paperheight - p.textheight - p.head_space;
454
+ return true;
455
+ }
456
+
457
+ // 文字サイズのQ/H表示
458
+ function update_qh() {
459
+ document.getElementById("fontsize_q").innerText = dp2(pttoq(p.fontsize)) + "Q, " + dp2(pttoq(p.baselineskip)) + "H";
460
+ }
461
+
462
+ // 版面表示
463
+ function update_hanmen() {
464
+ document.getElementById("hanmen").innerText = dp2(pttomm(p.textwidth)) + "mm×" + dp2(pttomm(p.textheight)) + "mm";
465
+ }
466
+
467
+ // oddside,evensideを変える
468
+ function update_sidemargin() {
469
+ p.oddsidemargin = p.gutter - inchpt();
470
+ p.evensidemargin = p.paperwidth - 2 * inchpt() - p.oddsidemargin - p.textwidth;
471
+ }
472
+
473
+ // topmarginを変える
474
+ function update_head() {
475
+ p.topmargin = p.head_space - inchpt() - p.headheight - p.headsep;
476
+ }
477
+
478
+ // 描画
479
+ function base_draw() {
480
+ canvas = document.getElementById("mainCanvas");
481
+ stage = new createjs.Stage(canvas);
482
+ stage.scaleX = p.scale;
483
+ stage.scaleY = p.scale;
484
+
485
+ canvas.width = p.paperwidth * 2 + 10;
486
+ canvas.height = p.paperheight + 10;
487
+
488
+ p.paper_left = new createjs.Shape();
489
+ p.paper_left.graphics.beginStroke("black").beginFill("#fffff0").drawRect(0, 0, p.paperwidth, p.paperheight);
490
+ stage.addChild(p.paper_left);
491
+ p.paper_right = new createjs.Shape();
492
+ p.paper_right.graphics.beginStroke("black").beginFill("#fffff0").drawRect(p.paperwidth, 0, p.paperwidth, p.paperheight);
493
+ stage.addChild(p.paper_right);
494
+
495
+ p.paper_left_text = new createjs.Text("左ページ(偶数)", "sans serif", "black");
496
+ p.paper_left_text.x = 10;
497
+ p.paper_left_text.y = 10;
498
+ p.paper_left_text.textAlign = "left";
499
+ p.paper_left_text.textBaseline = "top";
500
+ stage.addChild(p.paper_left_text);
501
+ p.paper_right_text = new createjs.Text("右ページ(奇数)", "sans serif", "black");
502
+ p.paper_right_text.x = p.paperwidth * 2 - 10;
503
+ p.paper_right_text.y = 10;
504
+ p.paper_right_text.textAlign = "right";
505
+ p.paper_right_text.textBaseline = "top";
506
+ stage.addChild(p.paper_right_text);
507
+
508
+ // ヘッダ領域
509
+ p.head_left = new createjs.Container();
510
+ p.head_left.x = inchpt() + p.evensidemargin;
511
+ p.head_left.y = inchpt() + p.topmargin;
512
+ stage.addChild(p.head_left);
513
+
514
+ p.head_left_box = new createjs.Shape();
515
+ p.head_left_box.alpha = 0.8;
516
+ p.head_left_box.graphics.beginStroke("black").beginFill("#c0c0c0").drawRect(0, 0, p.textwidth, p.headheight);
517
+ p.head_left.addChild(p.head_left_box);
518
+ p.head_left_text = new createjs.Text("ヘッダ領域", "sans serif", "black");
519
+ p.head_left_text.x = p.textwidth / 2;
520
+ p.head_left_text.y = p.headheight / 2;
521
+ p.head_left_text.textAlign = "center";
522
+ p.head_left_text.textBaseline = "middle";
523
+ p.head_left.addChild(p.head_left_text);
524
+
525
+ p.head_right = new createjs.Container();
526
+ p.head_right.x = p.paperwidth + inchpt() + p.oddsidemargin;
527
+ p.head_right.y = inchpt() + p.topmargin;
528
+ stage.addChild(p.head_right);
529
+
530
+ p.head_right_box = new createjs.Shape();
531
+ p.head_right_box.alpha = 0.8;
532
+ p.head_right_box.graphics.beginStroke("black").beginFill("#c0c0c0").drawRect(0, 0, p.textwidth, p.headheight);
533
+ p.head_right.addChild(p.head_right_box);
534
+ p.head_right_text = new createjs.Text("ヘッダ領域", "sans serif", "black");
535
+ p.head_right_text.x = p.textwidth / 2;
536
+ p.head_right_text.y = p.headheight / 2;
537
+ p.head_right_text.textAlign = "center";
538
+ p.head_right_text.textBaseline = "middle";
539
+ p.head_right.addChild(p.head_right_text);
540
+
541
+ // 本文
542
+ var border_col = "black";
543
+ var border_width = 1;
544
+ if ((p.textwidth + p.gutter) > p.paperwidth || (p.textheight + p.head_space) > p.paperheight) {
545
+ border_col = "red";
546
+ border_width = 2;
547
+ }
548
+
549
+ p.body_left = new createjs.Container();
550
+ p.body_left.x = inchpt() + p.evensidemargin;
551
+ p.body_left.y = inchpt() + p.topmargin + p.headheight + p.headsep;
552
+ stage.addChild(p.body_left);
553
+
554
+ p.body_left_box = new createjs.Shape();
555
+ p.body_left_box.alpha = 0.8;
556
+ p.body_left_box.graphics.beginStroke(border_col).setStrokeStyle(border_width).beginFill("#e0ffe0").drawRect(0, 0, p.textwidth, p.textheight);
557
+ p.body_left.addChild(p.body_left_box);
558
+ makelines(p.body_left);
559
+
560
+ p.body_right = new createjs.Container();
561
+ p.body_right.x = p.paperwidth + inchpt() + p.oddsidemargin;
562
+ p.body_right.y = inchpt() + p.topmargin + p.headheight + p.headsep;
563
+ stage.addChild(p.body_right);
564
+
565
+ p.body_right_box = new createjs.Shape();
566
+ p.body_right_box.alpha = 0.8;
567
+ p.body_right_box.graphics.beginStroke(border_col).setStrokeStyle(border_width).beginFill("#e0ffe0").drawRect(0, 0, p.textwidth, p.textheight);
568
+ p.body_right.addChild(p.body_right_box);
569
+ makelines(p.body_right);
570
+
571
+ // フッタ
572
+ p.foot_left = new createjs.Container();
573
+ p.foot_left.x = inchpt() + p.evensidemargin;
574
+ p.foot_left.y = inchpt() + p.topmargin + p.headheight + p.headsep + p.textheight + p.footskip - p.footheight;
575
+ stage.addChild(p.foot_left);
576
+
577
+ p.foot_left_box = new createjs.Shape();
578
+ p.foot_left_box.alpha = 0.5;
579
+ p.foot_left_box.graphics.beginStroke("black").beginFill("#c0c0c0").drawRect(0, 0, p.textwidth, p.footheight);
580
+ p.foot_left.addChild(p.foot_left_box);
581
+ p.foot_left_text = new createjs.Text("フッタ領域", "sans serif", "black");
582
+ p.foot_left_text.x = p.textwidth / 2;
583
+ p.foot_left_text.y = p.footheight / 2;
584
+ p.foot_left_text.textAlign = "center";
585
+ p.foot_left_text.textBaseline = "middle";
586
+ p.foot_left.addChild(p.foot_left_text);
587
+
588
+ p.foot_right = new createjs.Container();
589
+ p.foot_right.x = p.paperwidth + inchpt() + p.oddsidemargin;
590
+ p.foot_right.y = inchpt() + p.topmargin + p.headheight + p.headsep + p.textheight + p.footskip - p.footheight;
591
+ stage.addChild(p.foot_right);
592
+
593
+ p.foot_right_box = new createjs.Shape();
594
+ p.foot_right_box.alpha = 0.5;
595
+ p.foot_right_box.graphics.beginStroke("black").beginFill("#c0c0c0").drawRect(0, 0, p.textwidth, p.footheight);
596
+ p.foot_right.addChild(p.foot_right_box);
597
+ p.foot_right_text = new createjs.Text("フッタ領域", "sans serif", "black");
598
+ p.foot_right_text.x = p.textwidth / 2;
599
+ p.foot_right_text.y = p.footheight / 2;
600
+ p.foot_right_text.textAlign = "center";
601
+ p.foot_right_text.textBaseline = "middle";
602
+ p.foot_right.addChild(p.foot_right_text);
603
+
604
+ stage.update();
605
+ }
606
+
607
+ // 行文字配置
608
+ function makelines(container) {
609
+ for (var y = 0; y < p.number_of_lines; y++) {
610
+ for (var x = 0; x < p.line_length; x++) {
611
+ var ch = new createjs.Shape();
612
+ ch.alpha = 0.2;
613
+ var fcolor = "#ffffff";
614
+ if ((x + 1) % 10 == 0) fcolor = "#000000";
615
+ ch.graphics.beginStroke("#0000ff").beginFill(fcolor).drawRect(x * p.jfontsize, y * p.baselineskip, p.jfontsize - 1, p.jfontsize - 1);
616
+ container.addChild(ch);
617
+ }
618
+ }
619
+ var s = new createjs.Text("本文領域:" + p.line_length + "文字×" + p.number_of_lines + "行", "sans serif", "black");
620
+ s.x = p.textwidth / 2;
621
+ s.y = p.textheight / 2;
622
+ s.textAlign = "center";
623
+ s.textBaseline = "middle";
624
+ container.addChild(s);
625
+ }
626
+
627
+ // texdocumentclass出力
628
+ function update_result() {
629
+ var ra = ["media=print"];
630
+ ra.push("paper=" + document.getElementById("papersize").value);
631
+ if (p.fontsize != p.o_fontsize) ra.push("fontsize=" + p.fontsize + "pt");
632
+ if (p.baselineskip != p.o_baselineskip) ra.push("baselineskip=" + p.baselineskip + "pt");
633
+ ra.push("line_length=" + p.line_length + "zw");
634
+ ra.push("number_of_lines=" + p.number_of_lines);
635
+ if (p.head_space != p.o_head_space) ra.push("head_space=" + dp2(pttomm(p.head_space)) + "mm");
636
+ if (p.gutter != p.o_gutter) ra.push("gutter=" + dp2(pttomm(p.gutter)) + "mm");
637
+ if (p.headsep != p.o_headsep) ra.push("headheight=" + dp2(pttomm(p.headheight)) + "mm");
638
+ if (p.headsep != p.o_headsep) ra.push("headsep=" + dp2(pttomm(p.headsep)) + "mm");
639
+ if (p.footskip != p.o_footskip) ra.push("footskip=" + dp2(pttomm(p.footskip)) + "mm");
640
+ if (document.getElementById("openany").checked) ra.push("openany");
641
+ if (document.getElementById("fleqno").checked) ra.push("fleqno");
642
+ if (document.getElementById("startpage").value != "1") ra.push("startpage=" + document.getElementById("startpage").value);
643
+ if (document.getElementById("serial_pagination").checked) ra.push("serial_pagination=true");
644
+ if (document.getElementById("hiddenfolio").checked) ra.push("hiddenfolio=nikko-pc");
645
+ if (document.getElementById("tombopaper").value != "auto") ra.push("tombopaper=" + document.getElementById("tombopaper").value);
646
+ if (document.getElementById("bleed_margin").value != "3") ra.push("bleed_margin=" + document.getElementById("bleed_margin").value + "mm");
647
+ var result = ra.join(",");
648
+ document.getElementById("result_print").value = result;
649
+ if (document.getElementById("ebook").checked) {
650
+ document.getElementById("result_ebook").value = result.replace("media=print", "media=ebook");
651
+ } else {
652
+ document.getElementById("result_ebook").value = "";
653
+ }
654
+ document.reviewform.submit();
655
+ }
656
+
657
+ // インチ→pt
658
+ function inchpt() {
659
+ return 72.2712035135135;
660
+ }
661
+
662
+ // mm→pt
663
+ function mmtopt(mm) {
664
+ return mm * 2.8453229729729728;
665
+ }
666
+
667
+ // Q→pt
668
+ function qtopt(q) {
669
+ return q * 0.25 * 2.8453229729729728;
670
+ }
671
+
672
+ // pt→mm
673
+ function pttomm(pt) {
674
+ return pt * 0.3514598096921122;
675
+ }
676
+
677
+ // pt→Q
678
+ function pttoq(pt) {
679
+ return pt * 0.3514598096921122 * 4;
680
+ }
681
+
682
+ // 99→1、.98→0にする
683
+ function nearlyRound(n) {
684
+ var r = (((n + 0.01) * 10) >> 0) / 10;
685
+ return (r > n) ? r : n;
686
+ }
687
+
688
+ // 小数点2桁化
689
+ function dp2(v) {
690
+ return Math.round(v * 100) / 100;
691
+ }