review-retrovert 0.9.7 → 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +9 -0
  3. data/.editorconfig +3 -0
  4. data/.github/workflows/retrovert.yml +20 -5
  5. data/.gitignore +1 -0
  6. data/.vscode/launch.json +48 -0
  7. data/Gemfile.lock +13 -4
  8. data/Makefile +24 -0
  9. data/docker/review.Dockerfile +10 -0
  10. data/lib/review/retrovert/converter.rb +374 -111
  11. data/lib/review/retrovert/reviewcompat.rb +57 -0
  12. data/lib/review/retrovert/reviewdef.rb +70 -0
  13. data/lib/review/retrovert/sty/{ird.sty → ird.sty.erb} +9 -1
  14. data/lib/review/retrovert/sty/review-retrovert-custom.sty.erb +6 -0
  15. data/lib/review/retrovert/utils.rb +35 -0
  16. data/lib/review/retrovert/version.rb +1 -1
  17. data/lib/review/retrovert/yamlconfig.rb +0 -1
  18. data/package-lock.json +6 -0
  19. data/package.json +1 -0
  20. data/review-retrovert.gemspec +5 -1
  21. data/testdata/mybook/.gitignore +3 -1
  22. data/testdata/mybook/.textlintrc +11 -0
  23. data/testdata/mybook/Rakefile +8 -0
  24. data/testdata/mybook/catalog.yml +36 -10
  25. data/testdata/mybook/config-starter.yml +134 -9
  26. data/testdata/mybook/config.yml +44 -15
  27. data/testdata/mybook/contents/00-preface.re +48 -2
  28. data/testdata/mybook/contents/01-install.re +38 -5
  29. data/testdata/mybook/contents/02-tutorial.re +333 -113
  30. data/testdata/mybook/contents/03-syntax.re +2370 -373
  31. data/testdata/mybook/contents/04-customize.re +424 -88
  32. data/testdata/mybook/contents/05-faq.re +288 -10
  33. data/testdata/mybook/contents/06-bestpractice.re +431 -59
  34. data/testdata/mybook/contents/91-compare.re +402 -2
  35. data/testdata/mybook/contents/92-filelist.re +14 -8
  36. data/testdata/mybook/contents/93-background.re +10 -10
  37. data/testdata/mybook/contents/99-postface.re +2 -1
  38. data/testdata/mybook/contents/r0-root.re +1 -1
  39. data/testdata/mybook/css/webstyle.css +180 -2
  40. data/testdata/mybook/data/terms.txt +3 -0
  41. data/testdata/mybook/data/words.txt +15 -0
  42. data/testdata/mybook/images/03-syntax/index-page.png +0 -0
  43. data/testdata/mybook/images/03-syntax/order-detail.png +0 -0
  44. data/testdata/mybook/images/04-customize/section_decoration_samples.png +0 -0
  45. data/testdata/mybook/images/05-faq/dummy-image.png +0 -0
  46. data/testdata/mybook/images/06-bestpractice/section_title_wlines.png +0 -0
  47. data/testdata/mybook/images/avatar-b.png +0 -0
  48. data/testdata/mybook/images/avatar-g.png +0 -0
  49. data/testdata/mybook/images/avatar-r.png +0 -0
  50. data/testdata/mybook/images/caution-icon.png +0 -0
  51. data/testdata/mybook/images/info-icon.png +0 -0
  52. data/testdata/mybook/images/warning-icon.png +0 -0
  53. data/testdata/mybook/layouts/layout.html5.erb +3 -1
  54. data/testdata/mybook/layouts/layout.tex.erb +265 -379
  55. data/testdata/mybook/layouts/layout.tex.erb.orig +386 -0
  56. data/testdata/mybook/lib/ruby/review-book.rb +64 -0
  57. data/testdata/mybook/lib/ruby/review-builder.rb +902 -63
  58. data/testdata/mybook/lib/ruby/review-compiler.rb +675 -22
  59. data/testdata/mybook/lib/ruby/review-epubbuilder.rb +33 -0
  60. data/testdata/mybook/lib/ruby/review-epubmaker.rb +10 -7
  61. data/testdata/mybook/lib/ruby/review-htmlbuilder.rb +354 -66
  62. data/testdata/mybook/lib/ruby/review-latexbuilder.rb +429 -146
  63. data/testdata/mybook/lib/ruby/review-maker.rb +117 -6
  64. data/testdata/mybook/lib/ruby/review-markdownbuilder.rb +945 -0
  65. data/testdata/mybook/lib/ruby/review-markdownmaker.rb +91 -0
  66. data/testdata/mybook/lib/ruby/review-monkeypatch.rb +2 -0
  67. data/testdata/mybook/lib/ruby/review-pdfmaker.rb +160 -82
  68. data/testdata/mybook/lib/ruby/review-webmaker.rb +20 -5
  69. data/testdata/mybook/lib/tasks/review.rake +14 -0
  70. data/testdata/mybook/lib/tasks/starter.rake +148 -4
  71. data/testdata/mybook/sty/indexstyle.ist +25 -0
  72. data/testdata/mybook/sty/mytextsize.sty +29 -0
  73. data/testdata/mybook/sty/mytitlepage.sty +34 -11
  74. data/testdata/mybook/sty/review-base.sty +276 -0
  75. data/testdata/mybook/sty/starter-codeblock.sty +237 -106
  76. data/testdata/mybook/sty/starter-color.sty +72 -17
  77. data/testdata/mybook/sty/starter-heading.sty +60 -13
  78. data/testdata/mybook/sty/starter-misc.sty +894 -0
  79. data/testdata/mybook/sty/starter-note.sty +67 -14
  80. data/testdata/mybook/sty/starter-talklist.sty +105 -0
  81. data/testdata/mybook/sty/starter-util.sty +35 -0
  82. data/testdata/mybook/sty/starter.sty +8 -526
  83. metadata +80 -4
