tmtms-review 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.travis.yml +9 -0
- data/COPYING +515 -0
- data/ChangeLog +2083 -0
- data/README.rdoc +50 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/bin/review-check +178 -0
- data/bin/review-checkdep +63 -0
- data/bin/review-compile +205 -0
- data/bin/review-epubmaker +661 -0
- data/bin/review-epubmaker-ng +176 -0
- data/bin/review-index +118 -0
- data/bin/review-pdfmaker +208 -0
- data/bin/review-preproc +142 -0
- data/bin/review-validate +51 -0
- data/bin/review-vol +102 -0
- data/debian/README.Debian +12 -0
- data/debian/README.source +5 -0
- data/debian/changelog +5 -0
- data/debian/compat +1 -0
- data/debian/control +22 -0
- data/debian/copyright +62 -0
- data/debian/docs +6 -0
- data/debian/manpage.1.ex +59 -0
- data/debian/patches/path.diff +91 -0
- data/debian/patches/series +1 -0
- data/debian/review.install +13 -0
- data/debian/review.links +4 -0
- data/debian/rules +13 -0
- data/debian/source/format +1 -0
- data/doc/format.rdoc +582 -0
- data/doc/format_idg.rdoc +180 -0
- data/doc/libepubmaker/sample.yaml +90 -0
- data/doc/quickstart.rdoc +188 -0
- data/doc/ruby-uuid/README +11 -0
- data/doc/ruby-uuid/README.ja +34 -0
- data/doc/sample.css +108 -0
- data/doc/sample.yaml +62 -0
- data/lib/epubmaker.rb +28 -0
- data/lib/epubmaker/content.rb +82 -0
- data/lib/epubmaker/epubv2.rb +418 -0
- data/lib/epubmaker/epubv3.rb +249 -0
- data/lib/epubmaker/producer.rb +204 -0
- data/lib/epubmaker/resource.rb +66 -0
- data/lib/lineinput.rb +155 -0
- data/lib/review.rb +3 -0
- data/lib/review/book.rb +46 -0
- data/lib/review/book/base.rb +235 -0
- data/lib/review/book/chapter.rb +81 -0
- data/lib/review/book/compilable.rb +159 -0
- data/lib/review/book/index.rb +339 -0
- data/lib/review/book/page_metric.rb +38 -0
- data/lib/review/book/parameters.rb +97 -0
- data/lib/review/book/part.rb +44 -0
- data/lib/review/book/volume.rb +65 -0
- data/lib/review/builder.rb +444 -0
- data/lib/review/compiler.rb +550 -0
- data/lib/review/configure.rb +38 -0
- data/lib/review/epubbuilder.rb +18 -0
- data/lib/review/exception.rb +21 -0
- data/lib/review/extentions.rb +3 -0
- data/lib/review/extentions/object.rb +9 -0
- data/lib/review/extentions/string.rb +33 -0
- data/lib/review/htmlbuilder.rb +1097 -0
- data/lib/review/htmllayout.rb +19 -0
- data/lib/review/htmlutils.rb +36 -0
- data/lib/review/i18n.rb +30 -0
- data/lib/review/i18n.yaml +34 -0
- data/lib/review/idgxmlbuilder.rb +1145 -0
- data/lib/review/latexbuilder.rb +815 -0
- data/lib/review/latexindex.rb +35 -0
- data/lib/review/latexutils.rb +79 -0
- data/lib/review/preprocessor.rb +563 -0
- data/lib/review/review.tex.erb +232 -0
- data/lib/review/textbuilder.rb +17 -0
- data/lib/review/textutils.rb +66 -0
- data/lib/review/tocparser.rb +342 -0
- data/lib/review/tocprinter.rb +221 -0
- data/lib/review/topbuilder.rb +785 -0
- data/lib/review/unfold.rb +138 -0
- data/lib/uuid.rb +312 -0
- data/review.gemspec +141 -0
- data/test/CHAPS +2 -0
- data/test/bib.re +13 -0
- data/test/book_test_helper.rb +35 -0
- data/test/test.re +43 -0
- data/test/test_book.rb +598 -0
- data/test/test_book_chapter.rb +418 -0
- data/test/test_book_parameter.rb +42 -0
- data/test/test_book_part.rb +50 -0
- data/test/test_builder.rb +144 -0
- data/test/test_compiler.rb +44 -0
- data/test/test_epubmaker.rb +507 -0
- data/test/test_helper.rb +27 -0
- data/test/test_htmlbuilder.rb +554 -0
- data/test/test_htmlutils.rb +28 -0
- data/test/test_i18n.rb +64 -0
- data/test/test_idgxmlbuilder.rb +589 -0
- data/test/test_index.rb +31 -0
- data/test/test_latexbuilder.rb +656 -0
- data/test/test_lineinput.rb +198 -0
- data/test/test_preprocessor.rb +23 -0
- data/test/test_textutils.rb +68 -0
- data/test/test_topbuilder.rb +244 -0
- data/test/test_uuid.rb +156 -0
- metadata +161 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
module ReVIEW
|
|
3
|
+
class Configure
|
|
4
|
+
def self.values
|
|
5
|
+
{ # These parameters can be overridden by YAML file.
|
|
6
|
+
"bookname"=> "example", # it defines epub file name also
|
|
7
|
+
"booktitle" => "ReVIEW EPUBサンプル",
|
|
8
|
+
"title" => "example",
|
|
9
|
+
"aut" => nil, # author
|
|
10
|
+
"prt" => nil, # printer(publisher)
|
|
11
|
+
"asn" => nil, # associated name
|
|
12
|
+
"ant" => nil, # bibliographic antecedent
|
|
13
|
+
"clb" => nil, # Collaborator
|
|
14
|
+
"edt" => nil, # Editor
|
|
15
|
+
"dsr" => nil, # Designer
|
|
16
|
+
"ill" => nil, # Illustrator
|
|
17
|
+
"pht" => nil, # Photographer
|
|
18
|
+
"trl" => nil, # Translator
|
|
19
|
+
"date" => nil, # publishing date
|
|
20
|
+
"rights" => nil, # Copyright messages
|
|
21
|
+
"description" => nil, # Description
|
|
22
|
+
"urnid" => nil, # Identifier (nil makes random uuid)
|
|
23
|
+
"stylesheet" => "stylesheet.css", # stylesheet file
|
|
24
|
+
"coverfile" => nil, # content file of body of cover page
|
|
25
|
+
"mytoc" => nil, # whether make own table of contents or not
|
|
26
|
+
"params" => "", # specify review2html parameters
|
|
27
|
+
"toclevel" => 3, # level of toc
|
|
28
|
+
"secnolevel" => 2, # level of section #
|
|
29
|
+
"posthook" => nil, # command path of post hook
|
|
30
|
+
"epubversion" => 2,
|
|
31
|
+
"titlepage" => true, # Use title page
|
|
32
|
+
"toc" => true, # Use table of contents
|
|
33
|
+
"colophon" => false, # Use colophon
|
|
34
|
+
"debug" => nil, # debug flag
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# epubbuilder.rb
|
|
2
|
+
# just for compatibility
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2010 Kenshi Muto
|
|
5
|
+
#
|
|
6
|
+
# This program is free software.
|
|
7
|
+
# You can distribute or modify this program under the terms of
|
|
8
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require 'review/htmlbuilder'
|
|
12
|
+
|
|
13
|
+
module ReVIEW
|
|
14
|
+
|
|
15
|
+
class EPUBBuilder < HTMLBuilder
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end # module ReVIEW
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#
|
|
2
|
+
# $Id: exception.rb 3881 2008-02-09 14:44:17Z aamine $
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2002-2007 Minero Aoki
|
|
5
|
+
#
|
|
6
|
+
# This program is free software.
|
|
7
|
+
# You can distribute or modify this program under the terms of
|
|
8
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
9
|
+
# For details of the GNU LGPL, see the file "COPYING".
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
module ReVIEW
|
|
13
|
+
|
|
14
|
+
class Error < ::StandardError; end
|
|
15
|
+
class ApplicationError < Error; end
|
|
16
|
+
class ConfigError < ApplicationError; end
|
|
17
|
+
class CompileError < ApplicationError; end
|
|
18
|
+
class SyntaxError < CompileError; end
|
|
19
|
+
class FileNotFound < ApplicationError; end
|
|
20
|
+
class KeyError < CompileError; end
|
|
21
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
if defined?(Encoding) && Encoding.respond_to?("default_external")
|
|
2
|
+
Encoding.default_external = "UTF-8"
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
unless String.method_defined?(:lines)
|
|
6
|
+
# Ruby 1.8
|
|
7
|
+
class String
|
|
8
|
+
alias lines to_a
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
if String.method_defined?(:bytesize)
|
|
13
|
+
# Ruby 1.9
|
|
14
|
+
class String
|
|
15
|
+
alias charsize size
|
|
16
|
+
end
|
|
17
|
+
else
|
|
18
|
+
# Ruby 1.8
|
|
19
|
+
class String
|
|
20
|
+
alias bytesize size
|
|
21
|
+
|
|
22
|
+
def charsize
|
|
23
|
+
split(//).size
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
unless String.method_defined?(:each)
|
|
29
|
+
# Ruby 1.9
|
|
30
|
+
class String
|
|
31
|
+
alias each each_line
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,1097 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2002-2007 Minero Aoki
|
|
4
|
+
# 2008-2012 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
|
|
5
|
+
# KADO Masanori
|
|
6
|
+
#
|
|
7
|
+
# This program is free software.
|
|
8
|
+
# You can distribute or modify this program under the terms of
|
|
9
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
require 'review/builder'
|
|
13
|
+
require 'review/htmlutils'
|
|
14
|
+
require 'review/htmllayout'
|
|
15
|
+
require 'review/textutils'
|
|
16
|
+
|
|
17
|
+
module ReVIEW
|
|
18
|
+
|
|
19
|
+
class HTMLBuilder < Builder
|
|
20
|
+
|
|
21
|
+
include TextUtils
|
|
22
|
+
include HTMLUtils
|
|
23
|
+
|
|
24
|
+
[:ref].each {|e| Compiler.definline(e) }
|
|
25
|
+
Compiler.defblock(:memo, 0..1)
|
|
26
|
+
Compiler.defblock(:tip, 0..1)
|
|
27
|
+
Compiler.defblock(:info, 0..1)
|
|
28
|
+
Compiler.defblock(:planning, 0..1)
|
|
29
|
+
Compiler.defblock(:best, 0..1)
|
|
30
|
+
Compiler.defblock(:important, 0..1)
|
|
31
|
+
Compiler.defblock(:security, 0..1)
|
|
32
|
+
Compiler.defblock(:caution, 0..1)
|
|
33
|
+
Compiler.defblock(:notice, 0..1)
|
|
34
|
+
Compiler.defblock(:point, 0..1)
|
|
35
|
+
Compiler.defblock(:shoot, 0..1)
|
|
36
|
+
|
|
37
|
+
def pre_paragraph
|
|
38
|
+
'<p>'
|
|
39
|
+
end
|
|
40
|
+
def post_paragraph
|
|
41
|
+
'</p>'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def extname
|
|
45
|
+
".#{ReVIEW.book.param["htmlext"]}"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def builder_init(no_error = false)
|
|
49
|
+
@no_error = no_error
|
|
50
|
+
@section = 0
|
|
51
|
+
@subsection = 0
|
|
52
|
+
@subsubsection = 0
|
|
53
|
+
@subsubsubsection = 0
|
|
54
|
+
@noindent = nil
|
|
55
|
+
@ol_num = nil
|
|
56
|
+
end
|
|
57
|
+
private :builder_init
|
|
58
|
+
|
|
59
|
+
def builder_init_file
|
|
60
|
+
@warns = []
|
|
61
|
+
@errors = []
|
|
62
|
+
end
|
|
63
|
+
private :builder_init_file
|
|
64
|
+
|
|
65
|
+
def result
|
|
66
|
+
layout_file = File.join(@book.basedir, "layouts", "layout.erb")
|
|
67
|
+
if File.exists?(layout_file)
|
|
68
|
+
messages() +
|
|
69
|
+
HTMLLayout.new(@output.string, @chapter.title, layout_file).result
|
|
70
|
+
else
|
|
71
|
+
# default XHTML header/footer
|
|
72
|
+
header = <<EOT
|
|
73
|
+
<?xml version="1.0" encoding="#{ReVIEW.book.param["outencoding"] || :UTF-8}"?>
|
|
74
|
+
EOT
|
|
75
|
+
|
|
76
|
+
if ReVIEW.book.param["htmlversion"] == 5
|
|
77
|
+
header += <<EOT
|
|
78
|
+
<!DOCTYPE html>
|
|
79
|
+
EOT
|
|
80
|
+
else
|
|
81
|
+
header += <<EOT
|
|
82
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
|
83
|
+
EOT
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
header += <<EOT
|
|
87
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="#{ReVIEW.book.param["language"]}">
|
|
88
|
+
<head>
|
|
89
|
+
<meta http-equiv="Content-Type" content="text/html;charset=#{ReVIEW.book.param["outencoding"] || :UTF-8}" />
|
|
90
|
+
<meta http-equiv="Content-Style-Type" content="text/css" />
|
|
91
|
+
EOT
|
|
92
|
+
unless ReVIEW.book.param["stylesheet"].nil?
|
|
93
|
+
ReVIEW.book.param["stylesheet"].each do |style|
|
|
94
|
+
header += <<EOT
|
|
95
|
+
<link rel="stylesheet" type="text/css" href="#{style}" />
|
|
96
|
+
EOT
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
header += <<EOT
|
|
100
|
+
<meta name="generator" content="ReVIEW" />
|
|
101
|
+
<title>#{convert_outencoding(strip_html(compile_inline(@chapter.title)), ReVIEW.book.param["outencoding"])}</title>
|
|
102
|
+
</head>
|
|
103
|
+
<body>
|
|
104
|
+
EOT
|
|
105
|
+
footer = <<EOT
|
|
106
|
+
</body>
|
|
107
|
+
</html>
|
|
108
|
+
EOT
|
|
109
|
+
header + messages() + convert_outencoding(@output.string, ReVIEW.book.param["outencoding"]) + footer
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def warn(msg)
|
|
114
|
+
if @no_error
|
|
115
|
+
@warns.push [@location.filename, @location.lineno, msg]
|
|
116
|
+
puts "----WARNING: #{escape_html(msg)}----"
|
|
117
|
+
else
|
|
118
|
+
$stderr.puts "#{@location}: warning: #{msg}"
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def error(msg)
|
|
123
|
+
if @no_error
|
|
124
|
+
@errors.push [@location.filename, @location.lineno, msg]
|
|
125
|
+
puts "----ERROR: #{escape_html(msg)}----"
|
|
126
|
+
else
|
|
127
|
+
$stderr.puts "#{@location}: error: #{msg}"
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def messages
|
|
132
|
+
error_messages() + warning_messages()
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def error_messages
|
|
136
|
+
return '' if @errors.empty?
|
|
137
|
+
"<h2>Syntax Errors</h2>\n" +
|
|
138
|
+
"<ul>\n" +
|
|
139
|
+
@errors.map {|file, line, msg|
|
|
140
|
+
"<li>#{escape_html(file)}:#{line}: #{escape_html(msg.to_s)}</li>\n"
|
|
141
|
+
}.join('') +
|
|
142
|
+
"</ul>\n"
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def warning_messages
|
|
146
|
+
return '' if @warns.empty?
|
|
147
|
+
"<h2>Warnings</h2>\n" +
|
|
148
|
+
"<ul>\n" +
|
|
149
|
+
@warns.map {|file, line, msg|
|
|
150
|
+
"<li>#{escape_html(file)}:#{line}: #{escape_html(msg)}</li>\n"
|
|
151
|
+
}.join('') +
|
|
152
|
+
"</ul>\n"
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def headline_prefix(level)
|
|
156
|
+
anchor = ""
|
|
157
|
+
case level
|
|
158
|
+
when 1
|
|
159
|
+
@section = 0
|
|
160
|
+
@subsection = 0
|
|
161
|
+
@subsubsection = 0
|
|
162
|
+
@subsubsubsection = 0
|
|
163
|
+
anchor = "#{@chapter.number}"
|
|
164
|
+
if ReVIEW.book.param["secnolevel"] >= 1
|
|
165
|
+
placeholder = @chapter.is_a?(ReVIEW::Book::Part) ? "part" : "chapter"
|
|
166
|
+
|
|
167
|
+
if @chapter.number.to_s =~ /\A\d+\Z/
|
|
168
|
+
prefix = "#{I18n.t(placeholder, @chapter.number)}#{I18n.t("chapter_postfix")}"
|
|
169
|
+
elsif @chapter.number.present?
|
|
170
|
+
prefix = "#{@chapter.number}#{I18n.t("chapter_postfix")}"
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
when 2
|
|
174
|
+
@section += 1
|
|
175
|
+
@subsection = 0
|
|
176
|
+
@subsubsection = 0
|
|
177
|
+
@subsubsubsection = 0
|
|
178
|
+
anchor = "#{@chapter.number}-#{@section}"
|
|
179
|
+
if ReVIEW.book.param["secnolevel"] >= 2
|
|
180
|
+
if @chapter.number.to_s =~ /\A\d+\Z/
|
|
181
|
+
prefix = "#{@chapter.number}.#{@section}#{I18n.t("chapter_postfix")}"
|
|
182
|
+
elsif @chapter.number.present?
|
|
183
|
+
prefix = "#{@chapter.number}.#{@section}#{I18n.t("chapter_postfix")}"
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
when 3
|
|
187
|
+
@subsection += 1
|
|
188
|
+
@subsubsection = 0
|
|
189
|
+
@subsubsubsection = 0
|
|
190
|
+
anchor = "#{@chapter.number}-#{@section}-#{@subsection}"
|
|
191
|
+
if ReVIEW.book.param["secnolevel"] >= 3
|
|
192
|
+
if @chapter.number.to_s =~ /\A\d+\Z/
|
|
193
|
+
prefix = "#{@chapter.number}.#{@section}.#{@subsection}#{I18n.t("chapter_postfix")}"
|
|
194
|
+
elsif @chapter.number.present?
|
|
195
|
+
prefix = "#{@chapter.number}.#{@section}.#{@subsection}#{I18n.t("chapter_postfix")}"
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
when 4
|
|
199
|
+
@subsubsection += 1
|
|
200
|
+
@subsubsubsection = 0
|
|
201
|
+
anchor = "#{@chapter.number}-#{@section}-#{@subsection}-#{@subsubsection}"
|
|
202
|
+
if ReVIEW.book.param["secnolevel"] >= 4
|
|
203
|
+
if @chapter.number.to_s =~ /\A\d+\Z/
|
|
204
|
+
prefix = "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}#{I18n.t("chapter_postfix")}"
|
|
205
|
+
elsif @chapter.number.present?
|
|
206
|
+
prefix = "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}#{I18n.t("chapter_postfix")}"
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
when 5
|
|
210
|
+
@subsubsubsection += 1
|
|
211
|
+
anchor = "#{@chapter.number}-#{@section}-#{@subsection}-#{@subsubsection}-#{@subsubsubsection}"
|
|
212
|
+
if ReVIEW.book.param["secnolevel"] >= 5
|
|
213
|
+
if @chapter.number.to_s =~ /\A\d+\Z/
|
|
214
|
+
prefix = "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}.#{@subsubsubsection}#{I18n.t("chapter_postfix")}"
|
|
215
|
+
elsif @chapter.number.present?
|
|
216
|
+
prefix = "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}.#{@subsubsubsection}#{I18n.t("chapter_postfix")}"
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
[prefix, anchor]
|
|
221
|
+
end
|
|
222
|
+
private :headline_prefix
|
|
223
|
+
|
|
224
|
+
def headline(level, label, caption)
|
|
225
|
+
prefix, anchor = headline_prefix(level)
|
|
226
|
+
puts '' if level > 1
|
|
227
|
+
a_id = ""
|
|
228
|
+
unless anchor.nil?
|
|
229
|
+
a_id = %Q[<a id="h#{anchor}"></a>]
|
|
230
|
+
end
|
|
231
|
+
if caption.empty?
|
|
232
|
+
puts a_id unless label.nil?
|
|
233
|
+
else
|
|
234
|
+
if label.nil?
|
|
235
|
+
puts %Q[<h#{level}>#{a_id}#{prefix}#{compile_inline(caption)}</h#{level}>]
|
|
236
|
+
else
|
|
237
|
+
puts %Q[<h#{level} id="#{label}">#{a_id}#{prefix}#{compile_inline(caption)}</h#{level}>]
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def nonum_begin(level, label, caption)
|
|
243
|
+
puts '' if level > 1
|
|
244
|
+
unless caption.empty?
|
|
245
|
+
if label.nil?
|
|
246
|
+
puts %Q[<h#{level}>#{compile_inline(caption)}</h#{level}>]
|
|
247
|
+
else
|
|
248
|
+
puts %Q[<h#{level} id="#{label}">#{compile_inline(caption)}</h#{level}>]
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def nonum_end(level)
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def column_begin(level, label, caption)
|
|
257
|
+
puts %Q[<div class="column">]
|
|
258
|
+
headline(level, label, caption)
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def column_end(level)
|
|
262
|
+
puts '</div>'
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def xcolumn_begin(level, label, caption)
|
|
266
|
+
puts %Q[<div class="xcolumn">]
|
|
267
|
+
headline(level, label, caption)
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def xcolumn_end(level)
|
|
271
|
+
puts '</div>'
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def ref_begin(level, label, caption)
|
|
275
|
+
print %Q[<div class="reference">]
|
|
276
|
+
headline(level, label, caption)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def ref_end(level)
|
|
280
|
+
puts '</div>'
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def sup_begin(level, label, caption)
|
|
284
|
+
print %Q[<div class="supplement">]
|
|
285
|
+
headline(level, label, caption)
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def sup_end(level)
|
|
289
|
+
puts '</div>'
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def tsize(str)
|
|
293
|
+
# null
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def captionblock(type, lines, caption)
|
|
297
|
+
puts %Q[<div class="#{type}">]
|
|
298
|
+
unless caption.nil?
|
|
299
|
+
puts %Q[<p class="caption">#{compile_inline(caption)}</p>]
|
|
300
|
+
end
|
|
301
|
+
if ReVIEW.book.param["deprecated-blocklines"].nil?
|
|
302
|
+
blocked_lines = split_paragraph(lines)
|
|
303
|
+
puts blocked_lines.join("\n")
|
|
304
|
+
else
|
|
305
|
+
lines.each {|l| puts "<p>#{l}</p>" }
|
|
306
|
+
end
|
|
307
|
+
puts '</div>'
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def memo(lines, caption = nil)
|
|
311
|
+
captionblock("memo", lines, caption)
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def tip(lines, caption = nil)
|
|
315
|
+
captionblock("tip", lines, caption)
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def info(lines, caption = nil)
|
|
319
|
+
captionblock("info", lines, caption)
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
def planning(lines, caption = nil)
|
|
323
|
+
captionblock("planning", lines, caption)
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
def best(lines, caption = nil)
|
|
327
|
+
captionblock("best", lines, caption)
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def important(lines, caption = nil)
|
|
331
|
+
captionblock("important", lines, caption)
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def security(lines, caption = nil)
|
|
335
|
+
captionblock("security", lines, caption)
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def caution(lines, caption = nil)
|
|
339
|
+
captionblock("caution", lines, caption)
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
def notice(lines, caption = nil)
|
|
343
|
+
captionblock("notice", lines, caption)
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
def point(lines, caption = nil)
|
|
347
|
+
captionblock("point", lines, caption)
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
def shoot(lines, caption = nil)
|
|
351
|
+
captionblock("shoot", lines, caption)
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
def box(lines, caption = nil)
|
|
355
|
+
puts %Q[<div class="syntax">]
|
|
356
|
+
puts %Q[<p class="caption">#{compile_inline(caption)}</p>] unless caption.nil?
|
|
357
|
+
print %Q[<pre class="syntax">]
|
|
358
|
+
lines.each {|line| puts detab(line) }
|
|
359
|
+
puts '</pre>'
|
|
360
|
+
puts '</div>'
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
def note(lines, caption = nil)
|
|
364
|
+
captionblock("note", lines, caption)
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
def ul_begin
|
|
368
|
+
puts '<ul>'
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
def ul_item(lines)
|
|
372
|
+
puts "<li>#{lines.join}</li>"
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
def ul_item_begin(lines)
|
|
376
|
+
print "<li>#{lines.join}"
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
def ul_item_end
|
|
380
|
+
puts "</li>"
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
def ul_end
|
|
384
|
+
puts '</ul>'
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
def ol_begin
|
|
388
|
+
if @ol_num
|
|
389
|
+
puts "<ol start=\"#{@ol_num}\">" ## it's OK in HTML5, but not OK in XHTML1.1
|
|
390
|
+
@ol_num = nil
|
|
391
|
+
else
|
|
392
|
+
puts '<ol>'
|
|
393
|
+
end
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
def ol_item(lines, num)
|
|
397
|
+
puts "<li>#{lines.join}</li>"
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
def ol_end
|
|
401
|
+
puts '</ol>'
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
def dl_begin
|
|
405
|
+
puts '<dl>'
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
def dt(line)
|
|
409
|
+
puts "<dt>#{line}</dt>"
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
def dd(lines)
|
|
413
|
+
puts "<dd>#{lines.join}</dd>"
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
def dl_end
|
|
417
|
+
puts '</dl>'
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
def paragraph(lines)
|
|
421
|
+
if @noindent.nil?
|
|
422
|
+
puts "<p>#{lines.join}</p>"
|
|
423
|
+
else
|
|
424
|
+
puts %Q[<p class="noindent">#{lines.join}</p>]
|
|
425
|
+
@noindent = nil
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
def parasep()
|
|
430
|
+
puts '<br />'
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
def read(lines)
|
|
434
|
+
if ReVIEW.book.param["deprecated-blocklines"].nil?
|
|
435
|
+
blocked_lines = split_paragraph(lines)
|
|
436
|
+
puts %Q[<div class="lead">\n#{blocked_lines.join("\n")}\n</div>]
|
|
437
|
+
else
|
|
438
|
+
puts %Q[<p class="lead">\n#{lines.join("\n")}\n</p>]
|
|
439
|
+
end
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
alias :lead read
|
|
443
|
+
|
|
444
|
+
def list(lines, id, caption)
|
|
445
|
+
puts %Q[<div class="caption-code">]
|
|
446
|
+
begin
|
|
447
|
+
list_header id, caption
|
|
448
|
+
rescue KeyError
|
|
449
|
+
error "no such list: #{id}"
|
|
450
|
+
end
|
|
451
|
+
list_body lines
|
|
452
|
+
puts '</div>'
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
def list_header(id, caption)
|
|
456
|
+
if get_chap.nil?
|
|
457
|
+
puts %Q[<p class="caption">#{I18n.t("list")}#{I18n.t("format_number_header_without_chapter", [@chapter.list(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}</p>]
|
|
458
|
+
else
|
|
459
|
+
puts %Q[<p class="caption">#{I18n.t("list")}#{I18n.t("format_number_header", [get_chap, @chapter.list(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}</p>]
|
|
460
|
+
end
|
|
461
|
+
end
|
|
462
|
+
|
|
463
|
+
def list_body(lines)
|
|
464
|
+
print %Q[<pre class="list">]
|
|
465
|
+
lines.each do |line|
|
|
466
|
+
puts detab(line)
|
|
467
|
+
end
|
|
468
|
+
puts '</pre>'
|
|
469
|
+
end
|
|
470
|
+
|
|
471
|
+
def source(lines, caption)
|
|
472
|
+
puts %Q[<div class="source-code">]
|
|
473
|
+
source_header caption
|
|
474
|
+
source_body lines
|
|
475
|
+
puts '</div>'
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
def source_header(caption)
|
|
479
|
+
puts %Q[<p class="caption">#{compile_inline(caption)}</p>]
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def source_body(lines)
|
|
483
|
+
print %Q[<pre class="source">]
|
|
484
|
+
lines.each do |line|
|
|
485
|
+
puts detab(line)
|
|
486
|
+
end
|
|
487
|
+
puts '</pre>'
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
def listnum(lines, id, caption)
|
|
491
|
+
puts %Q[<div class="code">]
|
|
492
|
+
begin
|
|
493
|
+
list_header id, caption
|
|
494
|
+
rescue KeyError
|
|
495
|
+
error "no such list: #{id}"
|
|
496
|
+
end
|
|
497
|
+
listnum_body lines
|
|
498
|
+
puts '</div>'
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
def listnum_body(lines)
|
|
502
|
+
print %Q[<pre class="list">]
|
|
503
|
+
lines.each_with_index do |line, i|
|
|
504
|
+
puts detab((i+1).to_s.rjust(2) + ": " + line)
|
|
505
|
+
end
|
|
506
|
+
puts '</pre>'
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
def emlist(lines, caption = nil)
|
|
510
|
+
puts %Q[<div class="emlist-code">]
|
|
511
|
+
puts %Q(<p class="caption">#{caption}</p>) unless caption.nil?
|
|
512
|
+
print %Q[<pre class="emlist">]
|
|
513
|
+
lines.each do |line|
|
|
514
|
+
puts detab(line)
|
|
515
|
+
end
|
|
516
|
+
puts '</pre>'
|
|
517
|
+
puts '</div>'
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
def emlistnum(lines)
|
|
521
|
+
puts %Q[<div class="emlistnum-code">]
|
|
522
|
+
print %Q[<pre class="emlist">]
|
|
523
|
+
lines.each_with_index do |line, i|
|
|
524
|
+
puts detab((i+1).to_s.rjust(2) + ": " + line)
|
|
525
|
+
end
|
|
526
|
+
puts '</pre>'
|
|
527
|
+
puts '</div>'
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
def cmd(lines, caption = nil)
|
|
531
|
+
puts %Q[<div class="cmd-code">]
|
|
532
|
+
puts %Q(<p class="caption">#{caption}</p>) unless caption.nil?
|
|
533
|
+
print %Q[<pre class="cmd">]
|
|
534
|
+
lines.each do |line|
|
|
535
|
+
puts detab(line)
|
|
536
|
+
end
|
|
537
|
+
puts '</pre>'
|
|
538
|
+
puts '</div>'
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
def quotedlist(lines, css_class)
|
|
542
|
+
print %Q[<blockquote><pre class="#{css_class}">]
|
|
543
|
+
lines.each do |line|
|
|
544
|
+
puts detab(line)
|
|
545
|
+
end
|
|
546
|
+
puts '</pre></blockquote>'
|
|
547
|
+
end
|
|
548
|
+
private :quotedlist
|
|
549
|
+
|
|
550
|
+
def quote(lines)
|
|
551
|
+
if ReVIEW.book.param["deprecated-blocklines"].nil?
|
|
552
|
+
blocked_lines = split_paragraph(lines)
|
|
553
|
+
puts "<blockquote>#{blocked_lines.join("\n")}</blockquote>"
|
|
554
|
+
else
|
|
555
|
+
puts "<blockquote><pre>#{lines.join("\n")}</pre></blockquote>"
|
|
556
|
+
end
|
|
557
|
+
end
|
|
558
|
+
|
|
559
|
+
def doorquote(lines, ref)
|
|
560
|
+
if ReVIEW.book.param["deprecated-blocklines"].nil?
|
|
561
|
+
blocked_lines = split_paragraph(lines)
|
|
562
|
+
puts %Q[<blockquote style="text-align:right;">]
|
|
563
|
+
puts "#{blocked_lines.join("\n")}"
|
|
564
|
+
puts %Q[<p>#{ref}より</p>]
|
|
565
|
+
puts %Q[</blockquote>]
|
|
566
|
+
else
|
|
567
|
+
puts <<-QUOTE
|
|
568
|
+
<blockquote style="text-align:right;">
|
|
569
|
+
<pre>#{lines.join("\n")}
|
|
570
|
+
|
|
571
|
+
#{ref}より</pre>
|
|
572
|
+
</blockquote>
|
|
573
|
+
QUOTE
|
|
574
|
+
end
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
def talk(lines)
|
|
578
|
+
puts %Q[<div class="talk">]
|
|
579
|
+
if ReVIEW.book.param["deprecated-blocklines"].nil?
|
|
580
|
+
blocked_lines = split_paragraph(lines)
|
|
581
|
+
puts "#{blocked_lines.join("\n")}"
|
|
582
|
+
else
|
|
583
|
+
print '<pre>'
|
|
584
|
+
puts "#{lines.join("\n")}"
|
|
585
|
+
puts '</pre>'
|
|
586
|
+
end
|
|
587
|
+
puts '</div>'
|
|
588
|
+
end
|
|
589
|
+
|
|
590
|
+
def texequation(lines)
|
|
591
|
+
puts %Q[<div class="equation">]
|
|
592
|
+
if ReVIEW.book.param["mathml"]
|
|
593
|
+
p = MathML::LaTeX::Parser.new
|
|
594
|
+
puts p.parse(unescape_html(lines.join("\n")), true)
|
|
595
|
+
else
|
|
596
|
+
print '<pre>'
|
|
597
|
+
puts "#{lines.join("\n")}"
|
|
598
|
+
puts '</pre>'
|
|
599
|
+
end
|
|
600
|
+
puts '</div>'
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
def handle_metric(str)
|
|
604
|
+
if str =~ /\Ascale=([\d.]+)\Z/
|
|
605
|
+
return "width=\"#{($1.to_f * 100).round}%\""
|
|
606
|
+
else
|
|
607
|
+
k, v = str.split('=', 2)
|
|
608
|
+
return %Q|#{k}=\"#{v.sub(/\A["']/, '').sub(/["']\Z/, '')}\"|
|
|
609
|
+
end
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
def result_metric(array)
|
|
613
|
+
" #{array.join(' ')}"
|
|
614
|
+
end
|
|
615
|
+
|
|
616
|
+
def image_image(id, caption, metric)
|
|
617
|
+
metrics = parse_metric("html", metric)
|
|
618
|
+
puts %Q[<div class="image">]
|
|
619
|
+
puts %Q[<img src="#{@chapter.image(id).path.sub(/\A\.\//, "")}" alt="#{escape_html(compile_inline(caption))}"#{metrics} />]
|
|
620
|
+
image_header id, caption
|
|
621
|
+
puts %Q[</div>]
|
|
622
|
+
end
|
|
623
|
+
|
|
624
|
+
def image_dummy(id, caption, lines)
|
|
625
|
+
puts %Q[<div class="image">]
|
|
626
|
+
puts %Q[<pre class="dummyimage">]
|
|
627
|
+
lines.each do |line|
|
|
628
|
+
puts detab(line)
|
|
629
|
+
end
|
|
630
|
+
puts %Q[</pre>]
|
|
631
|
+
image_header id, caption
|
|
632
|
+
puts %Q[</div>]
|
|
633
|
+
end
|
|
634
|
+
|
|
635
|
+
def image_header(id, caption)
|
|
636
|
+
puts %Q[<p class="caption">]
|
|
637
|
+
if get_chap.nil?
|
|
638
|
+
puts %Q[#{I18n.t("image")}#{I18n.t("format_number_header_without_chapter", [@chapter.image(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}]
|
|
639
|
+
else
|
|
640
|
+
puts %Q[#{I18n.t("image")}#{I18n.t("format_number_header", [get_chap, @chapter.image(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}]
|
|
641
|
+
end
|
|
642
|
+
puts %Q[</p>]
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
def table(lines, id = nil, caption = nil)
|
|
646
|
+
rows = []
|
|
647
|
+
sepidx = nil
|
|
648
|
+
lines.each_with_index do |line, idx|
|
|
649
|
+
if /\A[\=\-]{12}/ =~ line
|
|
650
|
+
# just ignore
|
|
651
|
+
#error "too many table separator" if sepidx
|
|
652
|
+
sepidx ||= idx
|
|
653
|
+
next
|
|
654
|
+
end
|
|
655
|
+
rows.push line.strip.split(/\t+/).map {|s| s.sub(/\A\./, '') }
|
|
656
|
+
end
|
|
657
|
+
rows = adjust_n_cols(rows)
|
|
658
|
+
|
|
659
|
+
puts %Q[<div class="table">]
|
|
660
|
+
begin
|
|
661
|
+
table_header id, caption unless caption.nil?
|
|
662
|
+
rescue KeyError => err
|
|
663
|
+
error "no such table: #{id}"
|
|
664
|
+
end
|
|
665
|
+
table_begin rows.first.size
|
|
666
|
+
return if rows.empty?
|
|
667
|
+
if sepidx
|
|
668
|
+
sepidx.times do
|
|
669
|
+
tr rows.shift.map {|s| th(s) }
|
|
670
|
+
end
|
|
671
|
+
rows.each do |cols|
|
|
672
|
+
tr cols.map {|s| td(s) }
|
|
673
|
+
end
|
|
674
|
+
else
|
|
675
|
+
rows.each do |cols|
|
|
676
|
+
h, *cs = *cols
|
|
677
|
+
tr [th(h)] + cs.map {|s| td(s) }
|
|
678
|
+
end
|
|
679
|
+
end
|
|
680
|
+
table_end
|
|
681
|
+
puts %Q[</div>]
|
|
682
|
+
end
|
|
683
|
+
|
|
684
|
+
def table_header(id, caption)
|
|
685
|
+
if get_chap.nil?
|
|
686
|
+
puts %Q[<p class="caption">#{I18n.t("table")}#{I18n.t("format_number_header_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}</p>]
|
|
687
|
+
else
|
|
688
|
+
puts %Q[<p class="caption">#{I18n.t("table")}#{I18n.t("format_number_header", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}</p>]
|
|
689
|
+
end
|
|
690
|
+
end
|
|
691
|
+
|
|
692
|
+
def table_begin(ncols)
|
|
693
|
+
puts '<table>'
|
|
694
|
+
end
|
|
695
|
+
|
|
696
|
+
def tr(rows)
|
|
697
|
+
puts "<tr>#{rows.join}</tr>"
|
|
698
|
+
end
|
|
699
|
+
|
|
700
|
+
def th(str)
|
|
701
|
+
"<th>#{str}</th>"
|
|
702
|
+
end
|
|
703
|
+
|
|
704
|
+
def td(str)
|
|
705
|
+
"<td>#{str}</td>"
|
|
706
|
+
end
|
|
707
|
+
|
|
708
|
+
def table_end
|
|
709
|
+
puts '</table>'
|
|
710
|
+
end
|
|
711
|
+
|
|
712
|
+
def comment(str)
|
|
713
|
+
if ReVIEW.book.param["draft"]
|
|
714
|
+
puts %Q(<div class="draft-comment">#{escape_html(str)}</div>)
|
|
715
|
+
else
|
|
716
|
+
puts %Q(<!-- #{escape_html(str)} -->)
|
|
717
|
+
end
|
|
718
|
+
end
|
|
719
|
+
|
|
720
|
+
def footnote(id, str)
|
|
721
|
+
puts %Q(<div class="footnote"><p class="footnote">[<a id="fn-#{id}">*#{@chapter.footnote(id).number}</a>] #{compile_inline(str)}</p></div>)
|
|
722
|
+
end
|
|
723
|
+
|
|
724
|
+
def indepimage(id, caption="", metric=nil)
|
|
725
|
+
metrics = parse_metric("html", metric)
|
|
726
|
+
caption = "" if caption.nil?
|
|
727
|
+
puts %Q[<div class="image">]
|
|
728
|
+
begin
|
|
729
|
+
puts %Q[<img src="#{@chapter.image(id).path.sub(/\A\.\//, "")}" alt="#{escape_html(compile_inline(caption))}"#{metrics} />]
|
|
730
|
+
rescue
|
|
731
|
+
puts %Q[<pre>missing image: #{id}</pre>]
|
|
732
|
+
end
|
|
733
|
+
|
|
734
|
+
unless caption.empty?
|
|
735
|
+
puts %Q[<p class="caption">]
|
|
736
|
+
puts %Q[#{I18n.t("numberless_image")}#{I18n.t("caption_prefix")}#{compile_inline(caption)}]
|
|
737
|
+
puts %Q[</p>]
|
|
738
|
+
end
|
|
739
|
+
puts %Q[</div>]
|
|
740
|
+
end
|
|
741
|
+
|
|
742
|
+
alias :numberlessimage indepimage
|
|
743
|
+
|
|
744
|
+
def hr
|
|
745
|
+
puts "<hr />"
|
|
746
|
+
end
|
|
747
|
+
|
|
748
|
+
def label(id)
|
|
749
|
+
puts %Q(<a id="#{id}"></a>)
|
|
750
|
+
end
|
|
751
|
+
|
|
752
|
+
def linebreak
|
|
753
|
+
puts "<br />"
|
|
754
|
+
end
|
|
755
|
+
|
|
756
|
+
def pagebreak
|
|
757
|
+
puts %Q(<br class="pagebreak" />)
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
def bpo(lines)
|
|
761
|
+
puts "<bpo>"
|
|
762
|
+
lines.each do |line|
|
|
763
|
+
puts detab(line)
|
|
764
|
+
end
|
|
765
|
+
puts "</bpo>"
|
|
766
|
+
end
|
|
767
|
+
|
|
768
|
+
def noindent
|
|
769
|
+
@noindent = true
|
|
770
|
+
end
|
|
771
|
+
|
|
772
|
+
def inline_labelref(idref)
|
|
773
|
+
%Q[<a target='#{escape_html(idref)}'>「●● #{escape_html(idref)}」</a>]
|
|
774
|
+
end
|
|
775
|
+
|
|
776
|
+
alias inline_ref inline_labelref
|
|
777
|
+
|
|
778
|
+
def inline_chapref(id)
|
|
779
|
+
if ReVIEW.book.param["chapterlink"]
|
|
780
|
+
%Q(<a href="./#{id}.html">#{@chapter.env.chapter_index.display_string(id)}</a>)
|
|
781
|
+
else
|
|
782
|
+
@chapter.env.chapter_index.display_string(id)
|
|
783
|
+
end
|
|
784
|
+
rescue KeyError
|
|
785
|
+
error "unknown chapter: #{id}"
|
|
786
|
+
nofunc_text("[UnknownChapter:#{id}]")
|
|
787
|
+
end
|
|
788
|
+
|
|
789
|
+
def inline_chap(id)
|
|
790
|
+
if ReVIEW.book.param["chapterlink"]
|
|
791
|
+
%Q(<a href="./#{id}.html">#{@chapter.env.chapter_index.number(id)}</a>)
|
|
792
|
+
else
|
|
793
|
+
@chapter.env.chapter_index.number(id)
|
|
794
|
+
end
|
|
795
|
+
rescue KeyError
|
|
796
|
+
error "unknown chapter: #{id}"
|
|
797
|
+
nofunc_text("[UnknownChapter:#{id}]")
|
|
798
|
+
end
|
|
799
|
+
|
|
800
|
+
def inline_title(id)
|
|
801
|
+
if ReVIEW.book.param["chapterlink"]
|
|
802
|
+
%Q(<a href="./#{id}.html">#{compile_inline(@chapter.env.chapter_index.title(id))}</a>)
|
|
803
|
+
else
|
|
804
|
+
@chapter.env.chapter_index.title(id)
|
|
805
|
+
end
|
|
806
|
+
rescue KeyError
|
|
807
|
+
error "unknown chapter: #{id}"
|
|
808
|
+
nofunc_text("[UnknownChapter:#{id}]")
|
|
809
|
+
end
|
|
810
|
+
|
|
811
|
+
|
|
812
|
+
def inline_fn(id)
|
|
813
|
+
%Q(<a href="#fn-#{id}">*#{@chapter.footnote(id).number}</a>)
|
|
814
|
+
end
|
|
815
|
+
|
|
816
|
+
def compile_ruby(base, ruby)
|
|
817
|
+
%Q[<ruby><rb>#{escape_html(base)}</rb><rp>#{I18n.t("ruby_prefix")}</rp><rt>#{ruby}</rt><rp>#{I18n.t("ruby_postfix")}</rp></ruby>]
|
|
818
|
+
end
|
|
819
|
+
|
|
820
|
+
def compile_kw(word, alt)
|
|
821
|
+
%Q[<b class="kw">] +
|
|
822
|
+
if alt
|
|
823
|
+
then escape_html(word + " (#{alt.strip})")
|
|
824
|
+
else escape_html(word)
|
|
825
|
+
end +
|
|
826
|
+
"</b><!-- IDX:#{escape_html(word)} -->"
|
|
827
|
+
end
|
|
828
|
+
|
|
829
|
+
def inline_i(str)
|
|
830
|
+
%Q(<i>#{escape_html(str)}</i>)
|
|
831
|
+
end
|
|
832
|
+
|
|
833
|
+
def inline_b(str)
|
|
834
|
+
%Q(<b>#{escape_html(str)}</b>)
|
|
835
|
+
end
|
|
836
|
+
|
|
837
|
+
def inline_ami(str)
|
|
838
|
+
%Q(<span class="ami">#{escape_html(str)}</span>)
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
def inline_bou(str)
|
|
842
|
+
%Q(<span class="bou">#{escape_html(str)}</span>)
|
|
843
|
+
end
|
|
844
|
+
|
|
845
|
+
def inline_tti(str)
|
|
846
|
+
%Q(<tt><i>#{escape_html(str)}</i></tt>)
|
|
847
|
+
end
|
|
848
|
+
|
|
849
|
+
def inline_ttb(str)
|
|
850
|
+
%Q(<tt><b>#{escape_html(str)}</b></tt>)
|
|
851
|
+
end
|
|
852
|
+
|
|
853
|
+
def inline_dtp(str)
|
|
854
|
+
"<?dtp #{str} ?>"
|
|
855
|
+
end
|
|
856
|
+
|
|
857
|
+
def inline_code(str)
|
|
858
|
+
%Q(<tt class="inline-code">#{escape_html(str)}</tt>)
|
|
859
|
+
end
|
|
860
|
+
|
|
861
|
+
def inline_idx(str)
|
|
862
|
+
%Q(#{escape_html(str)}<!-- IDX:#{escape_html(str)} -->)
|
|
863
|
+
end
|
|
864
|
+
|
|
865
|
+
def inline_hidx(str)
|
|
866
|
+
%Q(<!-- IDX:#{escape_html(str)} -->)
|
|
867
|
+
end
|
|
868
|
+
|
|
869
|
+
def inline_br(str)
|
|
870
|
+
%Q(<br />)
|
|
871
|
+
end
|
|
872
|
+
|
|
873
|
+
def inline_m(str)
|
|
874
|
+
if ReVIEW.book.param["mathml"]
|
|
875
|
+
p = MathML::LaTeX::Parser.new
|
|
876
|
+
%Q[<span class="equation">#{p.parse(str, nil)}</span>]
|
|
877
|
+
else
|
|
878
|
+
%Q[<span class="equation">#{escape_html(str)}</span>]
|
|
879
|
+
end
|
|
880
|
+
end
|
|
881
|
+
|
|
882
|
+
def text(str)
|
|
883
|
+
str
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
def bibpaper(lines, id, caption)
|
|
887
|
+
puts %Q[<div class="bibpaper">]
|
|
888
|
+
bibpaper_header id, caption
|
|
889
|
+
unless lines.empty?
|
|
890
|
+
bibpaper_bibpaper id, caption, lines
|
|
891
|
+
end
|
|
892
|
+
puts "</div>"
|
|
893
|
+
end
|
|
894
|
+
|
|
895
|
+
def bibpaper_header(id, caption)
|
|
896
|
+
print %Q(<a id="bib-#{id}">)
|
|
897
|
+
print "[#{@chapter.bibpaper(id).number}] #{compile_inline(caption)}"
|
|
898
|
+
puts %Q(</a>)
|
|
899
|
+
end
|
|
900
|
+
|
|
901
|
+
def bibpaper_bibpaper(id, caption, lines)
|
|
902
|
+
print %Q(<p>)
|
|
903
|
+
lines.each do |line|
|
|
904
|
+
puts detab(line)
|
|
905
|
+
end
|
|
906
|
+
puts %Q(</p>)
|
|
907
|
+
end
|
|
908
|
+
|
|
909
|
+
def inline_bib(id)
|
|
910
|
+
%Q(<a href=".#{@book.bib_file.gsub(/re\Z/, "html")}#bib-#{id}">[#{@chapter.bibpaper(id).number}]</a>)
|
|
911
|
+
end
|
|
912
|
+
|
|
913
|
+
def inline_hd_chap(chap, id)
|
|
914
|
+
n = chap.headline_index.number(id)
|
|
915
|
+
if chap.number and ReVIEW.book.param["secnolevel"] >= n.split('.').size
|
|
916
|
+
str = "「#{n} #{compile_inline(chap.headline(id).caption)}」"
|
|
917
|
+
else
|
|
918
|
+
str = "「#{compile_inline(chap.headline(id).caption)}」"
|
|
919
|
+
end
|
|
920
|
+
if ReVIEW.book.param["chapterlink"]
|
|
921
|
+
anchor = "h"+n.gsub(/\./, "-")
|
|
922
|
+
%Q(<a href="#{chap.id}.html\##{anchor}">#{str}</a>)
|
|
923
|
+
else
|
|
924
|
+
str
|
|
925
|
+
end
|
|
926
|
+
end
|
|
927
|
+
|
|
928
|
+
def inline_list(id)
|
|
929
|
+
chapter, id = extract_chapter_id(id)
|
|
930
|
+
if get_chap(chapter).nil?
|
|
931
|
+
"#{I18n.t("list")}#{I18n.t("format_number_without_header", [chapter.list(id).number])}"
|
|
932
|
+
else
|
|
933
|
+
"#{I18n.t("list")}#{I18n.t("format_number", [get_chap(chapter), chapter.list(id).number])}"
|
|
934
|
+
end
|
|
935
|
+
rescue KeyError
|
|
936
|
+
error "unknown list: #{id}"
|
|
937
|
+
nofunc_text("[UnknownList:#{id}]")
|
|
938
|
+
end
|
|
939
|
+
|
|
940
|
+
def inline_table(id)
|
|
941
|
+
chapter, id = extract_chapter_id(id)
|
|
942
|
+
if get_chap(chapter).nil?
|
|
943
|
+
"#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [chapter.table(id).number])}"
|
|
944
|
+
else
|
|
945
|
+
"#{I18n.t("table")}#{I18n.t("format_number", [get_chap(chapter), chapter.table(id).number])}"
|
|
946
|
+
end
|
|
947
|
+
rescue KeyError
|
|
948
|
+
error "unknown table: #{id}"
|
|
949
|
+
nofunc_text("[UnknownTable:#{id}]")
|
|
950
|
+
end
|
|
951
|
+
|
|
952
|
+
def inline_img(id)
|
|
953
|
+
chapter, id = extract_chapter_id(id)
|
|
954
|
+
if get_chap(chapter).nil?
|
|
955
|
+
"#{I18n.t("image")}#{I18n.t("format_number_without_chapter", [chapter.image(id).number])}"
|
|
956
|
+
else
|
|
957
|
+
"#{I18n.t("image")}#{I18n.t("format_number", [get_chap(chapter), chapter.image(id).number])}"
|
|
958
|
+
end
|
|
959
|
+
rescue KeyError
|
|
960
|
+
error "unknown image: #{id}"
|
|
961
|
+
nofunc_text("[UnknownImage:#{id}]")
|
|
962
|
+
end
|
|
963
|
+
|
|
964
|
+
def inline_asis(str, tag)
|
|
965
|
+
%Q(<#{tag}>#{escape_html(str)}</#{tag}>)
|
|
966
|
+
end
|
|
967
|
+
|
|
968
|
+
def inline_abbr(str)
|
|
969
|
+
inline_asis(str, "abbr")
|
|
970
|
+
end
|
|
971
|
+
|
|
972
|
+
def inline_acronym(str)
|
|
973
|
+
inline_asis(str, "acronym")
|
|
974
|
+
end
|
|
975
|
+
|
|
976
|
+
def inline_cite(str)
|
|
977
|
+
inline_asis(str, "cite")
|
|
978
|
+
end
|
|
979
|
+
|
|
980
|
+
def inline_dfn(str)
|
|
981
|
+
inline_asis(str, "dfn")
|
|
982
|
+
end
|
|
983
|
+
|
|
984
|
+
def inline_em(str)
|
|
985
|
+
inline_asis(str, "em")
|
|
986
|
+
end
|
|
987
|
+
|
|
988
|
+
def inline_kbd(str)
|
|
989
|
+
inline_asis(str, "kbd")
|
|
990
|
+
end
|
|
991
|
+
|
|
992
|
+
def inline_samp(str)
|
|
993
|
+
inline_asis(str, "samp")
|
|
994
|
+
end
|
|
995
|
+
|
|
996
|
+
def inline_strong(str)
|
|
997
|
+
inline_asis(str, "strong")
|
|
998
|
+
end
|
|
999
|
+
|
|
1000
|
+
def inline_var(str)
|
|
1001
|
+
inline_asis(str, "var")
|
|
1002
|
+
end
|
|
1003
|
+
|
|
1004
|
+
def inline_big(str)
|
|
1005
|
+
inline_asis(str, "big")
|
|
1006
|
+
end
|
|
1007
|
+
|
|
1008
|
+
def inline_small(str)
|
|
1009
|
+
inline_asis(str, "small")
|
|
1010
|
+
end
|
|
1011
|
+
|
|
1012
|
+
def inline_sub(str)
|
|
1013
|
+
inline_asis(str, "sub")
|
|
1014
|
+
end
|
|
1015
|
+
|
|
1016
|
+
def inline_sup(str)
|
|
1017
|
+
inline_asis(str, "sup")
|
|
1018
|
+
end
|
|
1019
|
+
|
|
1020
|
+
def inline_tt(str)
|
|
1021
|
+
inline_asis(str, "tt")
|
|
1022
|
+
end
|
|
1023
|
+
|
|
1024
|
+
def inline_del(str)
|
|
1025
|
+
inline_asis(str, "del")
|
|
1026
|
+
end
|
|
1027
|
+
|
|
1028
|
+
def inline_ins(str)
|
|
1029
|
+
inline_asis(str, "ins")
|
|
1030
|
+
end
|
|
1031
|
+
|
|
1032
|
+
def inline_u(str)
|
|
1033
|
+
%Q(<u>#{escape_html(str)}</u>)
|
|
1034
|
+
end
|
|
1035
|
+
|
|
1036
|
+
def inline_recipe(str)
|
|
1037
|
+
%Q(<span class="recipe">「#{escape_html(str)}」</span>)
|
|
1038
|
+
end
|
|
1039
|
+
|
|
1040
|
+
def inline_icon(id)
|
|
1041
|
+
begin
|
|
1042
|
+
%Q[<img src="#{@chapter.image(id).path.sub(/\A\.\//, "")}" alt="[#{id}]" />]
|
|
1043
|
+
rescue
|
|
1044
|
+
%Q[<pre>missing image: #{id}</pre>]
|
|
1045
|
+
end
|
|
1046
|
+
end
|
|
1047
|
+
|
|
1048
|
+
def inline_uchar(str)
|
|
1049
|
+
%Q(&#x#{str};)
|
|
1050
|
+
end
|
|
1051
|
+
|
|
1052
|
+
def inline_comment(str)
|
|
1053
|
+
if ReVIEW.book.param["draft"]
|
|
1054
|
+
%Q(<span class="draft-comment">#{escape_html(str)}</span>)
|
|
1055
|
+
else
|
|
1056
|
+
%Q(<!-- #{escape_html(str)} -->)
|
|
1057
|
+
end
|
|
1058
|
+
end
|
|
1059
|
+
|
|
1060
|
+
def inline_raw(str)
|
|
1061
|
+
super(str)
|
|
1062
|
+
end
|
|
1063
|
+
|
|
1064
|
+
def nofunc_text(str)
|
|
1065
|
+
escape_html(str)
|
|
1066
|
+
end
|
|
1067
|
+
|
|
1068
|
+
def compile_href(url, label)
|
|
1069
|
+
%Q(<a href="#{escape_html(url)}" class="link">#{label.nil? ? escape_html(url) : escape_html(label)}</a>)
|
|
1070
|
+
end
|
|
1071
|
+
|
|
1072
|
+
def flushright(lines)
|
|
1073
|
+
if ReVIEW.book.param["deprecated-blocklines"].nil?
|
|
1074
|
+
puts split_paragraph(lines).join("\n").gsub("<p>", "<p class=\"flushright\">")
|
|
1075
|
+
else
|
|
1076
|
+
puts %Q[<div style="text-align:right;">]
|
|
1077
|
+
print %Q[<pre class="flushright">]
|
|
1078
|
+
lines.each {|line| puts detab(line) }
|
|
1079
|
+
puts '</pre>'
|
|
1080
|
+
puts '</div>'
|
|
1081
|
+
end
|
|
1082
|
+
end
|
|
1083
|
+
|
|
1084
|
+
def centering(lines)
|
|
1085
|
+
puts split_paragraph(lines).join("\n").gsub("<p>", "<p class=\"center\">")
|
|
1086
|
+
end
|
|
1087
|
+
|
|
1088
|
+
def image_ext
|
|
1089
|
+
"png"
|
|
1090
|
+
end
|
|
1091
|
+
|
|
1092
|
+
def olnum(num)
|
|
1093
|
+
@ol_num = num.to_i
|
|
1094
|
+
end
|
|
1095
|
+
end
|
|
1096
|
+
|
|
1097
|
+
end # module ReVIEW
|