review-retrovert 0.9.2 → 0.9.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/retrovert.yml +32 -10
- data/Dockerfile +1 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +57 -58
- data/README.md +75 -3
- data/lib/review/retrovert/cli.rb +4 -2
- data/lib/review/retrovert/converter.rb +168 -41
- data/lib/review/retrovert/ext/review-ext.rb +71 -0
- data/lib/review/retrovert/sty/ird.sty +318 -0
- data/lib/review/retrovert/version.rb +1 -1
- data/lib/review/retrovert/yamlconfig.rb +33 -2
- data/review-retrovert.gemspec +1 -1
- data/testdata/mybook/catalog.yml +1 -0
- data/testdata/mybook/config-retrovert.yml +7 -0
- data/testdata/mybook/config.yml +1 -1
- data/testdata/mybook/contents/r0-inner.re +2 -0
- data/testdata/mybook/contents/r0-root.re +9 -0
- metadata +10 -11
@@ -0,0 +1,71 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
##
|
4
|
+
## ReVIEW::LATEXBuilderクラスを拡張する
|
5
|
+
##
|
6
|
+
|
7
|
+
require 'review/latexbuilder'
|
8
|
+
|
9
|
+
|
10
|
+
module ReVIEW
|
11
|
+
|
12
|
+
defined?(LATEXBuilder) or raise "internal error: LATEXBuilder not found."
|
13
|
+
|
14
|
+
|
15
|
+
module LATEXBuilderForIRD
|
16
|
+
# def headline(level, label, caption)
|
17
|
+
# if level >= 4
|
18
|
+
# puts '\needspace{3zh}'
|
19
|
+
# end
|
20
|
+
# super(level,label,caption)
|
21
|
+
# puts '\nopagebreak[4]'
|
22
|
+
# end
|
23
|
+
|
24
|
+
def ul_begin
|
25
|
+
blank
|
26
|
+
puts '\begin{reviewitemize}'
|
27
|
+
end
|
28
|
+
def ul_end
|
29
|
+
puts '\end{reviewitemize}'
|
30
|
+
blank
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class LATEXBuilder
|
35
|
+
prepend LATEXBuilderForIRD
|
36
|
+
|
37
|
+
# def headline(level, label, caption)
|
38
|
+
# _, anchor = headline_prefix(level)
|
39
|
+
# headline_name = HEADLINE[level]
|
40
|
+
# if @chapter.is_a?(ReVIEW::Book::Part)
|
41
|
+
# if @book.config.check_version('2', exception: false)
|
42
|
+
# headline_name = 'part'
|
43
|
+
# elsif level == 1
|
44
|
+
# headline_name = 'part'
|
45
|
+
# puts '\begin{reviewpart}'
|
46
|
+
# end
|
47
|
+
# end
|
48
|
+
# prefix = ''
|
49
|
+
# if level > @book.config['secnolevel'] || (@chapter.number.to_s.empty? && level > 1)
|
50
|
+
# prefix = '*'
|
51
|
+
# end
|
52
|
+
# blank unless @output.pos == 0
|
53
|
+
# @doc_status[:caption] = true
|
54
|
+
# puts macro(headline_name + prefix, compile_inline(caption))
|
55
|
+
# puts '\nopagebreak[4]'
|
56
|
+
# @doc_status[:caption] = nil
|
57
|
+
# if prefix == '*' && level <= @book.config['toclevel'].to_i
|
58
|
+
# puts "\\addcontentsline{toc}{#{headline_name}}{#{compile_inline(caption)}}"
|
59
|
+
# end
|
60
|
+
# if level == 1
|
61
|
+
# puts macro('label', chapter_label)
|
62
|
+
# else
|
63
|
+
# puts macro('label', sec_label(anchor))
|
64
|
+
# puts macro('label', label) if label
|
65
|
+
# end
|
66
|
+
# puts '\nopagebreak[4]'
|
67
|
+
# rescue
|
68
|
+
# error "unknown level: #{level}"
|
69
|
+
# end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,318 @@
|
|
1
|
+
%
|
2
|
+
% フォント
|
3
|
+
%
|
4
|
+
|
5
|
+
% \tiny 5pt
|
6
|
+
% \scriptsize 7pt
|
7
|
+
% \footnotesize 8pt
|
8
|
+
% \small 9pt
|
9
|
+
% \normalsize 10pt(標準)
|
10
|
+
% \large 12pt
|
11
|
+
% \Large 14.4pt
|
12
|
+
% \LARGE 17.28pt
|
13
|
+
% \huge 20.74pt
|
14
|
+
% \Huge
|
15
|
+
|
16
|
+
\def\@setfontsize#1#2#3{%
|
17
|
+
\ifx\protect\@typeset@protect
|
18
|
+
\let\@currsize#1%
|
19
|
+
\fi
|
20
|
+
\fontsize{#2}{#3}\selectfont
|
21
|
+
\ifdim\parindent>\z@
|
22
|
+
\if@english
|
23
|
+
\parindent=1em
|
24
|
+
\else
|
25
|
+
\parindent=1zw
|
26
|
+
\fi
|
27
|
+
\fi
|
28
|
+
\kanjiskip=0zw plus .1zw minus .01zw
|
29
|
+
\ifdim\xkanjiskip>\z@
|
30
|
+
\if@slide \xkanjiskip=0.1em \else
|
31
|
+
% \xkanjiskip=0.25em plus 0.15em minus 0.06em
|
32
|
+
\xkanjiskip=0.2em plus 0.15em minus 0.16em
|
33
|
+
\fi
|
34
|
+
\fi
|
35
|
+
}
|
36
|
+
|
37
|
+
%
|
38
|
+
% 章・節・項の変更
|
39
|
+
%
|
40
|
+
|
41
|
+
\def\@afterheading{%
|
42
|
+
\@nobreaktrue
|
43
|
+
\everypar{%
|
44
|
+
\if@nobreak
|
45
|
+
\@nobreakfalse
|
46
|
+
% \clubpenalty \@M
|
47
|
+
\clubpenalty \z@ % 段落一段目での改ページを許可する
|
48
|
+
\if@afterindent \else
|
49
|
+
{\setbox\z@\lastbox}%
|
50
|
+
\fi
|
51
|
+
\else
|
52
|
+
\clubpenalty \@clubpenalty
|
53
|
+
\everypar{\everyparhook}%
|
54
|
+
\fi\everyparhook}}
|
55
|
+
|
56
|
+
|
57
|
+
\def\@makechapterhead#1{%
|
58
|
+
% \vspace*{2\Cvs}% 欧文は50pt →上空きを無効化
|
59
|
+
{\parindent \z@ \raggedright \normalfont
|
60
|
+
\ifnum \c@secnumdepth >\m@ne
|
61
|
+
\if@mainmatter
|
62
|
+
\huge\headfont \@chapapp\thechapter\@chappos
|
63
|
+
% \par\nobreak
|
64
|
+
% \vskip \Cvs % 欧文は20pt
|
65
|
+
\fi
|
66
|
+
\fi
|
67
|
+
\interlinepenalty\@M
|
68
|
+
\huge \headfont \ #1\par\nobreak
|
69
|
+
\vskip 3\Cvs}} % 欧文は40pt
|
70
|
+
|
71
|
+
% \usepackage[hiragino-pron]{pxchfon}
|
72
|
+
\renewcommand{\headfont}{\gtfamily\sffamily}
|
73
|
+
|
74
|
+
% \hyphenpenalty=10000\relax
|
75
|
+
|
76
|
+
\renewcommand{\section}{%
|
77
|
+
\if@slide\clearpage\fi
|
78
|
+
\@startsection{section}{1}{\z@}%
|
79
|
+
{1.3\Cvs \@plus.5\Cdp \@minus1.2\Cdp}% 前アキ
|
80
|
+
{.5\Cvs \@plus.3\Cdp}% 後アキ
|
81
|
+
{\normalfont\large\bfseries\headfont\raggedright}}
|
82
|
+
|
83
|
+
\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
|
84
|
+
{.8\Cvs \@plus.5\Cdp \@minus1.2\Cdp}% 前アキ
|
85
|
+
{.5\Cvs \@plus.3\Cdp}% 後アキ
|
86
|
+
{\normalfont\normalsize\headfont}}
|
87
|
+
|
88
|
+
\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
|
89
|
+
{.6\Cvs \@plus.5\Cdp \@minus1.2\Cdp}%
|
90
|
+
{\if@slide .2\Cvs \@plus.6\Cdp \else .2\Cvs \@plus.3\Cdp \fi}%
|
91
|
+
{\normalfont\normalsize}}
|
92
|
+
|
93
|
+
\def\@startsection#1#2#3#4#5#6{%
|
94
|
+
\if@noskipsec \leavevmode \fi
|
95
|
+
\par
|
96
|
+
\@tempskipa #4\relax
|
97
|
+
\if@english \@afterindentfalse \else \@afterindenttrue \fi
|
98
|
+
\ifdim \@tempskipa <\z@
|
99
|
+
\@tempskipa -\@tempskipa \@afterindentfalse
|
100
|
+
\fi
|
101
|
+
\if@nobreak
|
102
|
+
\everypar{}%
|
103
|
+
\else
|
104
|
+
\addpenalty\@secpenalty\addvspace\@tempskipa
|
105
|
+
%改ページ後の不要な空白を削除
|
106
|
+
% \addpenalty\@secpenalty
|
107
|
+
% \ifdim \@tempskipa >\z@
|
108
|
+
% \if@slide
|
109
|
+
% \else
|
110
|
+
% \null
|
111
|
+
% \vspace*{-\baselineskip}%
|
112
|
+
% \fi
|
113
|
+
% \vskip\@tempskipa
|
114
|
+
% \fi
|
115
|
+
\fi
|
116
|
+
\noindent
|
117
|
+
\@ifstar
|
118
|
+
{\@ssect{#3}{#4}{#5}{#6}}%
|
119
|
+
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
|
120
|
+
|
121
|
+
% \def\@ssect#1#2#3#4#5{%
|
122
|
+
% \@tempskipa #3\relax
|
123
|
+
% \ifdim \@tempskipa<\z@
|
124
|
+
% \def\@svsechd{#4{\hskip #1\relax #5}}%
|
125
|
+
% \else
|
126
|
+
% \begingroup
|
127
|
+
% #4{%
|
128
|
+
% \@hangfrom{\hskip #1}%
|
129
|
+
% \interlinepenalty \@M #5\@@par}%
|
130
|
+
% \endgroup
|
131
|
+
% \nopagebreak[4]%
|
132
|
+
% \fi
|
133
|
+
% \@xsect{#3}}
|
134
|
+
|
135
|
+
% \def\@xsect#1{%
|
136
|
+
% \@tempskipa #1\relax
|
137
|
+
% \ifdim \@tempskipa<\z@
|
138
|
+
% \@nobreakfalse
|
139
|
+
% \global\@noskipsectrue
|
140
|
+
% \everypar{%
|
141
|
+
% \if@noskipsec
|
142
|
+
% \global\@noskipsecfalse
|
143
|
+
% {\setbox\z@\lastbox}%
|
144
|
+
% \clubpenalty\@M
|
145
|
+
% \begingroup \@svsechd \endgroup
|
146
|
+
% \unskip
|
147
|
+
% \@tempskipa #1\relax
|
148
|
+
% \hskip -\@tempskipa
|
149
|
+
% \else
|
150
|
+
% \clubpenalty \@clubpenalty
|
151
|
+
% \everypar{\everyparhook}%
|
152
|
+
% \fi\everyparhook}%
|
153
|
+
% \else
|
154
|
+
% \nopagebreak[4]
|
155
|
+
% \par \nobreak
|
156
|
+
% \vskip \@tempskipa
|
157
|
+
% \@afterheading
|
158
|
+
% \fi
|
159
|
+
% \if@slide
|
160
|
+
% {\vskip\if@twocolumn-5\jsc@mpt\else-6\jsc@mpt\fi
|
161
|
+
% \maybeblue\hrule height0\jsc@mpt depth1\jsc@mpt
|
162
|
+
% \vskip\if@twocolumn 4\jsc@mpt\else 7\jsc@mpt\fi\relax}%
|
163
|
+
% \fi
|
164
|
+
% \par % 2000-12-18
|
165
|
+
% \ignorespaces}
|
166
|
+
|
167
|
+
%
|
168
|
+
% コラムの変更
|
169
|
+
%
|
170
|
+
|
171
|
+
\def\ifempty#1{\def\temp{#1} \ifx\temp\empty }
|
172
|
+
|
173
|
+
\renewenvironment{reviewcolumn}[1][]{%
|
174
|
+
\begin{framed}
|
175
|
+
\ifempty{#1}%
|
176
|
+
\else%
|
177
|
+
\reviewcolumnhead{}{#1}%
|
178
|
+
\fi%
|
179
|
+
\footnotesize
|
180
|
+
}{%
|
181
|
+
\end{framed}
|
182
|
+
% \vspace{-2pt}
|
183
|
+
}
|
184
|
+
|
185
|
+
\renewcommand{\reviewcolumnhead}[2]{%
|
186
|
+
{\noindent\large\bfseries #2}\vspace{1.7mm}}
|
187
|
+
|
188
|
+
|
189
|
+
%
|
190
|
+
% 図
|
191
|
+
%
|
192
|
+
|
193
|
+
\renewenvironment{reviewimage}{%
|
194
|
+
\begin{figure}
|
195
|
+
\begin{flushleft}}{%
|
196
|
+
\end{flushleft}
|
197
|
+
\end{figure}
|
198
|
+
\vspace{-5.5pt}
|
199
|
+
}
|
200
|
+
|
201
|
+
% \renewcommand\reviewimagecaption[1]{%
|
202
|
+
% \captionsetup{format=hang,font=scriptsize,labelfont=bf,margin=50pt,name=図}
|
203
|
+
% \caption{ \bfseries\scriptsize{#1}} \vspace{-1.5mm}}
|
204
|
+
|
205
|
+
\renewcommand\reviewimagecaption[1]{%
|
206
|
+
\captionsetup{format=hang,font=footnotesize,labelfont=bf,margin=0pt,justification=raggedright,singlelinecheck=off,name=図}
|
207
|
+
\vspace{-1mm} \caption{ \bfseries\footnotesize{#1} } \vspace{-1.5mm}}
|
208
|
+
|
209
|
+
% % フォントのに対して調整
|
210
|
+
% \def\irdmaxwidth{0.99\textwidth}
|
211
|
+
% \usepackage[export]{adjustbox}
|
212
|
+
% \DeclareRobustCommand{\reviewincludegraphics}[2][]{%
|
213
|
+
% \adjustbox{max width=\irdmaxwidth}{%
|
214
|
+
% \includegraphics[#1]{#2}}%
|
215
|
+
% }
|
216
|
+
|
217
|
+
%
|
218
|
+
% 表
|
219
|
+
%
|
220
|
+
\renewcommand{\reviewtablecaption}[1]{%
|
221
|
+
\captionsetup{format=hang,font=footnotesize,margin=70pt,name=表}
|
222
|
+
\caption{ \footnotesize{#1}} \vspace{-3mm}}
|
223
|
+
|
224
|
+
\renewcommand{\reviewimgtablecaption}[1]{%
|
225
|
+
\captionsetup{format=hang,font=footnotesize,margin=70pt,name=表}
|
226
|
+
\caption{ \footnotesize\noindent{#1}} \vspace{-3mm}}
|
227
|
+
|
228
|
+
%
|
229
|
+
% 箇条書き
|
230
|
+
%
|
231
|
+
|
232
|
+
% \usepackage{enumitem}
|
233
|
+
% \setlist[enumerate]{topsep=0pt,parsep=1pt}
|
234
|
+
% \setlist[itemize]{topsep=0pt,parsep=1pt}
|
235
|
+
|
236
|
+
\newenvironment{reviewitemize}{%
|
237
|
+
\ifnum\@listdepth=0%
|
238
|
+
\def\@listi{%
|
239
|
+
\@listI%
|
240
|
+
% \topsep 0.1\baselineskip% % 上下の余白を減らす(original: 0.5\baselineskip)
|
241
|
+
% \topsep \z@% % 上下の余白を減らす(original: 0.5\baselineskip)
|
242
|
+
\topsep -0.25\baselineskip% % 上下の余白を減らす(original: 0.5\baselineskip)
|
243
|
+
}%
|
244
|
+
\fi%
|
245
|
+
\begin{itemize}%
|
246
|
+
\setlength{\parskip}{-0.6pt}% 要素の間隔を詰める
|
247
|
+
}{%
|
248
|
+
\end{itemize}%
|
249
|
+
}
|
250
|
+
|
251
|
+
%
|
252
|
+
% リスト
|
253
|
+
%
|
254
|
+
|
255
|
+
\renewcommand{\reviewlistcaption}[1]{%
|
256
|
+
\vspace*{0.6zw}\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
257
|
+
|
258
|
+
\renewenvironment{reviewlist}{%
|
259
|
+
\begin{shaded}%
|
260
|
+
\vspace*{-1zw}% 前後の余白削除
|
261
|
+
\small%
|
262
|
+
\ifdefined\reviewlistxkanjiskip%
|
263
|
+
\xkanjiskip=\reviewlistxkanjiskip%
|
264
|
+
\fi%
|
265
|
+
\setlength{\baselineskip}{1.3zw}%
|
266
|
+
\begin{alltt}}{%
|
267
|
+
\end{alltt}%
|
268
|
+
\vspace*{-1zw}% 前後の余白削除
|
269
|
+
\end{shaded}%
|
270
|
+
\par%
|
271
|
+
% \vspace*{0.5zw}%
|
272
|
+
\vspace*{1zw}%
|
273
|
+
}
|
274
|
+
|
275
|
+
%
|
276
|
+
% cmd
|
277
|
+
%
|
278
|
+
|
279
|
+
\renewenvironment{reviewlistblock}{\needspace{\Cvs}}{}
|
280
|
+
|
281
|
+
\renewenvironment{reviewcmd}{%
|
282
|
+
\medskip%
|
283
|
+
\ifdefined\reviewlistxkanjiskip%
|
284
|
+
\xkanjiskip=\reviewlistxkanjiskip%
|
285
|
+
\fi%
|
286
|
+
\vspace*{-2.5zw \@plus.3\Cdp}% 枠の前の余白削除
|
287
|
+
\begin{framed}%
|
288
|
+
% \interlinepenalty=10000%
|
289
|
+
\vspace*{-0.8zw}% 前後の余白削除
|
290
|
+
% \setlength{\baselineskip}{1.3zw}%
|
291
|
+
\setlength{\baselineskip}{2zw}%
|
292
|
+
\begin{alltt}}{%
|
293
|
+
\end{alltt}%
|
294
|
+
\vspace*{-0.8zw}% 前後の余白削除
|
295
|
+
\end{framed}%
|
296
|
+
\vspace*{0.3mm}% 枠の後ろの余白の調整
|
297
|
+
}
|
298
|
+
|
299
|
+
% \renewenvironment{reviewcmd}{%
|
300
|
+
% \medskip%
|
301
|
+
% \ifdefined\reviewlistxkanjiskip%
|
302
|
+
% \xkanjiskip=\reviewlistxkanjiskip%
|
303
|
+
% \fi%
|
304
|
+
% \vspace*{-2zw \@plus2.7\Cdp}% 枠の前の余白削除
|
305
|
+
% \begin{framed}%
|
306
|
+
% \vspace*{-1zw}% 前後の余白削除
|
307
|
+
% % \setlength{\baselineskip}{1.3zw}%
|
308
|
+
% \setlength{\baselineskip}{2zw}%
|
309
|
+
% \begin{alltt}}{%
|
310
|
+
% \end{alltt}%
|
311
|
+
% \vspace*{-1zw}% 前後の余白削除
|
312
|
+
% \end{framed}%
|
313
|
+
% % この値だといい感じになる
|
314
|
+
% \vspace*{-0.2mm}% 枠の後ろの余白の調整
|
315
|
+
% }
|
316
|
+
|
317
|
+
% code
|
318
|
+
\DeclareRobustCommand{\reviewcode}[1]{{\small\ttfamily\reviewbreakall{#1}}}
|
@@ -87,9 +87,19 @@ module ReVIEW
|
|
87
87
|
rewrite_retrovert_yml()
|
88
88
|
end
|
89
89
|
|
90
|
+
def commentout(yamlfile, key)
|
91
|
+
content = File.read(yamlfile)
|
92
|
+
content.gsub!(/^(\s*)#{key}:(.*)$/, "#\\1#{key}:\\2")
|
93
|
+
File.write(yamlfile, content)
|
94
|
+
end
|
95
|
+
|
96
|
+
def commentout_root_yml(key)
|
97
|
+
commentout(File.join(@basedir, @basename), key)
|
98
|
+
end
|
99
|
+
|
90
100
|
def rewrite_yml_(yamlfile, key, val)
|
91
101
|
content = File.read(yamlfile)
|
92
|
-
content.gsub!(/^(\s*)#{key}:.*$/,
|
102
|
+
content.gsub!(/^(\s*)#{key}:.*$/, "\\1#{key}: #{val}")
|
93
103
|
File.write(yamlfile, content)
|
94
104
|
end
|
95
105
|
|
@@ -99,6 +109,18 @@ module ReVIEW
|
|
99
109
|
}
|
100
110
|
end
|
101
111
|
|
112
|
+
def rewrite_yml_array_(yamlfile, key, val)
|
113
|
+
content = File.read(yamlfile)
|
114
|
+
content.gsub!(/^(\s*)#{key}:\s*\[.*?\]/m, '\1' + "#{key}: #{val}")
|
115
|
+
File.write(yamlfile, content)
|
116
|
+
end
|
117
|
+
|
118
|
+
def rewrite_yml_array(key, val)
|
119
|
+
config_files.each { |current_file|
|
120
|
+
rewrite_yml_array_(File.join(@basedir, current_file), key, val)
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
102
124
|
def rewrite_retrovert_yml()
|
103
125
|
@retrovert_configs.each { |current_file|
|
104
126
|
yamlfile = File.expand_path(current_file, @basedir)
|
@@ -109,6 +131,7 @@ module ReVIEW
|
|
109
131
|
# YAML.dump(yaml, File.open(yamlfile, "w"))
|
110
132
|
content = Psych.dump(yaml)
|
111
133
|
content.gsub!('---','')
|
134
|
+
content.gsub!(/^(.*):\s*$/, '\1: null')
|
112
135
|
File.write(yamlfile, content)
|
113
136
|
}
|
114
137
|
end
|
@@ -125,6 +148,14 @@ module ReVIEW
|
|
125
148
|
return yaml
|
126
149
|
end
|
127
150
|
|
151
|
+
def path()
|
152
|
+
File.join(@basedir, @basename)
|
153
|
+
end
|
154
|
+
|
155
|
+
def catalogfile()
|
156
|
+
File.join(@basedir, @config['catalogfile'])
|
157
|
+
end
|
158
|
+
|
128
159
|
end
|
129
160
|
end
|
130
|
-
end
|
161
|
+
end
|