@@ -0,0 +1,386 @@
1
+ \documentclass[dvipdfmx,<%= @documentclassoption %>]{<%= @documentclass %>}
2
+ % %% fixes to LaTeX2e
3
+ % \usepackage{fix-cm}[2006/09/13 v1.1m]
4
+ % \usepackage{fixltx2e}[2006/09/13 v1.1m]
5
+
6
+ <%- if @texcompiler == "uplatex" -%>
7
+ \usepackage[deluxe,uplatex]{otf}
8
+ <%- else -%>
9
+ \usepackage[deluxe]{otf}
10
+ <%- end -%>
11
+ \usepackage{caption}
12
+ \usepackage{suffix}
13
+ \usepackage[T1]{fontenc}\usepackage{textcomp}%T1/TS1
14
+ \usepackage{lmodern}
15
+ \usepackage[dvipdfmx]{graphicx}
16
+ \usepackage[dvipdfmx,table]{xcolor}%requires colortbl, array
17
+ \usepackage{framed}
18
+ \usepackage{wrapfig}
19
+ \definecolor{shadecolor}{gray}{0.9}
20
+ \definecolor{shadecolorb}{gray}{0.1}
21
+ \definecolor{reviewgreen}{rgb}{0,0.4,0}
22
+ \definecolor{reviewblue}{rgb}{0.2,0.2,0.4}
23
+ \definecolor{reviewred}{rgb}{0.7,0,0}
24
+ \definecolor{reviewdarkred}{rgb}{0.3,0,0}
25
+ \usepackage[utf8]{inputenc}
26
+ \usepackage{ascmac}
27
+ \usepackage{float}
28
+ \usepackage{alltt}
29
+ \usepackage{amsmath}
30
+
31
+ %% if you use @<u>{} (underline), use jumoline.sty
32
+ \IfFileExists{jumoline.sty}{
33
+ \usepackage{jumoline}
34
+ }
35
+
36
+ \newenvironment{shadedb}{%
37
+ \def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolorb}}%
38
+ \MakeFramed {\FrameRestore}}%
39
+ {\endMakeFramed}
40
+
41
+ <%- unless ["utbook", "tbook"].include?(@documentclass) -%>
42
+ \usepackage[top=10zw,bottom=12zw,left=10zw,right=10zw]{geometry}
43
+ %\usepackage[top=5zw,bottom=5zw,left=1zw,right=1zw]{geometry}
44
+ <%- end -%>
45
+
46
+ \newcommand{\parasep}{\vspace*{3zh}}
47
+ \setlength{\footskip}{30pt}
48
+
49
+ %% Bookmarkの文字化け対策(日本語向け)
50
+ \usepackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true,colorlinks=true,%
51
+ pdftitle={<%= escape_latex(@config.name_of("booktitle")) %>},%
52
+ pdfauthor={<%= escape_latex(@config.names_of("aut").join(I18n.t("names_splitter"))) %>}]{hyperref}
53
+ \usepackage[dvipdfmx]{pxjahyper}
54
+
55
+ <%- if ["utbook", "tbook"].include?(@documentclass) -%>
56
+ \newcommand{\headfont}{\gtfamily\sffamily\bfseries}
57
+ \usepackage{plext}
58
+ <%- end -%>
59
+
60
+ <%- if config["highlight"] && config["highlight"]["latex"] == "listings" -%>
61
+ <%- if config["language"] == "ja" -%>
62
+ \usepackage{listings,jlisting}
63
+ <%- else -%>
64
+ \usepackage{listings}
65
+ <%- end -%>
66
+ \renewcommand{\lstlistingname}{<%= escape_latex(I18n.t("list")) %>}
67
+ \lstset{%
68
+ breaklines=true,%
69
+ breakautoindent=false,%
70
+ breakindent=0pt,%
71
+ fontadjust=true,%
72
+ backgroundcolor=\color{shadecolor},%
73
+ frame=single,%
74
+ framerule=0pt,%
75
+ basicstyle=\ttfamily\scriptsize,%
76
+ commentstyle=\color{reviewgreen},%
77
+ identifierstyle=\color{reviewblue},%
78
+ stringstyle=\color{reviewred},%
79
+ keywordstyle=\bfseries\color{reviewdarkred},%
80
+ }
81
+
82
+ \lstnewenvironment{reviewemlistlst}[1][]{\lstset{#1}}{}
83
+ \lstnewenvironment{reviewemlistnumlst}[1][]{\lstset{numbers=left, #1}}{}
84
+ \lstnewenvironment{reviewlistlst}[1][]{\lstset{#1}}{}
85
+ \lstnewenvironment{reviewlistnumlst}[1][]{\lstset{numbers=left, #1}}{}
86
+ \lstnewenvironment{reviewsourcelst}[1][]{\lstset{#1}}{}
87
+ \lstnewenvironment{reviewsourcenumlst}[1][]{\lstset{numbers=left, #1}}{}
88
+ \lstnewenvironment{reviewcmdlst}[1][]{\lstset{backgroundcolor=\color{white}, frameround=tttt, frame=trbl, #1}}{}
89
+ <%- end -%>
90
+
91
+ \newenvironment{reviewimage}{%
92
+ \begin{figure}[H]
93
+ \begin{center}}{%
94
+ \end{center}
95
+ \end{figure}}
96
+
97
+ \newenvironment{reviewdummyimage}{%
98
+ \begin{figure}[H]
99
+ \begin{center}\begin{alltt}}{%
100
+ \end{alltt}\end{center}
101
+ \end{figure}}
102
+
103
+ \newenvironment{reviewemlist}{%
104
+ \medskip\small\begin{shaded}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
105
+ \end{alltt}\end{shaded}}
106
+
107
+ \newenvironment{reviewlist}{%
108
+ \begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
109
+ \end{alltt}\end{shaded}\par\vspace*{0.5zw}}
110
+
111
+ \newenvironment{reviewsource}{%
112
+ \begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
113
+ \end{alltt}\end{shaded}\par\vspace*{0.5zw}}
114
+
115
+ \newenvironment{reviewcmd}{%
116
+ \color{white}\medskip\small\begin{shadedb}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
117
+ \end{alltt}\end{shadedb}}
118
+
119
+ \newenvironment{reviewbox}{%
120
+ \medskip\small\begin{framed}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
121
+ \end{alltt}\end{framed}}
122
+
123
+ \newenvironment{reviewtable}[1]{%
124
+ \begin{center}\small\setlength{\baselineskip}{1.2zw}
125
+ \begin{tabular}{#1}}{%
126
+ \end{tabular}
127
+ \end{center}}
128
+
129
+ \newenvironment{reviewcolumn}{%
130
+ \begin{framed}
131
+ }{%
132
+ \end{framed}
133
+ \vspace{2zw}}
134
+
135
+ \newcommand{\reviewcolumnhead}[2]{%
136
+ {\noindent\large <%= escape_latex(I18n.t("column_head"))%>: #2}}
137
+
138
+ \newcommand{\reviewtablecaption}[1]{%
139
+ \caption{#1}}
140
+
141
+ \WithSuffix\newcommand\reviewtablecaption*[1]{%
142
+ \caption*{#1}}
143
+
144
+ \newcommand{\reviewimgtablecaption}[1]{%
145
+ \caption{#1}\vspace{-3mm}}
146
+
147
+ \newcommand{\reviewbackslash}[0]{%
148
+ \textbackslash{}}
149
+
150
+ \newcommand{\reviewlistcaption}[1]{%
151
+ \medskip{\small\noindent #1}\vspace*{-1.3zw}}
152
+
153
+ \newcommand{\reviewemlistcaption}[1]{%
154
+ \medskip{\small\noindent #1}\vspace*{-1.3zw}}
155
+
156
+ \newcommand{\reviewsourcecaption}[1]{%
157
+ \medskip{\small\noindent #1}\vspace*{-1.3zw}}
158
+
159
+ \newcommand{\reviewcmdcaption}[1]{%
160
+ \medskip{\small\noindent #1}\vspace*{-1.3zw}}
161
+
162
+ \newcommand{\reviewindepimagecaption}[1]{%
163
+ \begin{center}#1\end{center}}
164
+
165
+ \newcommand{\reviewboxcaption}[1]{%
166
+ \medskip{\small\noindent #1}\vspace*{-1.3zw}}
167
+
168
+ \newcommand{\reviewimageref}[2]{<%= escape_latex(I18n.t("image"))%> #1}
169
+ \newcommand{\reviewtableref}[2]{<%= escape_latex(I18n.t("table"))%> #1}
170
+ \newcommand{\reviewlistref}[1]{<%= escape_latex(I18n.t("list"))%> #1}
171
+ \newcommand{\reviewbibref}[2]{#1}
172
+ \newcommand{\reviewcolumnref}[2]{<%= escape_latex(I18n.t("columnname"))%> #1}
173
+ \newcommand{\reviewsecref}[2]{#1}
174
+
175
+ \newcommand{\reviewminicolumntitle}[1]{%
176
+ {\large <%= escape_latex(I18n.t("memo_head"))%>: #1}\\}
177
+
178
+ <%- if @config["toctitle"].present? -%>
179
+ \renewcommand{\contentsname}{<%= escape_latex(@config["toctitle"]) %>}
180
+ <%- elsif I18n.t("toctitle") -%>
181
+ \renewcommand{\contentsname}{<%= escape_latex(I18n.t("toctitle")) %>}
182
+ <%- end -%>
183
+
184
+ \newenvironment{reviewminicolumn}{%
185
+ \vspace{1.5zw}\begin{screen}}{%
186
+ \end{screen}\vspace{2zw}}
187
+
188
+ \newcommand{\reviewkw}[1]{\textbf{\textgt{#1}}}
189
+ \newcommand{\reviewami}[1]{\mask{#1}{A}}
190
+ \newcommand{\reviewem}[1]{\textbf{#1}}
191
+ \newcommand{\reviewstrong}[1]{\textbf{#1}}
192
+ \newcommand{\reviewunderline}{\Underline}
193
+
194
+ %% @<del> is ignored in LaTeX with default style
195
+ \newcommand{\reviewstrike}[1]{#1}
196
+
197
+ %%%% for ulem.sty:
198
+ %%\renewcommand{\reviewstrike}[1]{\sout{#1}}
199
+ %%
200
+ %%%% for jumoline.sty:
201
+ %%\renewcommand{\reviewstrike}[1]{\Middleline{#1}}
202
+
203
+ \newcommand{\reviewth}[1]{\textgt{#1}}
204
+ \newcommand{\reviewtitlefont}[0]{\usefont{T1}{phv}{b}{n}\gtfamily}
205
+ \newcommand{\reviewmainfont}[0]{}
206
+ \newcommand{\reviewcolophon}[0]{\clearpage}
207
+ \newcommand{\reviewappendix}[0]{\appendix}
208
+
209
+ \newcommand{\reviewprepartname}{<%= escape_latex(@locale_latex["prepartname"]) %>}
210
+ \newcommand{\reviewpostpartname}{<%= escape_latex(@locale_latex["postpartname"]) %>}
211
+ \newcommand{\reviewprechaptername}{<%= escape_latex(@locale_latex["prechaptername"]) %>}
212
+ \newcommand{\reviewpostchaptername}{<%= escape_latex(@locale_latex["postchaptername"]) %>}
213
+ \newcommand{\reviewfigurename}{<%= escape_latex(I18n.t("image")) %>}
214
+ \newcommand{\reviewtablename}{<%= escape_latex(I18n.t("table")) %>}
215
+ \newcommand{\reviewappendixname}{<%= escape_latex(@locale_latex["preappendixname"]) %>}
216
+
217
+ \ifdefined\prepartname
218
+ \renewcommand{\prepartname}{\reviewprepartname}
219
+ \fi
220
+ \ifdefined\postpartname
221
+ \renewcommand{\postpartname}{\reviewpostpartname}
222
+ \fi
223
+ \ifdefined\prechaptername
224
+ \renewcommand{\prechaptername}{\reviewprechaptername}
225
+ \fi
226
+ \ifdefined\postchaptername
227
+ \renewcommand{\postchaptername}{\reviewpostchaptername}
228
+ \fi
229
+ \ifdefined\figurename
230
+ \renewcommand{\figurename}{\reviewfigurename}
231
+ \fi
232
+ \ifdefined\tablename
233
+ \renewcommand{\tablename}{\reviewtablename}
234
+ \fi
235
+ \ifdefined\appendixname
236
+ \renewcommand{\appendixname}{\reviewappendixname}
237
+ \fi
238
+
239
+
240
+ \makeatletter
241
+ %% maxwidth is the original width if it is less than linewidth
242
+ %% otherwise use linewidth (to make sure the graphics do not exceed the margin)
243
+ \def\maxwidth{%
244
+ \ifdim\Gin@nat@width>\linewidth
245
+ \linewidth
246
+ \else
247
+ \Gin@nat@width
248
+ \fi
249
+ }
250
+ \makeatother
251
+
252
+ <%- if @config["texstyle"] -%>
253
+ <%- [@config["texstyle"]].flatten.each do |x| -%>
254
+ \usepackage{<%= x %>}
255
+ <%- end -%>
256
+ <%- end -%>
257
+ <%- if @config["makeindex"] -%>
258
+ \usepackage{makeidx}
259
+ \makeindex
260
+ <%- end -%>
261
+
262
+ \begin{document}
263
+
264
+ \reviewmainfont
265
+
266
+ <%- if @config["titlepage"] -%>
267
+ <%- if @custom_titlepage -%>
268
+ <%= @custom_titlepage %>
269
+ <%- else -%>
270
+ \begin{titlepage}
271
+ <%- if @config["coverimage"] -%>
272
+ \begin{center}
273
+ \includegraphics[<%= @coverimageoption%>]{./<%= @config["imagedir"] %>/<%= @config["coverimage"] %>}
274
+ \end{center}
275
+ \clearpage
276
+ <%- end -%>
277
+ \thispagestyle{empty}
278
+ \begin{center}%
279
+ \mbox{} \vskip5zw
280
+ \reviewtitlefont%
281
+ {\Huge <%= escape_latex(@config.name_of("booktitle")) %> \par}%
282
+ <%- if @config["subtitle"] -%>
283
+ \vskip 1em%
284
+ {\Large <%= escape_latex(@config.name_of("subtitle")) %> \par}%
285
+ <%- end -%>
286
+ \vskip 15em%
287
+ {\huge
288
+ \lineskip .75em
289
+ \begin{tabular}[t]{c}%
290
+ <%= @authors %>
291
+ \end{tabular}\par}%
292
+ \vfill
293
+ {\large <%= escape_latex(@config["date"].to_s) %> <%= escape_latex(I18n.t("edition")) %>\hspace{2zw}<%= escape_latex(I18n.t("published_by", @config.names_of("pbl").join(I18n.t("names_splitter"))))%>\par}%
294
+ \vskip4zw\mbox{}
295
+ \end{center}%
296
+ \end{titlepage}
297
+ <%- end -%>
298
+ <%- end -%>
299
+
300
+ \renewcommand{\chaptermark}[1]{{}}
301
+ \frontmatter
302
+
303
+ %%% originaltitle
304
+ <%- if @config["originaltitlefile"] -%>
305
+ <%= @custom_originaltitlepage %>
306
+ <%- end -%>
307
+
308
+ %%% credit
309
+ <%- if @config["creditfile"] -%>
310
+ <%= @custom_creditpage %>
311
+ <%- end -%>
312
+
313
+ %% preface
314
+ <%= @input_files["PREDEF"] %>
315
+
316
+ <%- if @config["toc"] -%>
317
+ \setcounter{tocdepth}{<%= @config["toclevel"] - 1 %>}
318
+ \tableofcontents
319
+ <%- end -%>
320
+
321
+ \renewcommand{\chaptermark}[1]{\markboth{\prechaptername\thechapter\postchaptername~#1}{}}
322
+ \mainmatter
323
+ <%= @input_files["CHAPS"] %>
324
+ \renewcommand{\chaptermark}[1]{\markboth{\appendixname\thechapter~#1}{}}
325
+ \reviewappendix
326
+ <%= @input_files["APPENDIX"] %>
327
+
328
+ %% backmatter begins
329
+ <%- if @input_files["POSTDEF"] or @config["colophon"] -%>
330
+ \backmatter
331
+ <%- end -%>
332
+
333
+ <%- if @input_files["POSTDEF"] -%>
334
+ <%= @input_files["POSTDEF"] %>
335
+ <%- end -%>
336
+ <%- if @config["pdfmaker"]["makeindex"] -%>
337
+ \printindex
338
+ <%- end -%>
339
+
340
+ %%% profile
341
+ <%- if @config["profile"] -%>
342
+ <%= @custom_profilepage %>
343
+ <%- end -%>
344
+
345
+ %%% advfile
346
+ <%- if @config["advfile"] -%>
347
+ <%= @custom_advfilepage %>
348
+ <%- end -%>
349
+
350
+ %%% colophon
351
+ <%- if @config["colophon"] -%>
352
+ <%- if @custom_colophonpage -%>
353
+ <%= @custom_colophonpage %>
354
+ <%- else -%>
355
+ %% okuduke
356
+ \reviewcolophon
357
+ \thispagestyle{empty}
358
+
359
+ \vspace*{\fill}
360
+
361
+ {\noindent\reviewtitlefont\Large <%= escape_latex(@config.name_of("booktitle")) %>} \\
362
+ <%- if @config["subtitle"] -%>
363
+ {\noindent\reviewtitlefont\large <%= escape_latex(@config.name_of("subtitle")) %>} \\
364
+ <%- end -%>
365
+ \rule[8pt]{\textwidth}{1pt} \\
366
+ {\noindent
367
+ <%= @config["pubhistory"].to_s.gsub(/\n/){"\n\n\\noindent\n"} %>
368
+ }
369
+
370
+ \begin{tabular}{ll}
371
+ <%= @okuduke %>
372
+ \end{tabular}
373
+  \\
374
+ \rule[0pt]{\textwidth}{1pt} \\
375
+ <%- if @config["rights"] -%>
376
+ <%= @config.names_of("rights").map{|s| escape_latex(s)}.join('\\' + '\\') %> \\
377
+ <%- end -%>
378
+ <%- end -%>
379
+ <%- end -%>
380
+
381
+ %%% backcover
382
+ <%- if @config["backcover"] -%>
383
+ <%= @custom_backcoverpage %>
384
+ <%- end -%>
385
+
386
+ \end{document}
@@ -0,0 +1,64 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'review/book'
5
+ require 'review/book/base'
6
+
7
+
8
+ module ReVIEW
9
+
10
+
11
+ module Book
12
+
13
+
14
+ class Base
15
+
16
+ def parse_chapters
17
+ conf = @config['starter']
18
+ p = (conf['part_startnumber'] || 1) - 1 # 部番号
19
+ c = (conf['chapter_startnumber'] || 1) - 1 # 章番号
20
+ return enum_for(:_each_catalog_entry).map {|part_title, chap_files|
21
+ chaps = chap_files.map {|chap_file|
22
+ c += 1
23
+ chap = _new_chapter(c, chap_file)
24
+ c -= 1 unless chap.number # 章番号をつけないなら、番号を戻す
25
+ c = chap.number if chap.number # 1ファイルに章が複数あったときの対応
26
+ chap
27
+ }
28
+ p_ = part_title ? (p += 1) : nil
29
+ _new_part(p_, chaps, part_title)
30
+ }
31
+ end
32
+
33
+ private
34
+
35
+ def _each_catalog_entry(&b)
36
+ chap_files = []
37
+ catalog().parts_with_chaps.each do |item|
38
+ if item.is_a?(Hash)
39
+ yield nil, chap_files unless chap_files.empty?
40
+ chap_files = []
41
+ item.each(&b)
42
+ else
43
+ chap_files << item
44
+ end
45
+ end
46
+ yield nil, chap_files unless chap_files.empty?
47
+ end
48
+
49
+ def _new_chapter(chap_num, file)
50
+ filepath = File.join(@basedir, file)
51
+ return Chapter.new(self, chap_num, file, filepath)
52
+ end
53
+
54
+ def _new_part(part_num, chapters, title)
55
+ return Part.new(self, part_num, chapters, title)
56
+ end
57
+
58
+ end
59
+
60
+
61
+ end
62
+
63
+
64
+ end