review 2.3.0 → 2.4.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 +4 -4
- data/.rubocop.yml +90 -66
- data/.travis.yml +1 -1
- data/Gemfile +0 -1
- data/NEWS.ja.md +82 -0
- data/NEWS.md +83 -0
- data/README.md +5 -3
- data/Rakefile +8 -8
- data/bin/review +1 -5
- data/bin/review-catalog-converter +22 -27
- data/bin/review-check +36 -43
- data/bin/review-checkdep +10 -15
- data/bin/review-compile +37 -55
- data/bin/review-epubmaker +4 -5
- data/bin/review-index +21 -29
- data/bin/review-init +26 -37
- data/bin/review-pdfmaker +0 -2
- data/bin/review-preproc +25 -45
- data/bin/review-validate +19 -18
- data/bin/review-vol +15 -27
- data/doc/config.yml.sample +5 -2
- data/doc/format.ja.md +20 -1
- data/doc/format.md +21 -5
- data/doc/images/review-generate.png +0 -0
- data/lib/epubmaker.rb +1 -3
- data/lib/epubmaker/content.rb +24 -27
- data/lib/epubmaker/epubcommon.rb +135 -148
- data/lib/epubmaker/epubv2.rb +39 -46
- data/lib/epubmaker/epubv3.rb +93 -103
- data/lib/epubmaker/producer.rb +138 -151
- data/lib/epubmaker/zip_exporter.rb +21 -26
- data/lib/review/book.rb +3 -6
- data/lib/review/book/base.rb +78 -103
- data/lib/review/book/chapter.rb +36 -40
- data/lib/review/book/compilable.rb +28 -31
- data/lib/review/book/image_finder.rb +6 -13
- data/lib/review/book/index.rb +100 -121
- data/lib/review/book/page_metric.rb +2 -7
- data/lib/review/book/part.rb +18 -20
- data/lib/review/book/volume.rb +9 -13
- data/lib/review/builder.rb +81 -116
- data/lib/review/catalog.rb +15 -19
- data/lib/review/compiler.rb +64 -83
- data/lib/review/configure.rb +87 -97
- data/lib/review/converter.rb +2 -7
- data/lib/review/epubbuilder.rb +1 -3
- data/lib/review/epubmaker.rb +213 -205
- data/lib/review/exception.rb +2 -4
- data/lib/review/extentions.rb +0 -1
- data/lib/review/extentions/hash.rb +2 -2
- data/lib/review/extentions/string.rb +5 -30
- data/lib/review/htmlbuilder.rb +320 -375
- data/lib/review/htmltoc.rb +4 -7
- data/lib/review/htmlutils.rb +29 -32
- data/lib/review/i18n.rb +33 -44
- data/lib/review/i18n.yml +3 -3
- data/lib/review/idgxmlbuilder.rb +309 -345
- data/lib/review/latexbuilder.rb +175 -212
- data/lib/review/latexindex.rb +2 -8
- data/lib/review/latexutils.rb +33 -43
- data/lib/review/lineinput.rb +1 -1
- data/lib/review/logger.rb +21 -0
- data/lib/review/makerhelper.rb +1 -4
- data/lib/review/markdownbuilder.rb +44 -53
- data/lib/review/md2inaobuilder.rb +6 -12
- data/lib/review/pdfmaker.rb +143 -173
- data/lib/review/preprocessor.rb +64 -101
- data/lib/review/rstbuilder.rb +126 -158
- data/lib/review/sec_counter.rb +18 -34
- data/lib/review/template.rb +4 -5
- data/lib/review/textbuilder.rb +2 -3
- data/lib/review/textutils.rb +7 -13
- data/lib/review/tocparser.rb +31 -56
- data/lib/review/tocprinter.rb +26 -52
- data/lib/review/topbuilder.rb +219 -247
- data/lib/review/unfold.rb +15 -24
- data/lib/review/version.rb +1 -1
- data/lib/review/webmaker.rb +75 -99
- data/lib/review/webtocprinter.rb +15 -20
- data/lib/review/yamlloader.rb +13 -15
- data/review.gemspec +20 -22
- data/templates/latex/layout.tex.erb +2 -2
- data/templates/opf/epubv2.opf.erb +7 -7
- data/templates/opf/epubv3.opf.erb +7 -7
- data/templates/web/html/layout-html5.html.erb +2 -2
- data/test/assets/black.eps +280 -0
- data/test/assets/fit.png +0 -0
- data/test/assets/large.gif +0 -0
- data/test/assets/large.jpg +0 -0
- data/test/assets/large.png +0 -0
- data/test/assets/large.svg +65 -0
- data/test/assets/test_template.tex +1 -1
- data/test/book_test_helper.rb +2 -2
- data/test/run_test.rb +4 -4
- data/test/sample-book/src/Rakefile +21 -22
- data/test/syntax-book/Gemfile +4 -0
- data/test/syntax-book/Rakefile +72 -0
- data/test/syntax-book/appA.re +22 -0
- data/test/syntax-book/bib.re +6 -0
- data/test/syntax-book/catalog.yml +15 -0
- data/test/syntax-book/ch01.re +136 -0
- data/test/syntax-book/ch02.re +351 -0
- data/test/syntax-book/ch03.re +82 -0
- data/test/syntax-book/config.yml +35 -0
- data/test/syntax-book/images/ball.png +0 -0
- data/test/syntax-book/images/cover.jpg +0 -0
- data/test/syntax-book/images/fractal.png +0 -0
- data/test/syntax-book/images/img3-1.png +0 -0
- data/test/syntax-book/images/inlineicon.jpg +0 -0
- data/test/syntax-book/images/logic.png +0 -0
- data/test/syntax-book/images/logic2.png +0 -0
- data/test/syntax-book/images/puzzle.jpg +0 -0
- data/test/syntax-book/images/table.jpg +0 -0
- data/test/syntax-book/part2.re +6 -0
- data/test/syntax-book/pre01.re +26 -0
- data/test/syntax-book/review-ext.rb +14 -0
- data/test/syntax-book/sty/jumoline.sty +310 -0
- data/test/syntax-book/sty/reviewmacro.sty +39 -0
- data/test/syntax-book/style.css +494 -0
- data/test/syntax-book/syntax.dic +2 -0
- data/test/test_book.rb +106 -111
- data/test/test_book_chapter.rb +21 -22
- data/test/test_book_part.rb +3 -5
- data/test/test_builder.rb +11 -22
- data/test/test_catalog.rb +17 -18
- data/test/test_catalog_converter_cmd.rb +5 -5
- data/test/test_compiler.rb +18 -16
- data/test/test_configure.rb +35 -38
- data/test/test_converter.rb +3 -4
- data/test/test_epub3maker.rb +136 -117
- data/test/test_epubmaker.rb +107 -114
- data/test/test_epubmaker_cmd.rb +2 -4
- data/test/test_extentions_hash.rb +32 -33
- data/test/test_helper.rb +9 -11
- data/test/test_htmlbuilder.rb +454 -420
- data/test/test_htmltoc.rb +8 -12
- data/test/test_htmlutils.rb +0 -2
- data/test/test_i18n.rb +159 -150
- data/test/test_idgxmlbuilder.rb +190 -197
- data/test/test_image_finder.rb +21 -22
- data/test/test_index.rb +24 -29
- data/test/test_latexbuilder.rb +274 -264
- data/test/test_lineinput.rb +7 -10
- data/test/test_location.rb +7 -7
- data/test/test_makerhelper.rb +13 -25
- data/test/test_markdownbuilder.rb +23 -26
- data/test/test_md2inaobuilder.rb +8 -11
- data/test/test_pdfmaker.rb +114 -123
- data/test/test_pdfmaker_cmd.rb +1 -3
- data/test/test_review_ext.rb +3 -5
- data/test/test_rstbuilder.rb +92 -97
- data/test/test_template.rb +3 -7
- data/test/test_textutils.rb +27 -27
- data/test/test_tocparser.rb +2 -2
- data/test/test_topbuilder.rb +98 -103
- data/test/test_webtocprinter.rb +5 -6
- data/test/test_yamlloader.rb +42 -42
- data/test/test_zip_exporter.rb +12 -18
- metadata +86 -9
- data/lib/review/ewbbuilder.rb +0 -382
data/lib/review/htmltoc.rb
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
module ReVIEW
|
|
2
2
|
class HTMLToc
|
|
3
3
|
def initialize(basedir)
|
|
4
|
-
@tochtmltxt =
|
|
4
|
+
@tochtmltxt = 'toc-html.txt'
|
|
5
5
|
@basedir = basedir
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def add_item(level, filename, title, args)
|
|
9
9
|
args_str = encode_args(args)
|
|
10
10
|
line = [level, filename, title, args_str].join("\t")
|
|
11
|
-
File.open(tocfilename,
|
|
12
|
-
f.write "#{line}\n"
|
|
13
|
-
end
|
|
11
|
+
File.open(tocfilename, 'a') { |f| f.write "#{line}\n" }
|
|
14
12
|
end
|
|
15
13
|
|
|
16
14
|
def each_item
|
|
@@ -30,15 +28,14 @@ module ReVIEW
|
|
|
30
28
|
def decode_args(args_str)
|
|
31
29
|
args = {}
|
|
32
30
|
args_str.split(/,\s*/).each do |pair|
|
|
33
|
-
key, val = pair.split(
|
|
31
|
+
key, val = pair.split('=')
|
|
34
32
|
args[key.to_sym] = val
|
|
35
33
|
end
|
|
36
34
|
args
|
|
37
35
|
end
|
|
38
36
|
|
|
39
37
|
def encode_args(args)
|
|
40
|
-
args.delete_if {|
|
|
38
|
+
args.delete_if { |_k, v| v.nil? }.map { |k, v| "#{k}=#{v}" }.join(',')
|
|
41
39
|
end
|
|
42
40
|
end
|
|
43
41
|
end
|
|
44
|
-
|
data/lib/review/htmlutils.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
# Copyright (c) 2002-2006 Minero Aoki
|
|
2
|
+
# Copyright (c) 2006-2017 Minero Aoki, Kenshi Muto
|
|
3
|
+
# 2002-2006 Minero Aoki
|
|
5
4
|
#
|
|
6
5
|
# This program is free software.
|
|
7
6
|
# You can distribute or modify this program under the terms of
|
|
@@ -10,18 +9,17 @@
|
|
|
10
9
|
|
|
11
10
|
require 'cgi/util'
|
|
12
11
|
module ReVIEW
|
|
13
|
-
|
|
14
12
|
module HTMLUtils
|
|
15
13
|
ESC = {
|
|
16
14
|
'&' => '&',
|
|
17
15
|
'<' => '<',
|
|
18
16
|
'>' => '>',
|
|
19
17
|
'"' => '"'
|
|
20
|
-
}
|
|
18
|
+
} # .freeze
|
|
21
19
|
|
|
22
20
|
def escape_html(str)
|
|
23
21
|
t = ESC
|
|
24
|
-
str.gsub(/[&"<>]/) {|c| t[c] }
|
|
22
|
+
str.gsub(/[&"<>]/) { |c| t[c] }
|
|
25
23
|
end
|
|
26
24
|
|
|
27
25
|
alias_method :escape, :escape_html
|
|
@@ -35,7 +33,7 @@ module ReVIEW
|
|
|
35
33
|
alias_method :unescape, :unescape_html
|
|
36
34
|
|
|
37
35
|
def strip_html(str)
|
|
38
|
-
str.gsub(
|
|
36
|
+
str.gsub(%r{</?[^>]*>}, '')
|
|
39
37
|
end
|
|
40
38
|
|
|
41
39
|
def escape_comment(str)
|
|
@@ -43,40 +41,40 @@ module ReVIEW
|
|
|
43
41
|
end
|
|
44
42
|
|
|
45
43
|
def highlight?
|
|
46
|
-
@book.config[
|
|
47
|
-
@book.config[
|
|
44
|
+
@book.config['highlight'] &&
|
|
45
|
+
@book.config['highlight']['html']
|
|
48
46
|
end
|
|
49
47
|
|
|
50
48
|
def highlight(ops)
|
|
51
|
-
if @book.config[
|
|
52
|
-
raise ReVIEW::ConfigError,
|
|
49
|
+
if @book.config['pygments'].present?
|
|
50
|
+
raise ReVIEW::ConfigError, %Q('pygments:' in config.yml is obsoleted.)
|
|
53
51
|
end
|
|
54
|
-
return ops[:body].to_s
|
|
52
|
+
return ops[:body].to_s unless highlight?
|
|
55
53
|
|
|
56
|
-
if @book.config[
|
|
54
|
+
if @book.config['highlight']['html'] == 'pygments'
|
|
57
55
|
highlight_pygments(ops)
|
|
58
|
-
elsif @book.config[
|
|
56
|
+
elsif @book.config['highlight']['html'] == 'rouge'
|
|
59
57
|
highlight_rouge(ops)
|
|
60
58
|
else
|
|
61
|
-
raise ReVIEW::ConfigError, "unknown highlight method #{@book.config[
|
|
59
|
+
raise ReVIEW::ConfigError, "unknown highlight method #{@book.config['highlight']['html']} in config.yml."
|
|
62
60
|
end
|
|
63
61
|
end
|
|
64
62
|
|
|
65
63
|
def highlight_pygments(ops)
|
|
66
64
|
body = ops[:body] || ''
|
|
67
|
-
if @book.config[
|
|
68
|
-
lexer = @book.config[
|
|
65
|
+
if @book.config['highlight'] && @book.config['highlight']['lang']
|
|
66
|
+
lexer = @book.config['highlight']['lang'] # default setting
|
|
69
67
|
else
|
|
70
68
|
lexer = 'text'
|
|
71
69
|
end
|
|
72
70
|
lexer = ops[:lexer] if ops[:lexer].present?
|
|
73
71
|
format = ops[:format] || ''
|
|
74
|
-
options = {:
|
|
72
|
+
options = { nowrap: true, noclasses: true }
|
|
75
73
|
if ops[:linenum]
|
|
76
74
|
options[:nowrap] = false
|
|
77
75
|
options[:linenos] = 'inline'
|
|
78
76
|
end
|
|
79
|
-
if ops[:options] && ops[:options].
|
|
77
|
+
if ops[:options] && ops[:options].is_a?(Hash)
|
|
80
78
|
options.merge!(ops[:options])
|
|
81
79
|
end
|
|
82
80
|
|
|
@@ -84,9 +82,9 @@ module ReVIEW
|
|
|
84
82
|
require 'pygments'
|
|
85
83
|
begin
|
|
86
84
|
Pygments.highlight(unescape_html(body),
|
|
87
|
-
:
|
|
88
|
-
:
|
|
89
|
-
:
|
|
85
|
+
options: options,
|
|
86
|
+
formatter: format,
|
|
87
|
+
lexer: lexer)
|
|
90
88
|
rescue MentosError
|
|
91
89
|
body
|
|
92
90
|
end
|
|
@@ -99,12 +97,12 @@ module ReVIEW
|
|
|
99
97
|
body = ops[:body] || ''
|
|
100
98
|
if ops[:lexer].present?
|
|
101
99
|
lexer = ops[:lexer]
|
|
102
|
-
elsif @book.config[
|
|
103
|
-
lexer = @book.config[
|
|
100
|
+
elsif @book.config['highlight'] && @book.config['highlight']['lang']
|
|
101
|
+
lexer = @book.config['highlight']['lang'] # default setting
|
|
104
102
|
else
|
|
105
103
|
lexer = 'text'
|
|
106
104
|
end
|
|
107
|
-
format = ops[:format] || ''
|
|
105
|
+
# format = ops[:format] || ''
|
|
108
106
|
|
|
109
107
|
first_line_num = 1 ## default
|
|
110
108
|
if ops[:options] && ops[:options][:linenostart]
|
|
@@ -115,11 +113,11 @@ module ReVIEW
|
|
|
115
113
|
lexer = Rouge::Lexer.find(lexer)
|
|
116
114
|
raise "unknown lexer #{lexer}" unless lexer
|
|
117
115
|
|
|
118
|
-
formatter = Rouge::Formatters::HTML.new(:
|
|
116
|
+
formatter = Rouge::Formatters::HTML.new(css_class: 'highlight')
|
|
119
117
|
if ops[:linenum]
|
|
120
118
|
formatter = Rouge::Formatters::HTMLTable.new(formatter,
|
|
121
|
-
:
|
|
122
|
-
:
|
|
119
|
+
table_class: 'highlight rouge-table',
|
|
120
|
+
start_line: first_line_num)
|
|
123
121
|
end
|
|
124
122
|
raise "unknown formatter #{formatter}" unless formatter
|
|
125
123
|
|
|
@@ -129,13 +127,12 @@ module ReVIEW
|
|
|
129
127
|
|
|
130
128
|
def normalize_id(id)
|
|
131
129
|
if id =~ /\A[a-z][a-z0-9_.-]*\Z/i
|
|
132
|
-
|
|
130
|
+
id
|
|
133
131
|
elsif id =~ /\A[0-9_.-][a-z0-9_.-]*\Z/i
|
|
134
|
-
|
|
132
|
+
"id_#{id}" # dummy prefix
|
|
135
133
|
else
|
|
136
|
-
|
|
134
|
+
"id_#{CGI.escape(id.gsub('_', '__')).gsub('%', '_').gsub('+', '-')}" # escape all
|
|
137
135
|
end
|
|
138
136
|
end
|
|
139
137
|
end
|
|
140
|
-
|
|
141
138
|
end # module ReVIEW
|
data/lib/review/i18n.rb
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
require 'yaml'
|
|
3
2
|
|
|
4
3
|
module ReVIEW
|
|
5
4
|
class I18n
|
|
6
|
-
ALPHA_U = %w[0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
|
|
7
|
-
ALPHA_L = %w[0 a b c d e f g h i j k l m n o p q r s t u v w x y z]
|
|
8
|
-
ROMAN_U = %w[0 I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII]
|
|
9
|
-
ROMAN_L = %w[0 i ii iii iv v vi vii viii ix x xi xii xiii xiv xv xvi xvii xviii xix xx xxi xxii xxiii xxiv xxv xxvi xxvii]
|
|
10
|
-
ALPHA_UW = %w[0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
|
|
11
|
-
ALPHA_LW = %w[0 a b c d e f g h i j k l m n o p q r s t u v w x y z]
|
|
12
|
-
ROMAN_UW = %w[0 Ⅰ Ⅱ Ⅲ Ⅳ V Ⅵ Ⅶ Ⅷ Ⅸ X Ⅺ Ⅻ]
|
|
13
|
-
ARABIC_UW = %w[〇 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27]
|
|
14
|
-
ARABIC_LW = %w[〇 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27]
|
|
15
|
-
JAPAN = %w[〇 一 二 三 四 五 六 七 八 九 十 十一 十二 十三 十四 十五 十六 十七 十八 十九 二十 二十一 二十二 二十三 二十四 二十五 二十六 二十七]
|
|
16
|
-
|
|
17
|
-
def self.setup(locale=
|
|
5
|
+
ALPHA_U = %w[0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z].freeze
|
|
6
|
+
ALPHA_L = %w[0 a b c d e f g h i j k l m n o p q r s t u v w x y z].freeze
|
|
7
|
+
ROMAN_U = %w[0 I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII].freeze
|
|
8
|
+
ROMAN_L = %w[0 i ii iii iv v vi vii viii ix x xi xii xiii xiv xv xvi xvii xviii xix xx xxi xxii xxiii xxiv xxv xxvi xxvii].freeze
|
|
9
|
+
ALPHA_UW = %w[0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z].freeze
|
|
10
|
+
ALPHA_LW = %w[0 a b c d e f g h i j k l m n o p q r s t u v w x y z].freeze
|
|
11
|
+
ROMAN_UW = %w[0 Ⅰ Ⅱ Ⅲ Ⅳ V Ⅵ Ⅶ Ⅷ Ⅸ X Ⅺ Ⅻ].freeze
|
|
12
|
+
ARABIC_UW = %w[〇 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27].freeze
|
|
13
|
+
ARABIC_LW = %w[〇 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27].freeze
|
|
14
|
+
JAPAN = %w[〇 一 二 三 四 五 六 七 八 九 十 十一 十二 十三 十四 十五 十六 十七 十八 十九 二十 二十一 二十二 二十三 二十四 二十五 二十六 二十七].freeze
|
|
15
|
+
|
|
16
|
+
def self.setup(locale = 'ja', ymlfile = 'locale.yml')
|
|
18
17
|
@i18n = ReVIEW::I18n.new(locale)
|
|
19
18
|
|
|
20
19
|
lfile = nil
|
|
@@ -22,18 +21,14 @@ module ReVIEW
|
|
|
22
21
|
lfile = File.expand_path(ymlfile, Dir.pwd)
|
|
23
22
|
|
|
24
23
|
# backward compatibility
|
|
25
|
-
if !File.exist?(lfile) && (ymlfile ==
|
|
26
|
-
raise ReVIEW::ConfigError, "locale.yaml is obsoleted. Please use locale.yml."
|
|
27
|
-
end
|
|
24
|
+
raise ReVIEW::ConfigError, 'locale.yaml is obsoleted. Please use locale.yml.' if !File.exist?(lfile) && (ymlfile == 'locale.yml') && File.exist?(File.expand_path('locale.yaml', Dir.pwd))
|
|
28
25
|
end
|
|
29
26
|
|
|
30
|
-
if lfile && File.file?(lfile)
|
|
31
|
-
@i18n.update_localefile(lfile)
|
|
32
|
-
end
|
|
27
|
+
@i18n.update_localefile(lfile) if lfile && File.file?(lfile)
|
|
33
28
|
end
|
|
34
29
|
|
|
35
|
-
def self.i18n(*
|
|
36
|
-
raise NotImplementedError,
|
|
30
|
+
def self.i18n(*_args)
|
|
31
|
+
raise NotImplementedError, 'I18n.i18n is obsoleted. Please use I18n.setup(locale, [ymlfile])'
|
|
37
32
|
end
|
|
38
33
|
|
|
39
34
|
def self.t(str, args = nil)
|
|
@@ -68,7 +63,7 @@ module ReVIEW
|
|
|
68
63
|
end
|
|
69
64
|
|
|
70
65
|
def load_default
|
|
71
|
-
load_file(File.expand_path(
|
|
66
|
+
load_file(File.expand_path('i18n.yml', File.dirname(__FILE__)))
|
|
72
67
|
end
|
|
73
68
|
|
|
74
69
|
def load_file(path)
|
|
@@ -77,9 +72,9 @@ module ReVIEW
|
|
|
77
72
|
|
|
78
73
|
def update_localefile(path)
|
|
79
74
|
user_i18n = YAML.load_file(path)
|
|
80
|
-
locale = user_i18n[
|
|
75
|
+
locale = user_i18n['locale']
|
|
81
76
|
if locale
|
|
82
|
-
user_i18n.delete(
|
|
77
|
+
user_i18n.delete('locale')
|
|
83
78
|
if @store[locale]
|
|
84
79
|
@store[locale].merge!(user_i18n)
|
|
85
80
|
else
|
|
@@ -87,7 +82,7 @@ module ReVIEW
|
|
|
87
82
|
end
|
|
88
83
|
else
|
|
89
84
|
user_i18n.each do |key, values|
|
|
90
|
-
raise KeyError, "Invalid locale file: #{path}" unless values.
|
|
85
|
+
raise KeyError, "Invalid locale file: #{path}" unless values.is_a? Hash
|
|
91
86
|
@store[key].merge!(values)
|
|
92
87
|
end
|
|
93
88
|
end
|
|
@@ -111,56 +106,50 @@ module ReVIEW
|
|
|
111
106
|
frmt = @store[@locale][str].dup
|
|
112
107
|
frmt.gsub!('%%', '##')
|
|
113
108
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
args = []
|
|
117
|
-
else
|
|
118
|
-
args = [args]
|
|
119
|
-
end
|
|
109
|
+
unless args.is_a?(Array)
|
|
110
|
+
args = args.nil? && frmt !~ /\%/ ? [] : [args]
|
|
120
111
|
end
|
|
121
112
|
|
|
122
113
|
percents = frmt.scan(/%[A-Za-z]{1,3}/)
|
|
123
114
|
remove_args = []
|
|
124
115
|
percents.each_with_index do |i, idx|
|
|
125
116
|
case i
|
|
126
|
-
when
|
|
117
|
+
when '%pA'
|
|
127
118
|
frmt.sub!(i, ALPHA_U[args[idx]])
|
|
128
119
|
remove_args << idx
|
|
129
|
-
when
|
|
120
|
+
when '%pa'
|
|
130
121
|
frmt.sub!(i, ALPHA_L[args[idx]])
|
|
131
122
|
remove_args << idx
|
|
132
|
-
when
|
|
123
|
+
when '%pAW'
|
|
133
124
|
frmt.sub!(i, ALPHA_UW[args[idx]])
|
|
134
125
|
remove_args << idx
|
|
135
|
-
when
|
|
126
|
+
when '%paW'
|
|
136
127
|
frmt.sub!(i, ALPHA_LW[args[idx]])
|
|
137
128
|
remove_args << idx
|
|
138
|
-
when
|
|
129
|
+
when '%pR'
|
|
139
130
|
frmt.sub!(i, ROMAN_U[args[idx]])
|
|
140
131
|
remove_args << idx
|
|
141
|
-
when
|
|
132
|
+
when '%pr'
|
|
142
133
|
frmt.sub!(i, ROMAN_L[args[idx]])
|
|
143
134
|
remove_args << idx
|
|
144
|
-
when
|
|
135
|
+
when '%pRW'
|
|
145
136
|
frmt.sub!(i, ROMAN_UW[args[idx]])
|
|
146
137
|
remove_args << idx
|
|
147
|
-
when
|
|
138
|
+
when '%pJ'
|
|
148
139
|
frmt.sub!(i, JAPAN[args[idx]])
|
|
149
140
|
remove_args << idx
|
|
150
|
-
when
|
|
141
|
+
when '%pdW'
|
|
151
142
|
frmt.sub!(i, ARABIC_LW[args[idx]])
|
|
152
143
|
remove_args << idx
|
|
153
|
-
when
|
|
144
|
+
when '%pDW'
|
|
154
145
|
frmt.sub!(i, ARABIC_UW[args[idx]])
|
|
155
146
|
remove_args << idx
|
|
156
|
-
else
|
|
157
|
-
# do nothing
|
|
158
147
|
end
|
|
159
148
|
end
|
|
160
149
|
remove_args.reverse_each do |idx|
|
|
161
150
|
args.delete_at idx
|
|
162
151
|
end
|
|
163
|
-
args_matched = (frmt.count(
|
|
152
|
+
args_matched = (frmt.count('%') <= args.size)
|
|
164
153
|
frmt.gsub!('##', '%%')
|
|
165
154
|
args_matched ? (frmt % args) : frmt
|
|
166
155
|
rescue
|
data/lib/review/i18n.yml
CHANGED
|
@@ -5,7 +5,7 @@ ja:
|
|
|
5
5
|
column: "コラム「%s」"
|
|
6
6
|
columnname: "コラム"
|
|
7
7
|
column_head: "■コラム"
|
|
8
|
-
part: 第%
|
|
8
|
+
part: 第%pR部
|
|
9
9
|
part_short: "%pR"
|
|
10
10
|
chapter: 第%d章
|
|
11
11
|
chapter_short: "%d"
|
|
@@ -67,7 +67,7 @@ en:
|
|
|
67
67
|
column: "Column %s"
|
|
68
68
|
columnname: "Column"
|
|
69
69
|
column_head: "Column"
|
|
70
|
-
part: "Part %
|
|
70
|
+
part: "Part %pR"
|
|
71
71
|
part_short: "%pR"
|
|
72
72
|
chapter: Chapter %d
|
|
73
73
|
chapter_short: "%d"
|
|
@@ -126,7 +126,7 @@ zh-TW:
|
|
|
126
126
|
image: 圖
|
|
127
127
|
table: 表
|
|
128
128
|
list: List
|
|
129
|
-
part: 第%
|
|
129
|
+
part: 第%pR部份
|
|
130
130
|
part_short: "%pR"
|
|
131
131
|
chapter: 第%d章
|
|
132
132
|
chapter_short: "%d"
|
data/lib/review/idgxmlbuilder.rb
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
# Copyright (c) 2002-2007 Minero Aoki
|
|
4
|
-
# 2008-2017 Minero Aoki, Kenshi Muto
|
|
1
|
+
# Copyright (c) 2008-2017 Minero Aoki, Kenshi Muto
|
|
2
|
+
# 2002-2007 Minero Aoki
|
|
5
3
|
#
|
|
6
4
|
# This program is free software.
|
|
7
5
|
# You can distribute or modify this program under the terms of
|
|
@@ -14,13 +12,11 @@ require 'review/textutils'
|
|
|
14
12
|
require 'nkf'
|
|
15
13
|
|
|
16
14
|
module ReVIEW
|
|
17
|
-
|
|
18
15
|
class IDGXMLBuilder < Builder
|
|
19
|
-
|
|
20
16
|
include TextUtils
|
|
21
17
|
include HTMLUtils
|
|
22
18
|
|
|
23
|
-
[
|
|
19
|
+
%i[ttbold hint maru keytop labelref ref balloon].each { |e| Compiler.definline(e) }
|
|
24
20
|
Compiler.defsingle(:dtp, 1)
|
|
25
21
|
|
|
26
22
|
Compiler.defblock(:insn, 0..1)
|
|
@@ -65,19 +61,19 @@ module ReVIEW
|
|
|
65
61
|
@noindent = nil
|
|
66
62
|
@ol_num = nil
|
|
67
63
|
@first_line_num = nil
|
|
68
|
-
@rootelement =
|
|
64
|
+
@rootelement = 'doc'
|
|
69
65
|
@secttags = nil
|
|
70
66
|
@tsize = nil
|
|
71
67
|
@texblockequation = 0
|
|
72
68
|
@texinlineequation = 0
|
|
73
69
|
print %Q(<?xml version="1.0" encoding="UTF-8"?>\n)
|
|
74
70
|
print %Q(<#{@rootelement} xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/">)
|
|
75
|
-
@secttags = true unless @book.config[
|
|
71
|
+
@secttags = true unless @book.config['structuredxml'].nil?
|
|
76
72
|
end
|
|
77
73
|
private :builder_init_file
|
|
78
74
|
|
|
79
75
|
def puts(arg)
|
|
80
|
-
if @book.config[
|
|
76
|
+
if @book.config['nolf'].present?
|
|
81
77
|
print arg
|
|
82
78
|
else
|
|
83
79
|
super
|
|
@@ -85,43 +81,25 @@ module ReVIEW
|
|
|
85
81
|
end
|
|
86
82
|
|
|
87
83
|
def result
|
|
88
|
-
s =
|
|
89
|
-
|
|
90
|
-
s +=
|
|
91
|
-
s +=
|
|
92
|
-
s +=
|
|
93
|
-
s +=
|
|
94
|
-
s +=
|
|
84
|
+
s = ''
|
|
85
|
+
if @secttags
|
|
86
|
+
s += '</sect4>' if @subsubsubsection > 0
|
|
87
|
+
s += '</sect3>' if @subsubsection > 0
|
|
88
|
+
s += '</sect2>' if @subsection > 0
|
|
89
|
+
s += '</sect>' if @section > 0
|
|
90
|
+
s += '</chapter>' if @chapter.number > 0
|
|
95
91
|
end
|
|
96
92
|
@output.string + s + "</#{@rootelement}>\n"
|
|
97
93
|
end
|
|
98
94
|
|
|
99
|
-
def warn(msg)
|
|
100
|
-
if @no_error
|
|
101
|
-
@warns.push [@location.filename, @location.lineno, msg]
|
|
102
|
-
puts "----WARNING: #{escape_html(msg)}----"
|
|
103
|
-
else
|
|
104
|
-
$stderr.puts "#{@location}: warning: #{msg}"
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def error(msg)
|
|
109
|
-
if @no_error
|
|
110
|
-
@errors.push [@location.filename, @location.lineno, msg]
|
|
111
|
-
puts "----ERROR: #{escape_html(msg)}----"
|
|
112
|
-
else
|
|
113
|
-
$stderr.puts "#{@location}: error: #{msg}"
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
95
|
def headline(level, label, caption)
|
|
118
96
|
case level
|
|
119
97
|
when 1
|
|
120
|
-
|
|
121
|
-
print
|
|
122
|
-
print
|
|
123
|
-
print
|
|
124
|
-
print
|
|
98
|
+
if @secttags
|
|
99
|
+
print '</sect4>' if @subsubsubsection > 0
|
|
100
|
+
print '</sect3>' if @subsubsection > 0
|
|
101
|
+
print '</sect2>' if @subsection > 0
|
|
102
|
+
print '</sect>' if @section > 0
|
|
125
103
|
end
|
|
126
104
|
|
|
127
105
|
print %Q(<chapter id="chap:#{@chapter.number}">) unless @secttags.nil?
|
|
@@ -131,11 +109,11 @@ module ReVIEW
|
|
|
131
109
|
@subsubsection = 0
|
|
132
110
|
@subsubsubsection = 0
|
|
133
111
|
when 2
|
|
134
|
-
|
|
135
|
-
print
|
|
136
|
-
print
|
|
137
|
-
print
|
|
138
|
-
print
|
|
112
|
+
if @secttags
|
|
113
|
+
print '</sect4>' if @subsubsubsection > 0
|
|
114
|
+
print '</sect3>' if @subsubsection > 0
|
|
115
|
+
print '</sect2>' if @subsection > 0
|
|
116
|
+
print '</sect>' if @section > 0
|
|
139
117
|
end
|
|
140
118
|
@section += 1
|
|
141
119
|
print %Q(<sect id="sect:#{@chapter.number}.#{@section}">) unless @secttags.nil?
|
|
@@ -144,10 +122,10 @@ module ReVIEW
|
|
|
144
122
|
@subsubsection = 0
|
|
145
123
|
@subsubsubsection = 0
|
|
146
124
|
when 3
|
|
147
|
-
|
|
148
|
-
print
|
|
149
|
-
print
|
|
150
|
-
print
|
|
125
|
+
if @secttags
|
|
126
|
+
print '</sect4>' if @subsubsubsection > 0
|
|
127
|
+
print '</sect3>' if @subsubsection > 0
|
|
128
|
+
print '</sect2>' if @subsection > 0
|
|
151
129
|
end
|
|
152
130
|
|
|
153
131
|
@subsection += 1
|
|
@@ -156,35 +134,33 @@ module ReVIEW
|
|
|
156
134
|
@subsubsection = 0
|
|
157
135
|
@subsubsubsection = 0
|
|
158
136
|
when 4
|
|
159
|
-
|
|
160
|
-
print
|
|
161
|
-
print
|
|
137
|
+
if @secttags
|
|
138
|
+
print '</sect4>' if @subsubsubsection > 0
|
|
139
|
+
print '</sect3>' if @subsubsection > 0
|
|
162
140
|
end
|
|
163
141
|
|
|
164
142
|
@subsubsection += 1
|
|
165
|
-
print %Q(<sect3 id="sect:#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}">)
|
|
143
|
+
print %Q(<sect3 id="sect:#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}">) if @secttags
|
|
166
144
|
|
|
167
145
|
@subsubsubsection = 0
|
|
168
146
|
when 5
|
|
169
|
-
|
|
170
|
-
print "</sect4>" if @subsubsubsection > 0
|
|
171
|
-
end
|
|
147
|
+
print '</sect4>' if @secttags && @subsubsubsection > 0
|
|
172
148
|
|
|
173
149
|
@subsubsubsection += 1
|
|
174
|
-
print %Q(<sect4 id="sect:#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}.#{@subsubsubsection}">)
|
|
150
|
+
print %Q(<sect4 id="sect:#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}.#{@subsubsubsection}">) if @secttags
|
|
175
151
|
else
|
|
176
152
|
raise "caption level too deep or unsupported: #{level}"
|
|
177
153
|
end
|
|
178
154
|
|
|
179
|
-
prefix,
|
|
155
|
+
prefix, _anchor = headline_prefix(level)
|
|
180
156
|
|
|
181
|
-
label = label.nil? ?
|
|
157
|
+
label = label.nil? ? '' : %Q( id="#{label}")
|
|
182
158
|
toccaption = escape_html(compile_inline(caption.gsub(/@<fn>\{.+?\}/, '')).gsub(/<[^>]+>/, ''))
|
|
183
159
|
puts %Q(<title#{label} aid:pstyle="h#{level}">#{prefix}#{compile_inline(caption)}</title><?dtp level="#{level}" section="#{prefix}#{toccaption}"?>)
|
|
184
160
|
end
|
|
185
161
|
|
|
186
162
|
def ul_begin
|
|
187
|
-
level = block_given? ? yield :
|
|
163
|
+
level = block_given? ? yield : ''
|
|
188
164
|
level = nil if level == 1
|
|
189
165
|
puts "<ul#{level == 1 ? nil : level}>"
|
|
190
166
|
end
|
|
@@ -194,36 +170,34 @@ module ReVIEW
|
|
|
194
170
|
end
|
|
195
171
|
|
|
196
172
|
def ul_item_end
|
|
197
|
-
puts
|
|
173
|
+
puts '</li>'
|
|
198
174
|
end
|
|
199
175
|
|
|
200
176
|
def choice_single_begin
|
|
201
|
-
puts
|
|
177
|
+
puts %Q(<choice type='single'>)
|
|
202
178
|
end
|
|
203
179
|
|
|
204
180
|
def choice_multi_begin
|
|
205
|
-
puts
|
|
181
|
+
puts %Q(<choice type='multi'>)
|
|
206
182
|
end
|
|
207
183
|
|
|
208
184
|
def choice_single_end
|
|
209
|
-
puts
|
|
185
|
+
puts '</choice>'
|
|
210
186
|
end
|
|
211
187
|
|
|
212
188
|
def choice_multi_end
|
|
213
|
-
puts
|
|
189
|
+
puts '</choice>'
|
|
214
190
|
end
|
|
215
191
|
|
|
216
192
|
def ul_end
|
|
217
|
-
level = block_given? ? yield :
|
|
193
|
+
level = block_given? ? yield : ''
|
|
218
194
|
level = nil if level == 1
|
|
219
195
|
puts "</ul#{level}>"
|
|
220
196
|
end
|
|
221
197
|
|
|
222
198
|
def ol_begin
|
|
223
199
|
puts '<ol>'
|
|
224
|
-
|
|
225
|
-
@ol_num = 1
|
|
226
|
-
end
|
|
200
|
+
@ol_num ||= 1
|
|
227
201
|
end
|
|
228
202
|
|
|
229
203
|
def ol_item(lines, num)
|
|
@@ -259,7 +233,7 @@ module ReVIEW
|
|
|
259
233
|
def paragraph(lines)
|
|
260
234
|
if @noindent.nil?
|
|
261
235
|
if lines[0] =~ /\A(\t+)/
|
|
262
|
-
puts %Q(<p inlist="#{$1.size}">#{lines.join
|
|
236
|
+
puts %Q(<p inlist="#{$1.size}">#{lines.join.sub(/\A\t+/, '')}</p>)
|
|
263
237
|
else
|
|
264
238
|
puts "<p>#{lines.join}</p>"
|
|
265
239
|
end
|
|
@@ -270,95 +244,96 @@ module ReVIEW
|
|
|
270
244
|
end
|
|
271
245
|
|
|
272
246
|
def read(lines)
|
|
273
|
-
puts %Q
|
|
247
|
+
puts %Q(<lead>#{split_paragraph(lines).join}</lead>)
|
|
274
248
|
end
|
|
275
249
|
|
|
276
250
|
alias_method :lead, :read
|
|
277
251
|
|
|
278
|
-
def column_label(id)
|
|
279
|
-
num =
|
|
252
|
+
def column_label(id, chapter = @chapter)
|
|
253
|
+
num = chapter.column(id).number
|
|
280
254
|
"column-#{num}"
|
|
281
255
|
end
|
|
282
256
|
private :column_label
|
|
283
257
|
|
|
284
258
|
def inline_column_chap(chapter, id)
|
|
285
|
-
if @book.config[
|
|
286
|
-
%Q(<link href="#{column_label(id)}">#{I18n.t(
|
|
259
|
+
if @book.config['chapterlink']
|
|
260
|
+
%Q(<link href="#{column_label(id, chapter)}">#{I18n.t('column', compile_inline(chapter.column(id).caption))}</link>)
|
|
287
261
|
else
|
|
288
|
-
I18n.t(
|
|
262
|
+
I18n.t('column', compile_inline(chapter.column(id).caption))
|
|
289
263
|
end
|
|
290
264
|
end
|
|
291
265
|
|
|
292
266
|
def inline_list(id)
|
|
293
267
|
chapter, id = extract_chapter_id(id)
|
|
294
268
|
if get_chap(chapter).nil?
|
|
295
|
-
"<span type='list'>#{I18n.t(
|
|
269
|
+
"<span type='list'>#{I18n.t('list')}#{I18n.t('format_number_without_chapter', [chapter.list(id).number])}</span>"
|
|
296
270
|
else
|
|
297
|
-
"<span type='list'>#{I18n.t(
|
|
271
|
+
"<span type='list'>#{I18n.t('list')}#{I18n.t('format_number', [get_chap(chapter), chapter.list(id).number])}</span>"
|
|
298
272
|
end
|
|
299
273
|
end
|
|
300
274
|
|
|
301
|
-
def list_header(id, caption,
|
|
302
|
-
puts
|
|
275
|
+
def list_header(id, caption, _lang)
|
|
276
|
+
puts '<codelist>'
|
|
277
|
+
return true unless caption.present?
|
|
303
278
|
if get_chap.nil?
|
|
304
|
-
puts %Q
|
|
279
|
+
puts %Q(<caption>#{I18n.t('list')}#{I18n.t('format_number_without_chapter', [@chapter.list(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
|
|
305
280
|
else
|
|
306
|
-
puts %Q
|
|
281
|
+
puts %Q(<caption>#{I18n.t('list')}#{I18n.t('format_number', [get_chap, @chapter.list(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
|
|
307
282
|
end
|
|
308
283
|
end
|
|
309
284
|
|
|
310
285
|
def codelines_body(lines)
|
|
311
286
|
no = 1
|
|
312
287
|
lines.each do |line|
|
|
313
|
-
|
|
314
|
-
print
|
|
315
|
-
print
|
|
316
|
-
print
|
|
317
|
-
print
|
|
288
|
+
if @book.config['listinfo']
|
|
289
|
+
print %Q(<listinfo line="#{no}")
|
|
290
|
+
print %Q( begin="1") if no == 1
|
|
291
|
+
print %Q( end="#{no}") if no == lines.size
|
|
292
|
+
print '>'
|
|
318
293
|
end
|
|
319
294
|
print detab(line)
|
|
320
295
|
print "\n"
|
|
321
|
-
print
|
|
296
|
+
print '</listinfo>' if @book.config['listinfo']
|
|
322
297
|
no += 1
|
|
323
298
|
end
|
|
324
299
|
end
|
|
325
300
|
|
|
326
|
-
def list_body(
|
|
327
|
-
print
|
|
301
|
+
def list_body(_id, lines, _lang)
|
|
302
|
+
print '<pre>'
|
|
328
303
|
codelines_body(lines)
|
|
329
|
-
puts
|
|
304
|
+
puts '</pre></codelist>'
|
|
330
305
|
end
|
|
331
306
|
|
|
332
|
-
def emlist(lines, caption = nil,
|
|
307
|
+
def emlist(lines, caption = nil, _lang = nil)
|
|
333
308
|
quotedlist lines, 'emlist', caption
|
|
334
309
|
end
|
|
335
310
|
|
|
336
|
-
def emlistnum(lines, caption = nil,
|
|
337
|
-
|
|
338
|
-
first_line_num =
|
|
311
|
+
def emlistnum(lines, caption = nil, _lang = nil)
|
|
312
|
+
lines2 = []
|
|
313
|
+
first_line_num = line_num
|
|
339
314
|
lines.each_with_index do |line, i|
|
|
340
|
-
|
|
315
|
+
lines2 << detab(%Q(<span type='lineno'>) + (i + first_line_num).to_s.rjust(2) + ': </span>' + line)
|
|
341
316
|
end
|
|
342
|
-
quotedlist
|
|
317
|
+
quotedlist lines2, 'emlistnum', caption
|
|
343
318
|
end
|
|
344
319
|
|
|
345
|
-
def listnum_body(lines,
|
|
346
|
-
print
|
|
320
|
+
def listnum_body(lines, _lang)
|
|
321
|
+
print '<pre>'
|
|
347
322
|
no = 1
|
|
348
|
-
first_line_num =
|
|
323
|
+
first_line_num = line_num
|
|
349
324
|
lines.each_with_index do |line, i|
|
|
350
|
-
|
|
351
|
-
print
|
|
352
|
-
print
|
|
353
|
-
print
|
|
354
|
-
print
|
|
325
|
+
if @book.config['listinfo']
|
|
326
|
+
print %Q(<listinfo line="#{no}")
|
|
327
|
+
print %Q( begin="1") if no == 1
|
|
328
|
+
print %Q( end="#{no}") if no == lines.size
|
|
329
|
+
print '>'
|
|
355
330
|
end
|
|
356
|
-
print detab(
|
|
331
|
+
print detab(%Q(<span type='lineno'>) + (i + first_line_num).to_s.rjust(2) + ': </span>' + line)
|
|
357
332
|
print "\n"
|
|
358
|
-
print
|
|
333
|
+
print '</listinfo>' if @book.config['listinfo']
|
|
359
334
|
no += 1
|
|
360
335
|
end
|
|
361
|
-
puts
|
|
336
|
+
puts '</pre></codelist>'
|
|
362
337
|
end
|
|
363
338
|
|
|
364
339
|
def cmd(lines, caption = nil)
|
|
@@ -366,20 +341,20 @@ module ReVIEW
|
|
|
366
341
|
end
|
|
367
342
|
|
|
368
343
|
def quotedlist(lines, css_class, caption)
|
|
369
|
-
print %Q
|
|
344
|
+
print %Q(<list type='#{css_class}'>)
|
|
370
345
|
puts "<caption aid:pstyle='#{css_class}-title'>#{compile_inline(caption)}</caption>" if caption.present?
|
|
371
|
-
print
|
|
346
|
+
print '<pre>'
|
|
372
347
|
no = 1
|
|
373
348
|
lines.each do |line|
|
|
374
|
-
|
|
375
|
-
print
|
|
376
|
-
print
|
|
377
|
-
print
|
|
378
|
-
print
|
|
349
|
+
if @book.config['listinfo']
|
|
350
|
+
print %Q(<listinfo line="#{no}")
|
|
351
|
+
print %Q( begin="1") if no == 1
|
|
352
|
+
print %Q( end="#{no}") if no == lines.size
|
|
353
|
+
print '>'
|
|
379
354
|
end
|
|
380
355
|
print detab(line)
|
|
381
356
|
print "\n"
|
|
382
|
-
print
|
|
357
|
+
print '</listinfo>' if @book.config['listinfo']
|
|
383
358
|
no += 1
|
|
384
359
|
end
|
|
385
360
|
puts '</pre></list>'
|
|
@@ -388,24 +363,24 @@ module ReVIEW
|
|
|
388
363
|
|
|
389
364
|
def quote(lines)
|
|
390
365
|
blocked_lines = split_paragraph(lines)
|
|
391
|
-
puts "<quote>#{blocked_lines.join
|
|
366
|
+
puts "<quote>#{blocked_lines.join}</quote>"
|
|
392
367
|
end
|
|
393
368
|
|
|
394
369
|
def inline_table(id)
|
|
395
370
|
chapter, id = extract_chapter_id(id)
|
|
396
371
|
if get_chap(chapter).nil?
|
|
397
|
-
"<span type='table'>#{I18n.t(
|
|
372
|
+
"<span type='table'>#{I18n.t('table')}#{I18n.t('format_number_without_chapter', [chapter.table(id).number])}</span>"
|
|
398
373
|
else
|
|
399
|
-
"<span type='table'>#{I18n.t(
|
|
374
|
+
"<span type='table'>#{I18n.t('table')}#{I18n.t('format_number', [get_chap(chapter), chapter.table(id).number])}</span>"
|
|
400
375
|
end
|
|
401
376
|
end
|
|
402
377
|
|
|
403
378
|
def inline_img(id)
|
|
404
379
|
chapter, id = extract_chapter_id(id)
|
|
405
380
|
if get_chap(chapter).nil?
|
|
406
|
-
"<span type='image'>#{I18n.t(
|
|
381
|
+
"<span type='image'>#{I18n.t('image')}#{I18n.t('format_number_without_chapter', [chapter.image(id).number])}</span>"
|
|
407
382
|
else
|
|
408
|
-
"<span type='image'>#{I18n.t(
|
|
383
|
+
"<span type='image'>#{I18n.t('image')}#{I18n.t('format_number', [get_chap(chapter), chapter.image(id).number])}</span>"
|
|
409
384
|
end
|
|
410
385
|
end
|
|
411
386
|
|
|
@@ -413,69 +388,66 @@ module ReVIEW
|
|
|
413
388
|
chapter, id = extract_chapter_id(id)
|
|
414
389
|
if chapter.image(id).caption.blank?
|
|
415
390
|
inline_img(id)
|
|
391
|
+
elsif get_chap(chapter).nil?
|
|
392
|
+
"<span type='image'>#{I18n.t('image')}#{I18n.t('format_number_without_chapter', [chapter.image(id).number])}#{I18n.t('image_quote', chapter.image(id).caption)}</span>"
|
|
416
393
|
else
|
|
417
|
-
|
|
418
|
-
"<span type='image'>#{I18n.t("image")}#{I18n.t("format_number_without_chapter", [chapter.image(id).number])}#{I18n.t('image_quote', chapter.image(id).caption)}</span>"
|
|
419
|
-
else
|
|
420
|
-
"<span type='image'>#{I18n.t("image")}#{I18n.t("format_number", [get_chap(chapter), chapter.image(id).number])}#{I18n.t('image_quote', chapter.image(id).caption)}</span>"
|
|
421
|
-
end
|
|
394
|
+
"<span type='image'>#{I18n.t('image')}#{I18n.t('format_number', [get_chap(chapter), chapter.image(id).number])}#{I18n.t('image_quote', chapter.image(id).caption)}</span>"
|
|
422
395
|
end
|
|
423
396
|
end
|
|
424
397
|
|
|
425
398
|
def handle_metric(str)
|
|
426
399
|
k, v = str.split('=', 2)
|
|
427
|
-
|
|
400
|
+
%Q(#{k}="#{v.sub(/\A["']/, '').sub(/["']\Z/, '')}")
|
|
428
401
|
end
|
|
429
402
|
|
|
430
403
|
def result_metric(array)
|
|
431
404
|
" #{array.join(' ')}"
|
|
432
405
|
end
|
|
433
406
|
|
|
434
|
-
def image_image(id, caption, metric=nil)
|
|
435
|
-
metrics = parse_metric(
|
|
436
|
-
puts
|
|
437
|
-
puts %Q
|
|
407
|
+
def image_image(id, caption, metric = nil)
|
|
408
|
+
metrics = parse_metric('idgxml', metric)
|
|
409
|
+
puts '<img>'
|
|
410
|
+
puts %Q(<Image href="file://#{@chapter.image(id).path.sub(%r{\A./}, '')}"#{metrics} />)
|
|
438
411
|
image_header id, caption
|
|
439
|
-
puts
|
|
412
|
+
puts '</img>'
|
|
440
413
|
end
|
|
441
414
|
|
|
442
415
|
def image_dummy(id, caption, lines)
|
|
443
|
-
puts
|
|
444
|
-
print %Q
|
|
416
|
+
puts '<img>'
|
|
417
|
+
print %Q(<pre aid:pstyle="dummyimage">)
|
|
445
418
|
lines.each do |line|
|
|
446
419
|
print detab(line)
|
|
447
420
|
print "\n"
|
|
448
421
|
end
|
|
449
|
-
print
|
|
422
|
+
print '</pre>'
|
|
450
423
|
image_header id, caption
|
|
451
|
-
puts
|
|
452
|
-
warn "
|
|
424
|
+
puts '</img>'
|
|
425
|
+
warn "image not bound: #{id}"
|
|
453
426
|
end
|
|
454
427
|
|
|
455
428
|
def image_header(id, caption)
|
|
429
|
+
return true unless caption.present?
|
|
456
430
|
if get_chap.nil?
|
|
457
|
-
puts %Q
|
|
431
|
+
puts %Q(<caption>#{I18n.t('image')}#{I18n.t('format_number_without_chapter', [@chapter.image(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
|
|
458
432
|
else
|
|
459
|
-
puts %Q
|
|
433
|
+
puts %Q(<caption>#{I18n.t('image')}#{I18n.t('format_number', [get_chap, @chapter.image(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
|
|
460
434
|
end
|
|
461
435
|
end
|
|
462
436
|
|
|
463
437
|
def texequation(lines)
|
|
464
438
|
@texblockequation += 1
|
|
465
|
-
puts %Q
|
|
439
|
+
puts %Q(<replace idref="texblock-#{@texblockequation}">)
|
|
466
440
|
puts '<pre>'
|
|
467
|
-
puts
|
|
441
|
+
puts lines.join("\n")
|
|
468
442
|
puts '</pre>'
|
|
469
443
|
puts '</replace>'
|
|
470
444
|
end
|
|
471
445
|
|
|
472
446
|
def table(lines, id = nil, caption = nil)
|
|
473
|
-
tablewidth = nil
|
|
447
|
+
tablewidth = @book.config['tableopt'] ? @book.config['tableopt'].split(',')[0].to_f / @book.config['pt_to_mm_unit'].to_f : nil
|
|
474
448
|
col = 0
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
end
|
|
478
|
-
puts "<table>"
|
|
449
|
+
|
|
450
|
+
puts '<table>'
|
|
479
451
|
rows = []
|
|
480
452
|
sepidx = nil
|
|
481
453
|
lines.each_with_index do |line, idx|
|
|
@@ -483,94 +455,90 @@ module ReVIEW
|
|
|
483
455
|
sepidx ||= idx
|
|
484
456
|
next
|
|
485
457
|
end
|
|
486
|
-
if tablewidth
|
|
487
|
-
rows.push(line.gsub(/\t\.\t/, "\
|
|
458
|
+
if tablewidth
|
|
459
|
+
rows.push(line.gsub(/\t\.\t/, "\tDUMMYCELLSPLITTER\t").gsub(/\t\.\.\t/, "\t.\t").gsub(/\t\.\Z/, "\tDUMMYCELLSPLITTER").gsub(/\t\.\.\Z/, "\t.").gsub(/\A\./, ''))
|
|
488
460
|
else
|
|
489
|
-
rows.push(line.gsub(/\t\.\t/, "\
|
|
461
|
+
rows.push(line.gsub(/\t\.\t/, "\t\t").gsub(/\t\.\.\t/, "\t.\t").gsub(/\t\.\Z/, "\t").gsub(/\t\.\.\Z/, "\t.").gsub(/\A\./, ''))
|
|
490
462
|
end
|
|
491
|
-
|
|
492
|
-
col =
|
|
463
|
+
col2 = rows[rows.length - 1].split(/\t/).length
|
|
464
|
+
col = col2 if col2 > col
|
|
493
465
|
end
|
|
494
466
|
|
|
495
467
|
cellwidth = []
|
|
496
|
-
|
|
468
|
+
if tablewidth
|
|
497
469
|
if @tsize.nil?
|
|
498
|
-
col.times {|n| cellwidth[n] = tablewidth / col }
|
|
470
|
+
col.times { |n| cellwidth[n] = tablewidth / col }
|
|
499
471
|
else
|
|
500
472
|
cellwidth = @tsize.split(/\s*,\s*/)
|
|
501
473
|
totallength = 0
|
|
502
474
|
cellwidth.size.times do |n|
|
|
503
|
-
cellwidth[n] = cellwidth[n].to_f / @book.config[
|
|
475
|
+
cellwidth[n] = cellwidth[n].to_f / @book.config['pt_to_mm_unit'].to_f
|
|
504
476
|
totallength += cellwidth[n]
|
|
505
477
|
warn "total length exceeds limit for table: #{id}" if totallength > tablewidth
|
|
506
478
|
end
|
|
507
479
|
if cellwidth.size < col
|
|
508
480
|
cw = (tablewidth - totallength) / (col - cellwidth.size)
|
|
509
481
|
warn "auto cell sizing exceeds limit for table: #{id}" if cw <= 0
|
|
510
|
-
(cellwidth.size..(col - 1)).each
|
|
511
|
-
cellwidth[i] = cw
|
|
512
|
-
end
|
|
482
|
+
(cellwidth.size..(col - 1)).each { |i| cellwidth[i] = cw }
|
|
513
483
|
end
|
|
514
484
|
end
|
|
515
485
|
end
|
|
516
486
|
|
|
517
487
|
begin
|
|
518
|
-
table_header id, caption
|
|
488
|
+
table_header id, caption if caption.present?
|
|
519
489
|
rescue KeyError
|
|
520
490
|
error "no such table: #{id}"
|
|
521
491
|
end
|
|
522
492
|
return if rows.empty?
|
|
523
493
|
|
|
524
494
|
if tablewidth.nil?
|
|
525
|
-
print
|
|
495
|
+
print '<tbody>'
|
|
526
496
|
else
|
|
527
|
-
print %Q
|
|
497
|
+
print %Q(<tbody xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/" aid:table="table" aid:trows="#{rows.length}" aid:tcols="#{col}">)
|
|
528
498
|
end
|
|
529
499
|
|
|
530
500
|
if sepidx
|
|
531
501
|
sepidx.times do |y|
|
|
532
502
|
if tablewidth.nil?
|
|
533
|
-
puts %Q
|
|
503
|
+
puts %Q(<tr type="header">#{rows.shift}</tr>)
|
|
534
504
|
else
|
|
535
505
|
i = 0
|
|
536
|
-
rows.shift.split(
|
|
537
|
-
print %Q
|
|
506
|
+
rows.shift.split("\t").each_with_index do |cell, x|
|
|
507
|
+
print %Q(<td xyh="#{x + 1},#{y + 1},#{sepidx}" aid:table="cell" aid:theader="1" aid:crows="1" aid:ccols="1" aid:ccolwidth="#{sprintf('%.3f', cellwidth[i])}">#{cell.sub('DUMMYCELLSPLITTER', '')}</td>)
|
|
538
508
|
i += 1
|
|
539
509
|
end
|
|
540
510
|
end
|
|
541
511
|
end
|
|
542
512
|
end
|
|
543
513
|
trputs(tablewidth, rows, cellwidth, sepidx)
|
|
544
|
-
puts
|
|
514
|
+
puts '</tbody></table>'
|
|
545
515
|
@tsize = nil
|
|
546
516
|
end
|
|
547
517
|
|
|
548
518
|
def trputs(tablewidth, rows, cellwidth, sepidx)
|
|
549
519
|
sepidx = 0 if sepidx.nil?
|
|
550
|
-
if tablewidth
|
|
551
|
-
lastline = rows.pop
|
|
552
|
-
rows.each {|row| puts %Q[<tr>#{row}</tr>] }
|
|
553
|
-
puts %Q[<tr type="lastline">#{lastline}</tr>] unless lastline.nil?
|
|
554
|
-
else
|
|
520
|
+
if tablewidth
|
|
555
521
|
rows.each_with_index do |row, y|
|
|
556
522
|
i = 0
|
|
557
|
-
row.split(
|
|
558
|
-
print %Q
|
|
523
|
+
row.split("\t").each_with_index do |cell, x|
|
|
524
|
+
print %Q(<td xyh="#{x + 1},#{y + 1 + sepidx},#{sepidx}" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="#{sprintf('%.3f', cellwidth[i])}">#{cell.sub('DUMMYCELLSPLITTER', '')}</td>)
|
|
559
525
|
i += 1
|
|
560
526
|
end
|
|
561
527
|
end
|
|
528
|
+
else
|
|
529
|
+
lastline = rows.pop
|
|
530
|
+
rows.each { |row| puts "<tr>#{row}</tr>" }
|
|
531
|
+
puts %Q(<tr type="lastline">#{lastline}</tr>) if lastline
|
|
562
532
|
end
|
|
563
533
|
end
|
|
564
534
|
|
|
565
535
|
def table_header(id, caption)
|
|
566
536
|
if id.nil?
|
|
567
|
-
puts %Q
|
|
537
|
+
puts %Q(<caption>#{compile_inline(caption)}</caption>)
|
|
538
|
+
elsif get_chap
|
|
539
|
+
puts %Q(<caption>#{I18n.t('table')}#{I18n.t('format_number', [get_chap, @chapter.table(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
|
|
568
540
|
else
|
|
569
|
-
|
|
570
|
-
puts %Q[<caption>#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}</caption>]
|
|
571
|
-
else
|
|
572
|
-
puts %Q[<caption>#{I18n.t("table")}#{I18n.t("format_number", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}</caption>]
|
|
573
|
-
end
|
|
541
|
+
puts %Q(<caption>#{I18n.t('table')}#{I18n.t('format_number_without_chapter', [@chapter.table(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
|
|
574
542
|
end
|
|
575
543
|
end
|
|
576
544
|
|
|
@@ -578,11 +546,11 @@ module ReVIEW
|
|
|
578
546
|
end
|
|
579
547
|
|
|
580
548
|
def tr(rows)
|
|
581
|
-
puts %Q
|
|
549
|
+
puts %Q(<tr>#{rows.join("\t")}</tr>)
|
|
582
550
|
end
|
|
583
551
|
|
|
584
552
|
def th(str)
|
|
585
|
-
%Q
|
|
553
|
+
%Q(<?dtp tablerow header?>#{str})
|
|
586
554
|
end
|
|
587
555
|
|
|
588
556
|
def td(str)
|
|
@@ -590,7 +558,7 @@ module ReVIEW
|
|
|
590
558
|
end
|
|
591
559
|
|
|
592
560
|
def table_end
|
|
593
|
-
print
|
|
561
|
+
print '<?dtp tablerow last?>'
|
|
594
562
|
end
|
|
595
563
|
|
|
596
564
|
def emtable(lines, caption = nil)
|
|
@@ -599,11 +567,11 @@ module ReVIEW
|
|
|
599
567
|
|
|
600
568
|
def imgtable(lines, id, caption = nil, metric = nil)
|
|
601
569
|
if @chapter.image(id).bound?
|
|
602
|
-
metrics = parse_metric(
|
|
603
|
-
puts
|
|
604
|
-
table_header id, caption
|
|
605
|
-
puts %Q
|
|
606
|
-
puts
|
|
570
|
+
metrics = parse_metric('idgxml', metric)
|
|
571
|
+
puts '<table>'
|
|
572
|
+
table_header id, caption if caption.present?
|
|
573
|
+
puts %Q(<imgtable><Image href="file://#{@chapter.image(id).path.sub(%r{\A./}, '')}"#{metrics} /></imgtable>)
|
|
574
|
+
puts '</table>'
|
|
607
575
|
else
|
|
608
576
|
warn "image not bound: #{id}" if @strict
|
|
609
577
|
image_dummy id, caption, lines
|
|
@@ -611,16 +579,15 @@ module ReVIEW
|
|
|
611
579
|
end
|
|
612
580
|
|
|
613
581
|
def comment(lines, comment = nil)
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
end
|
|
582
|
+
return true unless @book.config['draft']
|
|
583
|
+
lines ||= []
|
|
584
|
+
lines.unshift comment unless comment.blank?
|
|
585
|
+
str = lines.join("\n")
|
|
586
|
+
print "<msg>#{escape_html(str)}</msg>"
|
|
620
587
|
end
|
|
621
588
|
|
|
622
589
|
def inline_comment(str)
|
|
623
|
-
if @book.config[
|
|
590
|
+
if @book.config['draft']
|
|
624
591
|
%Q(<msg>#{escape_html(str)}</msg>)
|
|
625
592
|
else
|
|
626
593
|
''
|
|
@@ -632,11 +599,11 @@ module ReVIEW
|
|
|
632
599
|
end
|
|
633
600
|
|
|
634
601
|
def inline_fn(id)
|
|
635
|
-
%Q
|
|
602
|
+
%Q(<footnote>#{compile_inline(@chapter.footnote(id).content.strip)}</footnote>)
|
|
636
603
|
end
|
|
637
604
|
|
|
638
605
|
def compile_ruby(base, ruby)
|
|
639
|
-
%Q
|
|
606
|
+
%Q(<GroupRuby><aid:ruby xmlns:aid="http://ns.adobe.com/AdobeInDesign/3.0/"><aid:rb>#{escape_html(base.strip)}</aid:rb><aid:rt>#{escape_html(ruby.strip)}</aid:rt></aid:ruby></GroupRuby>)
|
|
640
607
|
end
|
|
641
608
|
|
|
642
609
|
def compile_kw(word, alt)
|
|
@@ -646,55 +613,55 @@ module ReVIEW
|
|
|
646
613
|
else escape_html(word)
|
|
647
614
|
end +
|
|
648
615
|
'</keyword>' +
|
|
649
|
-
%Q
|
|
616
|
+
%Q(<index value="#{escape_html(word)}" />) +
|
|
650
617
|
if alt
|
|
651
|
-
alt.split(/\s*,\s*/).collect! {|e| %Q
|
|
618
|
+
alt.split(/\s*,\s*/).collect! { |e| %Q(<index value="#{escape_html(e.strip)}" />) }.join
|
|
652
619
|
else
|
|
653
|
-
|
|
620
|
+
''
|
|
654
621
|
end
|
|
655
622
|
end
|
|
656
623
|
|
|
657
624
|
def compile_href(url, label)
|
|
658
|
-
%Q
|
|
625
|
+
%Q(<a linkurl='#{escape_html(url)}'>#{label.nil? ? escape_html(url) : escape_html(label)}</a>)
|
|
659
626
|
end
|
|
660
627
|
|
|
661
628
|
def inline_sup(str)
|
|
662
|
-
%Q
|
|
629
|
+
%Q(<sup>#{escape_html(str)}</sup>)
|
|
663
630
|
end
|
|
664
631
|
|
|
665
632
|
def inline_sub(str)
|
|
666
|
-
%Q
|
|
633
|
+
%Q(<sub>#{escape_html(str)}</sub>)
|
|
667
634
|
end
|
|
668
635
|
|
|
669
636
|
def inline_raw(str)
|
|
670
|
-
|
|
637
|
+
super(str).gsub('\\n', "\n")
|
|
671
638
|
end
|
|
672
639
|
|
|
673
640
|
def inline_hint(str)
|
|
674
|
-
if @book.config[
|
|
675
|
-
%Q
|
|
641
|
+
if @book.config['nolf']
|
|
642
|
+
%Q(<hint>#{escape_html(str)}</hint>)
|
|
676
643
|
else
|
|
677
|
-
%Q
|
|
644
|
+
%Q(\n<hint>#{escape_html(str)}</hint>)
|
|
678
645
|
end
|
|
679
646
|
end
|
|
680
647
|
|
|
681
648
|
def inline_maru(str)
|
|
682
649
|
if str =~ /\A\d+\Z/
|
|
683
|
-
sprintf(
|
|
650
|
+
sprintf('&#x%x;', 9311 + str.to_i)
|
|
684
651
|
elsif str =~ /\A[A-Z]\Z/
|
|
685
652
|
begin
|
|
686
|
-
sprintf(
|
|
653
|
+
sprintf('&#x%x;', 9398 + str.codepoints.to_a[0] - 65)
|
|
687
654
|
rescue NoMethodError
|
|
688
|
-
sprintf(
|
|
655
|
+
sprintf('&#x%x;', 9398 + str[0] - 65)
|
|
689
656
|
end
|
|
690
657
|
elsif str =~ /\A[a-z]\Z/
|
|
691
658
|
begin
|
|
692
|
-
sprintf(
|
|
659
|
+
sprintf('&#x%x;', 9392 + str.codepoints.to_a[0] - 65)
|
|
693
660
|
rescue NoMethodError
|
|
694
|
-
sprintf(
|
|
661
|
+
sprintf('&#x%x;', 9392 + str[0] - 65)
|
|
695
662
|
end
|
|
696
663
|
else
|
|
697
|
-
|
|
664
|
+
error "can't parse maru: #{str}"
|
|
698
665
|
end
|
|
699
666
|
end
|
|
700
667
|
|
|
@@ -738,42 +705,42 @@ module ReVIEW
|
|
|
738
705
|
|
|
739
706
|
def inline_icon(id)
|
|
740
707
|
begin
|
|
741
|
-
%Q
|
|
708
|
+
%Q(<Image href="file://#{@chapter.image(id).path.sub(%r{\A\./}, '')}" type="inline" />)
|
|
742
709
|
rescue
|
|
743
|
-
warn "
|
|
744
|
-
|
|
710
|
+
warn "image not bound: #{id}"
|
|
711
|
+
''
|
|
745
712
|
end
|
|
746
713
|
end
|
|
747
714
|
|
|
748
715
|
def inline_bou(str)
|
|
749
|
-
%Q
|
|
716
|
+
%Q(<bou>#{escape_html(str)}</bou>)
|
|
750
717
|
end
|
|
751
718
|
|
|
752
719
|
def inline_keytop(str)
|
|
753
|
-
%Q
|
|
720
|
+
%Q(<keytop>#{escape_html(str)}</keytop>)
|
|
754
721
|
end
|
|
755
722
|
|
|
756
723
|
def inline_labelref(idref)
|
|
757
|
-
%Q
|
|
724
|
+
%Q(<ref idref='#{escape_html(idref)}'>「#{I18n.t('label_marker')}#{escape_html(idref)}」</ref>) # FIXME: 節名とタイトルも込みで要出力
|
|
758
725
|
end
|
|
759
726
|
|
|
760
727
|
alias_method :inline_ref, :inline_labelref
|
|
761
728
|
|
|
762
729
|
def inline_pageref(idref)
|
|
763
|
-
%Q
|
|
730
|
+
%Q(<pageref idref='#{escape_html(idref)}'>●●</pageref>) # ページ番号を参照
|
|
764
731
|
end
|
|
765
732
|
|
|
766
733
|
def inline_balloon(str)
|
|
767
|
-
%Q
|
|
734
|
+
%Q(<balloon>#{escape_html(str).gsub(/@maru\[(\d+)\]/) { inline_maru($1) }}</balloon>)
|
|
768
735
|
end
|
|
769
736
|
|
|
770
737
|
def inline_uchar(str)
|
|
771
|
-
%Q
|
|
738
|
+
%Q(&#x#{str};)
|
|
772
739
|
end
|
|
773
740
|
|
|
774
741
|
def inline_m(str)
|
|
775
742
|
@texinlineequation += 1
|
|
776
|
-
%Q
|
|
743
|
+
%Q(<replace idref="texinline-#{@texinlineequation}"><pre>#{escape_html(str)}</pre></replace>)
|
|
777
744
|
end
|
|
778
745
|
|
|
779
746
|
def noindent
|
|
@@ -782,22 +749,22 @@ module ReVIEW
|
|
|
782
749
|
|
|
783
750
|
def linebreak
|
|
784
751
|
# FIXME: pが閉じちゃってるので一度戻らないといけないが、難しい…。
|
|
785
|
-
puts
|
|
752
|
+
puts '<br />'
|
|
786
753
|
end
|
|
787
754
|
|
|
788
755
|
def pagebreak
|
|
789
|
-
puts
|
|
756
|
+
puts '<pagebreak />'
|
|
790
757
|
end
|
|
791
758
|
|
|
792
|
-
def nonum_begin(level,
|
|
793
|
-
puts %Q
|
|
759
|
+
def nonum_begin(level, _label, caption)
|
|
760
|
+
puts %Q(<title aid:pstyle="h#{level}">#{compile_inline(caption)}</title><?dtp level="#{level}" section="#{escape_html(compile_inline(caption))}"?>)
|
|
794
761
|
end
|
|
795
762
|
|
|
796
763
|
def nonum_end(level)
|
|
797
764
|
end
|
|
798
765
|
|
|
799
|
-
def circle_begin(
|
|
800
|
-
puts %Q
|
|
766
|
+
def circle_begin(_level, _label, caption)
|
|
767
|
+
puts %Q(<title aid:pstyle="smallcircle">•#{compile_inline(caption)}</title>)
|
|
801
768
|
end
|
|
802
769
|
|
|
803
770
|
def circle_end(level)
|
|
@@ -805,233 +772,234 @@ module ReVIEW
|
|
|
805
772
|
|
|
806
773
|
def common_column_begin(type, caption)
|
|
807
774
|
@column += 1
|
|
808
|
-
a_id = %Q
|
|
775
|
+
a_id = %Q(id="column-#{@column}")
|
|
809
776
|
print "<#{type}column #{a_id}>"
|
|
810
|
-
puts %Q
|
|
777
|
+
puts %Q(<title aid:pstyle="#{type}column-title">#{compile_inline(caption)}</title><?dtp level="9" section="#{escape_html(compile_inline(caption))}"?>)
|
|
811
778
|
end
|
|
812
779
|
|
|
813
780
|
def common_column_end(type)
|
|
814
781
|
puts "</#{type}column>"
|
|
815
782
|
end
|
|
816
783
|
|
|
817
|
-
def column_begin(
|
|
818
|
-
common_column_begin(
|
|
784
|
+
def column_begin(_level, _label, caption)
|
|
785
|
+
common_column_begin('', caption)
|
|
819
786
|
end
|
|
820
787
|
|
|
821
|
-
def column_end(
|
|
822
|
-
common_column_end(
|
|
788
|
+
def column_end(_level)
|
|
789
|
+
common_column_end('')
|
|
823
790
|
end
|
|
824
791
|
|
|
825
|
-
def xcolumn_begin(
|
|
826
|
-
common_column_begin(
|
|
792
|
+
def xcolumn_begin(_level, _label, caption)
|
|
793
|
+
common_column_begin('x', caption)
|
|
827
794
|
end
|
|
828
795
|
|
|
829
|
-
def xcolumn_end(
|
|
830
|
-
common_column_end(
|
|
796
|
+
def xcolumn_end(_level)
|
|
797
|
+
common_column_end('x')
|
|
831
798
|
end
|
|
832
799
|
|
|
833
|
-
def world_begin(
|
|
834
|
-
common_column_begin(
|
|
800
|
+
def world_begin(_level, _label, caption)
|
|
801
|
+
common_column_begin('world', caption)
|
|
835
802
|
end
|
|
836
803
|
|
|
837
|
-
def world_end(
|
|
838
|
-
common_column_end(
|
|
804
|
+
def world_end(_level)
|
|
805
|
+
common_column_end('world')
|
|
839
806
|
end
|
|
840
807
|
|
|
841
|
-
def hood_begin(
|
|
842
|
-
common_column_begin(
|
|
808
|
+
def hood_begin(_level, _label, caption)
|
|
809
|
+
common_column_begin('hood', caption)
|
|
843
810
|
end
|
|
844
811
|
|
|
845
|
-
def hood_end(
|
|
846
|
-
common_column_end(
|
|
812
|
+
def hood_end(_level)
|
|
813
|
+
common_column_end('hood')
|
|
847
814
|
end
|
|
848
815
|
|
|
849
|
-
def edition_begin(
|
|
850
|
-
common_column_begin(
|
|
816
|
+
def edition_begin(_level, _label, caption)
|
|
817
|
+
common_column_begin('edition', caption)
|
|
851
818
|
end
|
|
852
819
|
|
|
853
|
-
def edition_end(
|
|
854
|
-
common_column_end(
|
|
820
|
+
def edition_end(_level)
|
|
821
|
+
common_column_end('edition')
|
|
855
822
|
end
|
|
856
823
|
|
|
857
|
-
def insideout_begin(
|
|
858
|
-
common_column_begin(
|
|
824
|
+
def insideout_begin(_level, _label, caption)
|
|
825
|
+
common_column_begin('insideout', caption)
|
|
859
826
|
end
|
|
860
827
|
|
|
861
|
-
def insideout_end(
|
|
862
|
-
common_column_end(
|
|
828
|
+
def insideout_end(_level)
|
|
829
|
+
common_column_end('insideout')
|
|
863
830
|
end
|
|
864
831
|
|
|
865
|
-
def ref_begin(
|
|
866
|
-
if
|
|
832
|
+
def ref_begin(_level, label, _caption)
|
|
833
|
+
if label
|
|
867
834
|
puts "<reference id='#{label}'>"
|
|
868
835
|
else
|
|
869
|
-
puts
|
|
836
|
+
puts '<reference>'
|
|
870
837
|
end
|
|
871
838
|
end
|
|
872
839
|
|
|
873
|
-
def ref_end(
|
|
874
|
-
puts
|
|
840
|
+
def ref_end(_level)
|
|
841
|
+
puts '</reference>'
|
|
875
842
|
end
|
|
876
843
|
|
|
877
|
-
def sup_begin(
|
|
878
|
-
if
|
|
844
|
+
def sup_begin(_level, label, _caption)
|
|
845
|
+
if label
|
|
879
846
|
puts "<supplement id='#{label}'>"
|
|
880
847
|
else
|
|
881
|
-
puts
|
|
848
|
+
puts '<supplement>'
|
|
882
849
|
end
|
|
883
850
|
end
|
|
884
851
|
|
|
885
|
-
def sup_end(
|
|
886
|
-
puts
|
|
852
|
+
def sup_end(_level)
|
|
853
|
+
puts '</supplement>'
|
|
887
854
|
end
|
|
888
855
|
|
|
889
856
|
def flushright(lines)
|
|
890
|
-
puts split_paragraph(lines).join.gsub(
|
|
857
|
+
puts split_paragraph(lines).join.gsub('<p>', %Q(<p align='right'>))
|
|
891
858
|
end
|
|
892
859
|
|
|
893
860
|
def centering(lines)
|
|
894
|
-
puts split_paragraph(lines).join.gsub(
|
|
861
|
+
puts split_paragraph(lines).join.gsub('<p>', %Q(<p align='center'>))
|
|
895
862
|
end
|
|
896
863
|
|
|
897
864
|
def captionblock(type, lines, caption, specialstyle = nil)
|
|
898
865
|
print "<#{type}>"
|
|
899
866
|
style = specialstyle.nil? ? "#{type}-title" : specialstyle
|
|
900
|
-
puts "<title aid:pstyle='#{style}'>#{compile_inline(caption)}</title>"
|
|
867
|
+
puts "<title aid:pstyle='#{style}'>#{compile_inline(caption)}</title>" if caption.present?
|
|
901
868
|
blocked_lines = split_paragraph(lines)
|
|
902
869
|
puts "#{blocked_lines.join}</#{type}>"
|
|
903
870
|
end
|
|
904
871
|
|
|
905
872
|
def note(lines, caption = nil)
|
|
906
|
-
captionblock(
|
|
873
|
+
captionblock('note', lines, caption)
|
|
907
874
|
end
|
|
908
875
|
|
|
909
876
|
def memo(lines, caption = nil)
|
|
910
|
-
captionblock(
|
|
877
|
+
captionblock('memo', lines, caption)
|
|
911
878
|
end
|
|
912
879
|
|
|
913
880
|
def tip(lines, caption = nil)
|
|
914
|
-
captionblock(
|
|
881
|
+
captionblock('tip', lines, caption)
|
|
915
882
|
end
|
|
916
883
|
|
|
917
884
|
def info(lines, caption = nil)
|
|
918
|
-
captionblock(
|
|
885
|
+
captionblock('info', lines, caption)
|
|
919
886
|
end
|
|
920
887
|
|
|
921
888
|
def planning(lines, caption = nil)
|
|
922
|
-
captionblock(
|
|
889
|
+
captionblock('planning', lines, caption)
|
|
923
890
|
end
|
|
924
891
|
|
|
925
892
|
def best(lines, caption = nil)
|
|
926
|
-
captionblock(
|
|
893
|
+
captionblock('best', lines, caption)
|
|
927
894
|
end
|
|
928
895
|
|
|
929
896
|
def important(lines, caption = nil)
|
|
930
|
-
captionblock(
|
|
897
|
+
captionblock('important', lines, caption)
|
|
931
898
|
end
|
|
932
899
|
|
|
933
900
|
def security(lines, caption = nil)
|
|
934
|
-
captionblock(
|
|
901
|
+
captionblock('security', lines, caption)
|
|
935
902
|
end
|
|
936
903
|
|
|
937
904
|
def caution(lines, caption = nil)
|
|
938
|
-
captionblock(
|
|
905
|
+
captionblock('caution', lines, caption)
|
|
939
906
|
end
|
|
940
907
|
|
|
941
908
|
def warning(lines, caption = nil)
|
|
942
|
-
captionblock(
|
|
909
|
+
captionblock('warning', lines, caption)
|
|
943
910
|
end
|
|
944
911
|
|
|
945
912
|
def term(lines)
|
|
946
|
-
captionblock(
|
|
913
|
+
captionblock('term', lines, nil)
|
|
947
914
|
end
|
|
948
915
|
|
|
949
916
|
def link(lines, caption = nil)
|
|
950
|
-
captionblock(
|
|
917
|
+
captionblock('link', lines, caption)
|
|
951
918
|
end
|
|
952
919
|
|
|
953
920
|
def notice(lines, caption = nil)
|
|
954
|
-
if caption
|
|
955
|
-
captionblock(
|
|
921
|
+
if caption
|
|
922
|
+
captionblock('notice-t', lines, caption, 'notice-title')
|
|
956
923
|
else
|
|
957
|
-
captionblock(
|
|
924
|
+
captionblock('notice', lines, nil)
|
|
958
925
|
end
|
|
959
926
|
end
|
|
960
927
|
|
|
961
928
|
def point(lines, caption = nil)
|
|
962
|
-
if caption
|
|
963
|
-
captionblock(
|
|
929
|
+
if caption
|
|
930
|
+
captionblock('point-t', lines, caption, 'point-title')
|
|
964
931
|
else
|
|
965
|
-
captionblock(
|
|
932
|
+
captionblock('point', lines, nil)
|
|
966
933
|
end
|
|
967
934
|
end
|
|
968
935
|
|
|
969
936
|
def shoot(lines, caption = nil)
|
|
970
|
-
if caption
|
|
971
|
-
captionblock(
|
|
937
|
+
if caption
|
|
938
|
+
captionblock('shoot-t', lines, caption, 'shoot-title')
|
|
972
939
|
else
|
|
973
|
-
captionblock(
|
|
940
|
+
captionblock('shoot', lines, nil)
|
|
974
941
|
end
|
|
975
942
|
end
|
|
976
943
|
|
|
977
944
|
def reference(lines)
|
|
978
|
-
captionblock(
|
|
945
|
+
captionblock('reference', lines, nil)
|
|
979
946
|
end
|
|
980
947
|
|
|
981
948
|
def practice(lines)
|
|
982
|
-
captionblock(
|
|
949
|
+
captionblock('practice', lines, nil)
|
|
983
950
|
end
|
|
984
951
|
|
|
985
952
|
def expert(lines)
|
|
986
|
-
captionblock(
|
|
953
|
+
captionblock('expert', lines, nil)
|
|
987
954
|
end
|
|
988
955
|
|
|
989
956
|
def syntaxblock(type, lines, caption)
|
|
990
|
-
if caption.
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
titleopentag = %Q[floattitle type="insn"]
|
|
997
|
-
titleclosetag = "floattitle"
|
|
957
|
+
if caption.present?
|
|
958
|
+
titleopentag = %Q(caption aid:pstyle="#{type}-title")
|
|
959
|
+
titleclosetag = 'caption'
|
|
960
|
+
if type == 'insn'
|
|
961
|
+
titleopentag = %Q(floattitle type="insn")
|
|
962
|
+
titleclosetag = 'floattitle'
|
|
998
963
|
end
|
|
999
|
-
puts %Q
|
|
964
|
+
puts %Q(<#{type}><#{titleopentag}>#{compile_inline(caption)}</#{titleclosetag}>)
|
|
965
|
+
else
|
|
966
|
+
puts "<#{type}>"
|
|
1000
967
|
end
|
|
968
|
+
|
|
1001
969
|
no = 1
|
|
1002
970
|
lines.each do |line|
|
|
1003
|
-
|
|
1004
|
-
print %Q
|
|
1005
|
-
print %Q
|
|
1006
|
-
print %Q
|
|
1007
|
-
print
|
|
971
|
+
if @book.config['listinfo']
|
|
972
|
+
print %Q(<listinfo line="#{no}")
|
|
973
|
+
print %Q( begin="1") if no == 1
|
|
974
|
+
print %Q( end="#{no}") if no == lines.size
|
|
975
|
+
print '>'
|
|
1008
976
|
end
|
|
1009
977
|
print detab(line)
|
|
1010
978
|
print "\n"
|
|
1011
|
-
print
|
|
979
|
+
print '</listinfo>' if @book.config['listinfo']
|
|
1012
980
|
no += 1
|
|
1013
981
|
end
|
|
1014
982
|
puts "</#{type}>"
|
|
1015
983
|
end
|
|
1016
984
|
|
|
1017
985
|
def insn(lines, caption = nil)
|
|
1018
|
-
syntaxblock(
|
|
986
|
+
syntaxblock('insn', lines, caption)
|
|
1019
987
|
end
|
|
1020
988
|
|
|
1021
989
|
def box(lines, caption = nil)
|
|
1022
|
-
syntaxblock(
|
|
990
|
+
syntaxblock('box', lines, caption)
|
|
1023
991
|
end
|
|
1024
992
|
|
|
1025
|
-
def indepimage(id, caption=nil, metric=nil)
|
|
1026
|
-
metrics = parse_metric(
|
|
1027
|
-
puts
|
|
993
|
+
def indepimage(_lines, id, caption = nil, metric = nil)
|
|
994
|
+
metrics = parse_metric('idgxml', metric)
|
|
995
|
+
puts '<img>'
|
|
1028
996
|
begin
|
|
1029
|
-
puts %Q
|
|
997
|
+
puts %Q(<Image href="file://#{@chapter.image(id).path.sub(%r{\A\./}, '')}"#{metrics} />)
|
|
1030
998
|
rescue
|
|
1031
|
-
warn %Q
|
|
999
|
+
warn %Q(image not bound: #{id})
|
|
1032
1000
|
end
|
|
1033
|
-
puts %Q
|
|
1034
|
-
puts
|
|
1001
|
+
puts %Q(<caption>#{compile_inline(caption)}</caption>) if caption.present?
|
|
1002
|
+
puts '</img>'
|
|
1035
1003
|
end
|
|
1036
1004
|
|
|
1037
1005
|
alias_method :numberlessimage, :indepimage
|
|
@@ -1046,11 +1014,11 @@ module ReVIEW
|
|
|
1046
1014
|
end
|
|
1047
1015
|
|
|
1048
1016
|
def hr
|
|
1049
|
-
print
|
|
1017
|
+
print '<hr />'
|
|
1050
1018
|
end
|
|
1051
1019
|
|
|
1052
1020
|
def bpo(lines)
|
|
1053
|
-
puts %Q
|
|
1021
|
+
puts %Q(<bpo>#{lines.join("\n")}</bpo>)
|
|
1054
1022
|
end
|
|
1055
1023
|
|
|
1056
1024
|
def inline_dtp(str)
|
|
@@ -1058,17 +1026,17 @@ module ReVIEW
|
|
|
1058
1026
|
end
|
|
1059
1027
|
|
|
1060
1028
|
def inline_code(str)
|
|
1061
|
-
%Q
|
|
1029
|
+
%Q(<tt type='inline-code'>#{escape_html(str)}</tt>)
|
|
1062
1030
|
end
|
|
1063
1031
|
|
|
1064
|
-
def inline_br(
|
|
1032
|
+
def inline_br(_str)
|
|
1065
1033
|
"\n"
|
|
1066
1034
|
end
|
|
1067
1035
|
|
|
1068
1036
|
def rawblock(lines)
|
|
1069
1037
|
no = 1
|
|
1070
1038
|
lines.each do |l|
|
|
1071
|
-
print l.gsub(
|
|
1039
|
+
print l.gsub('<', '<').gsub('>', '>').gsub('"', '"').gsub('&', '&')
|
|
1072
1040
|
print "\n" unless lines.length == no
|
|
1073
1041
|
no += 1
|
|
1074
1042
|
end
|
|
@@ -1079,17 +1047,17 @@ module ReVIEW
|
|
|
1079
1047
|
end
|
|
1080
1048
|
|
|
1081
1049
|
def inline_chapref(id)
|
|
1082
|
-
chs = [
|
|
1083
|
-
if @book.config[
|
|
1084
|
-
|
|
1085
|
-
if
|
|
1086
|
-
error
|
|
1050
|
+
chs = ['', '「', '」']
|
|
1051
|
+
if @book.config['chapref']
|
|
1052
|
+
chs2 = @book.config['chapref'].split(',')
|
|
1053
|
+
if chs2.size != 3
|
|
1054
|
+
error '--chapsplitter must have exactly 3 parameters with comma.'
|
|
1087
1055
|
else
|
|
1088
|
-
chs =
|
|
1056
|
+
chs = chs2
|
|
1089
1057
|
end
|
|
1090
1058
|
end
|
|
1091
1059
|
s = "#{chs[0]}#{@book.chapter_index.number(id)}#{chs[1]}#{@book.chapter_index.title(id)}#{chs[2]}"
|
|
1092
|
-
if @book.config[
|
|
1060
|
+
if @book.config['chapterlink']
|
|
1093
1061
|
%Q(<link href="#{id}">#{s}</link>)
|
|
1094
1062
|
else
|
|
1095
1063
|
s
|
|
@@ -1100,7 +1068,7 @@ module ReVIEW
|
|
|
1100
1068
|
end
|
|
1101
1069
|
|
|
1102
1070
|
def inline_chap(id)
|
|
1103
|
-
if @book.config[
|
|
1071
|
+
if @book.config['chapterlink']
|
|
1104
1072
|
%Q(<link href="#{id}">#{@book.chapter_index.number(id)}</link>)
|
|
1105
1073
|
else
|
|
1106
1074
|
@book.chapter_index.number(id)
|
|
@@ -1112,7 +1080,7 @@ module ReVIEW
|
|
|
1112
1080
|
|
|
1113
1081
|
def inline_title(id)
|
|
1114
1082
|
title = super
|
|
1115
|
-
if @book.config[
|
|
1083
|
+
if @book.config['chapterlink']
|
|
1116
1084
|
%Q(<link href="#{id}">#{title}</link>)
|
|
1117
1085
|
else
|
|
1118
1086
|
title
|
|
@@ -1123,31 +1091,29 @@ module ReVIEW
|
|
|
1123
1091
|
end
|
|
1124
1092
|
|
|
1125
1093
|
def source_header(caption)
|
|
1126
|
-
puts
|
|
1127
|
-
puts %Q
|
|
1094
|
+
puts '<source>'
|
|
1095
|
+
puts %Q(<caption>#{compile_inline(caption)}</caption>) if caption.present?
|
|
1128
1096
|
end
|
|
1129
1097
|
|
|
1130
|
-
def source_body(lines,
|
|
1131
|
-
puts
|
|
1098
|
+
def source_body(lines, _lang)
|
|
1099
|
+
puts '<pre>'
|
|
1132
1100
|
codelines_body(lines)
|
|
1133
|
-
puts
|
|
1101
|
+
puts '</pre></source>'
|
|
1134
1102
|
end
|
|
1135
1103
|
|
|
1136
1104
|
def bibpaper(lines, id, caption)
|
|
1137
1105
|
bibpaper_header id, caption
|
|
1138
|
-
unless lines.empty?
|
|
1139
|
-
|
|
1140
|
-
end
|
|
1141
|
-
puts %Q(</bibitem>)
|
|
1106
|
+
bibpaper_bibpaper id, caption, lines unless lines.empty?
|
|
1107
|
+
puts '</bibitem>'
|
|
1142
1108
|
end
|
|
1143
1109
|
|
|
1144
1110
|
def bibpaper_header(id, caption)
|
|
1145
1111
|
puts %Q(<bibitem id="bib-#{id}">)
|
|
1146
|
-
puts "<caption><span type='bibno'>[#{@chapter.bibpaper(id).number}] </span>#{compile_inline(caption)}</caption>"
|
|
1112
|
+
puts "<caption><span type='bibno'>[#{@chapter.bibpaper(id).number}] </span>#{compile_inline(caption)}</caption>" if caption.present?
|
|
1147
1113
|
end
|
|
1148
1114
|
|
|
1149
|
-
def bibpaper_bibpaper(
|
|
1150
|
-
print split_paragraph(lines).join
|
|
1115
|
+
def bibpaper_bibpaper(_id, _caption, lines)
|
|
1116
|
+
print split_paragraph(lines).join
|
|
1151
1117
|
end
|
|
1152
1118
|
|
|
1153
1119
|
def inline_bib(id)
|
|
@@ -1157,11 +1123,11 @@ module ReVIEW
|
|
|
1157
1123
|
def inline_hd_chap(chap, id)
|
|
1158
1124
|
if chap.number
|
|
1159
1125
|
n = chap.headline_index.number(id)
|
|
1160
|
-
if @book.config[
|
|
1161
|
-
return I18n.t(
|
|
1126
|
+
if @book.config['secnolevel'] >= n.split('.').size
|
|
1127
|
+
return I18n.t('chapter_quote', "#{n} #{compile_inline(chap.headline(id).caption)}")
|
|
1162
1128
|
end
|
|
1163
1129
|
end
|
|
1164
|
-
I18n.t(
|
|
1130
|
+
I18n.t('chapter_quote', compile_inline(chap.headline(id).caption))
|
|
1165
1131
|
end
|
|
1166
1132
|
|
|
1167
1133
|
def inline_recipe(id)
|
|
@@ -1174,9 +1140,7 @@ module ReVIEW
|
|
|
1174
1140
|
end
|
|
1175
1141
|
|
|
1176
1142
|
def image_ext
|
|
1177
|
-
|
|
1143
|
+
'eps'
|
|
1178
1144
|
end
|
|
1179
|
-
|
|
1180
1145
|
end
|
|
1181
|
-
|
|
1182
1146
|
end # module ReVIEW
|