review 4.2.0 → 5.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 +4 -4
- data/.github/workflows/ruby-win.yml +11 -5
- data/.rubocop.yml +113 -24
- data/NEWS.ja.md +94 -0
- data/NEWS.md +94 -0
- data/bin/review-catalog-converter +1 -1
- data/bin/review-check +2 -4
- data/bin/review-checkdep +1 -1
- data/bin/review-compile +8 -14
- data/bin/review-validate +1 -1
- data/doc/config.yml.sample +4 -1
- data/doc/config.yml.sample-simple +1 -1
- data/doc/format.ja.md +83 -4
- data/doc/format.md +84 -7
- data/doc/makeindex.ja.md +2 -2
- data/doc/quickstart.ja.md +3 -3
- data/doc/quickstart.md +2 -2
- data/lib/epubmaker/content.rb +3 -2
- data/lib/epubmaker/epubcommon.rb +33 -25
- data/lib/epubmaker/epubv2.rb +5 -6
- data/lib/epubmaker/epubv3.rb +20 -18
- data/lib/review/book.rb +2 -2
- data/lib/review/book/base.rb +61 -25
- data/lib/review/book/bib.rb +21 -0
- data/lib/review/book/book_unit.rb +155 -0
- data/lib/review/book/chapter.rb +30 -26
- data/lib/review/book/index.rb +23 -185
- data/lib/review/book/index/item.rb +7 -1
- data/lib/review/book/part.rb +21 -9
- data/lib/review/book/volume.rb +1 -1
- data/lib/review/builder.rb +68 -13
- data/lib/review/catalog.rb +2 -2
- data/lib/review/compiler.rb +159 -73
- data/lib/review/configure.rb +22 -1
- data/lib/review/converter.rb +1 -1
- data/lib/review/epub2html.rb +6 -1
- data/lib/review/epubmaker.rb +12 -23
- data/lib/review/htmlbuilder.rb +36 -7
- data/lib/review/htmlutils.rb +7 -10
- data/lib/review/i18n.rb +1 -1
- data/lib/review/idgxmlbuilder.rb +51 -6
- data/lib/review/idgxmlmaker.rb +9 -14
- data/lib/review/index_builder.rb +653 -0
- data/lib/review/init.rb +5 -13
- data/lib/review/latexbuilder.rb +65 -4
- data/lib/review/logger.rb +2 -2
- data/lib/review/makerhelper.rb +11 -0
- data/lib/review/markdownbuilder.rb +19 -1
- data/lib/review/pdfmaker.rb +17 -36
- data/lib/review/plaintextbuilder.rb +48 -2
- data/lib/review/preprocessor.rb +5 -5
- data/lib/review/rstbuilder.rb +25 -6
- data/lib/review/sec_counter.rb +13 -0
- data/lib/review/textmaker.rb +4 -12
- data/lib/review/tocprinter.rb +2 -3
- data/lib/review/topbuilder.rb +26 -0
- data/lib/review/update.rb +7 -7
- data/lib/review/version.rb +1 -1
- data/lib/review/volumeprinter.rb +2 -3
- data/lib/review/webmaker.rb +9 -20
- data/review.gemspec +2 -2
- data/samples/sample-book/src/config.yml +1 -1
- data/samples/syntax-book/Gemfile +1 -1
- data/samples/syntax-book/config.yml +1 -1
- data/templates/latex/config.erb +27 -23
- data/templates/latex/review-jlreq/README.md +3 -1
- data/templates/latex/review-jlreq/review-base.sty +31 -15
- data/templates/latex/review-jlreq/review-jlreq.cls +8 -24
- data/templates/latex/review-jsbook/README.md +7 -5
- data/templates/latex/review-jsbook/review-base.sty +34 -16
- data/templates/latex/review-jsbook/review-jsbook.cls +4 -2
- data/templates/web/html/layout-html5.html.erb +1 -1
- data/test/assets/test_template.tex +3 -3
- data/test/assets/test_template_backmatter.tex +3 -3
- data/test/book_test_helper.rb +11 -5
- data/test/test_book.rb +54 -63
- data/test/test_book_chapter.rb +93 -52
- data/test/test_builder.rb +24 -15
- data/test/test_converter.rb +1 -0
- data/test/test_epub3maker.rb +2 -2
- data/test/test_epubmaker.rb +8 -0
- data/test/test_helper.rb +4 -1
- data/test/test_htmlbuilder.rb +627 -56
- data/test/test_htmlutils.rb +0 -12
- data/test/test_i18n.rb +33 -33
- data/test/test_idgxmlbuilder.rb +358 -11
- data/test/test_idgxmlmaker_cmd.rb +1 -1
- data/test/test_index.rb +62 -52
- data/test/test_indexbuilder.rb +52 -0
- data/test/test_latexbuilder.rb +547 -10
- data/test/test_latexbuilder_v2.rb +43 -5
- data/test/test_logger.rb +7 -7
- data/test/test_makerhelper.rb +0 -12
- data/test/test_markdownbuilder.rb +3 -0
- data/test/test_pdfmaker.rb +13 -12
- data/test/test_pdfmaker_cmd.rb +1 -1
- data/test/test_plaintextbuilder.rb +422 -7
- data/test/test_review_ext.rb +2 -1
- data/test/test_rstbuilder.rb +25 -1
- data/test/test_sec_counter.rb +156 -0
- data/test/test_textmaker_cmd.rb +1 -1
- data/test/test_topbuilder.rb +187 -10
- data/test/test_update.rb +10 -10
- data/test/test_webtocprinter.rb +12 -12
- data/vendor/gentombow/LICENSE +1 -1
- data/vendor/gentombow/Makefile +0 -1
- data/vendor/gentombow/bounddvi-en.pdf +0 -0
- data/vendor/gentombow/bounddvi-en.tex +1 -0
- data/vendor/gentombow/bounddvi.pdf +0 -0
- data/vendor/gentombow/bounddvi.sty +30 -7
- data/vendor/gentombow/bounddvi.tex +1 -0
- data/vendor/gentombow/create_archive.sh +1 -0
- data/vendor/gentombow/gentombow-ja.pdf +0 -0
- data/vendor/gentombow/gentombow-ja.tex +9 -0
- data/vendor/gentombow/gentombow.pdf +0 -0
- data/vendor/gentombow/gentombow.sty +32 -10
- data/vendor/gentombow/gentombow.tex +8 -0
- data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
- data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
- data/vendor/jsclasses/Makefile +3 -2
- data/vendor/jsclasses/create_archive.sh +5 -5
- data/vendor/jsclasses/jis/Makefile +3 -2
- data/vendor/jsclasses/jis/jsarticle.cls +22 -18
- data/vendor/jsclasses/jis/jsbook.cls +22 -18
- data/vendor/jsclasses/jis/jsclasses.dtx +94 -13
- data/vendor/jsclasses/jis/jsclasses.ins +15 -5
- data/vendor/jsclasses/jis/jslogo.ins +9 -0
- data/vendor/jsclasses/jis/jslogo.sty +1 -13
- data/vendor/jsclasses/jis/jspf.cls +22 -18
- data/vendor/jsclasses/jis/jsreport.cls +22 -18
- data/vendor/jsclasses/jis/jsverb.ins +9 -0
- data/vendor/jsclasses/jis/jsverb.sty +1 -13
- data/vendor/jsclasses/jis/kiyou.cls +22 -18
- data/vendor/jsclasses/jis/minijs.sty +65 -22
- data/vendor/jsclasses/jis/okumacro.ins +9 -0
- data/vendor/jsclasses/jis/okumacro.sty +1 -13
- data/vendor/jsclasses/jis/okuverb.ins +9 -0
- data/vendor/jsclasses/jis/okuverb.sty +1 -13
- data/vendor/jsclasses/jis/winjis.sty +23 -19
- data/vendor/jsclasses/jsarticle.cls +22 -18
- data/vendor/jsclasses/jsbook.cls +22 -18
- data/vendor/jsclasses/jsclasses.dtx +94 -13
- data/vendor/jsclasses/jsclasses.ins +15 -5
- data/vendor/jsclasses/jsclasses.pdf +0 -0
- data/vendor/jsclasses/jslogo.ins +9 -0
- data/vendor/jsclasses/jslogo.pdf +0 -0
- data/vendor/jsclasses/jslogo.sty +1 -13
- data/vendor/jsclasses/jspf.cls +22 -18
- data/vendor/jsclasses/jsreport.cls +22 -18
- data/vendor/jsclasses/jsverb.ins +9 -0
- data/vendor/jsclasses/jsverb.pdf +0 -0
- data/vendor/jsclasses/jsverb.sty +1 -13
- data/vendor/jsclasses/kiyou.cls +22 -18
- data/vendor/jsclasses/minijs.sty +68 -22
- data/vendor/jsclasses/okumacro.ins +9 -0
- data/vendor/jsclasses/okumacro.pdf +0 -0
- data/vendor/jsclasses/okumacro.sty +1 -13
- data/vendor/jsclasses/okuverb.ins +9 -0
- data/vendor/jsclasses/okuverb.pdf +0 -0
- data/vendor/jsclasses/okuverb.sty +1 -13
- data/vendor/jsclasses/tests/relfont.tex +10 -0
- data/vendor/jsclasses/winjis.sty +23 -19
- metadata +14 -6
- data/.rubocop_todo.yml +0 -7
- data/lib/review/book/compilable.rb +0 -174
data/lib/review/configure.rb
CHANGED
|
@@ -18,7 +18,7 @@ module ReVIEW
|
|
|
18
18
|
'bookname' => 'book', # it defines epub file name also
|
|
19
19
|
'booktitle' => 'Re:VIEW Sample Book',
|
|
20
20
|
'title' => nil,
|
|
21
|
-
'aut' =>
|
|
21
|
+
'aut' => nil, # author
|
|
22
22
|
'prt' => nil, # printer(publisher)
|
|
23
23
|
'asn' => nil, # associated name
|
|
24
24
|
'ant' => nil, # bibliographic antecedent
|
|
@@ -64,6 +64,7 @@ module ReVIEW
|
|
|
64
64
|
'bib_file' => 'bib.re',
|
|
65
65
|
'words_file' => nil,
|
|
66
66
|
'colophon_order' => %w[aut csl trl dsr ill cov edt pbl contact prt],
|
|
67
|
+
'chapterlink' => true,
|
|
67
68
|
'externallink' => true,
|
|
68
69
|
'join_lines_by_lang' => nil, # experimental. default should be nil
|
|
69
70
|
'table_row_separator' => 'tabs',
|
|
@@ -118,6 +119,26 @@ module ReVIEW
|
|
|
118
119
|
conf
|
|
119
120
|
end
|
|
120
121
|
|
|
122
|
+
def self.create(maker: nil, yamlfile: nil, config: nil)
|
|
123
|
+
conf = self.values
|
|
124
|
+
conf.maker = maker
|
|
125
|
+
|
|
126
|
+
if yamlfile
|
|
127
|
+
begin
|
|
128
|
+
loader = ReVIEW::YAMLLoader.new
|
|
129
|
+
conf.deep_merge!(loader.load_file(yamlfile))
|
|
130
|
+
rescue => e
|
|
131
|
+
error "yaml error #{e.message}"
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
# YAML configs will be overridden by command line options.
|
|
135
|
+
if config
|
|
136
|
+
conf.deep_merge!(config)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
conf
|
|
140
|
+
end
|
|
141
|
+
|
|
121
142
|
def [](key)
|
|
122
143
|
maker = self.maker
|
|
123
144
|
if maker && self.key?(maker) && self.fetch(maker) && self.fetch(maker).key?(key)
|
data/lib/review/converter.rb
CHANGED
data/lib/review/epub2html.rb
CHANGED
|
@@ -8,10 +8,15 @@
|
|
|
8
8
|
|
|
9
9
|
require 'zip'
|
|
10
10
|
require 'rexml/document'
|
|
11
|
-
require 'cgi'
|
|
12
11
|
require 'optparse'
|
|
13
12
|
require 'review/version'
|
|
14
13
|
|
|
14
|
+
begin
|
|
15
|
+
require 'cgi/escape'
|
|
16
|
+
rescue
|
|
17
|
+
require 'cgi/util'
|
|
18
|
+
end
|
|
19
|
+
|
|
15
20
|
module ReVIEW
|
|
16
21
|
class Epub2Html
|
|
17
22
|
def self.execute(*args)
|
data/lib/review/epubmaker.rb
CHANGED
|
@@ -18,7 +18,6 @@ require 'review/version'
|
|
|
18
18
|
require 'review/htmltoc'
|
|
19
19
|
require 'review/htmlbuilder'
|
|
20
20
|
|
|
21
|
-
require 'review/yamlloader'
|
|
22
21
|
require 'rexml/document'
|
|
23
22
|
require 'rexml/streamlistener'
|
|
24
23
|
require 'epubmaker'
|
|
@@ -52,18 +51,9 @@ module ReVIEW
|
|
|
52
51
|
end
|
|
53
52
|
|
|
54
53
|
def load_yaml(yamlfile)
|
|
55
|
-
loader = ReVIEW::YAMLLoader.new
|
|
56
|
-
@config = ReVIEW::Configure.values
|
|
57
|
-
begin
|
|
58
|
-
@config.deep_merge!(loader.load_file(yamlfile))
|
|
59
|
-
rescue => e
|
|
60
|
-
error "yaml error #{e.message}"
|
|
61
|
-
end
|
|
62
|
-
|
|
63
54
|
@producer = Producer.new(@config)
|
|
64
55
|
@producer.load(yamlfile)
|
|
65
56
|
@config = @producer.config
|
|
66
|
-
@config.maker = 'epubmaker'
|
|
67
57
|
end
|
|
68
58
|
|
|
69
59
|
def self.execute(*args)
|
|
@@ -94,13 +84,13 @@ module ReVIEW
|
|
|
94
84
|
end
|
|
95
85
|
|
|
96
86
|
def execute(*args)
|
|
97
|
-
@config = ReVIEW::Configure.values
|
|
98
|
-
@config.maker = 'epubmaker'
|
|
99
87
|
cmd_config, yamlfile, exportfile = parse_opts(args)
|
|
100
88
|
error "#{yamlfile} not found." unless File.exist?(yamlfile)
|
|
101
89
|
|
|
90
|
+
@config = ReVIEW::Configure.create(maker: 'epubmaker',
|
|
91
|
+
yamlfile: yamlfile,
|
|
92
|
+
config: cmd_config)
|
|
102
93
|
load_yaml(yamlfile)
|
|
103
|
-
@config.deep_merge!(cmd_config)
|
|
104
94
|
update_log_level
|
|
105
95
|
log("Loaded yaml file (#{yamlfile}).")
|
|
106
96
|
|
|
@@ -252,7 +242,7 @@ module ReVIEW
|
|
|
252
242
|
if @config['epubmaker']['verify_target_images'].present?
|
|
253
243
|
@config['epubmaker']['force_include_images'].each do |file|
|
|
254
244
|
unless File.exist?(file)
|
|
255
|
-
if file !~ /\
|
|
245
|
+
if file !~ /\Ahttps?:/
|
|
256
246
|
warn "#{file} is not found, skip."
|
|
257
247
|
end
|
|
258
248
|
next
|
|
@@ -307,8 +297,7 @@ module ReVIEW
|
|
|
307
297
|
|
|
308
298
|
basedir = File.dirname(yamlfile)
|
|
309
299
|
base_path = Pathname.new(basedir)
|
|
310
|
-
book = ReVIEW::Book.
|
|
311
|
-
book.config = @config
|
|
300
|
+
book = ReVIEW::Book::Base.new(basedir, config: @config)
|
|
312
301
|
@converter = ReVIEW::Converter.new(book, ReVIEW::HTMLBuilder.new)
|
|
313
302
|
@compile_errors = nil
|
|
314
303
|
|
|
@@ -340,9 +329,9 @@ module ReVIEW
|
|
|
340
329
|
File.open(File.join(basetmpdir, htmlfile), 'w') do |f|
|
|
341
330
|
@body = ''
|
|
342
331
|
@body << %Q(<div class="part">\n)
|
|
343
|
-
@body << %Q(<h1 class="part-number">#{
|
|
332
|
+
@body << %Q(<h1 class="part-number">#{h(ReVIEW::I18n.t('part', part.number))}</h1>\n)
|
|
344
333
|
if part.name.strip.present?
|
|
345
|
-
@body << %Q(<h2 class="part-title">#{
|
|
334
|
+
@body << %Q(<h2 class="part-title">#{h(part.name.strip)}</h2>\n)
|
|
346
335
|
end
|
|
347
336
|
@body << %Q(</div>\n)
|
|
348
337
|
|
|
@@ -563,19 +552,19 @@ module ReVIEW
|
|
|
563
552
|
|
|
564
553
|
def build_titlepage(basetmpdir, htmlfile)
|
|
565
554
|
# TODO: should be created via epubcommon
|
|
566
|
-
@title =
|
|
555
|
+
@title = h(@config.name_of('booktitle'))
|
|
567
556
|
File.open(File.join(basetmpdir, htmlfile), 'w') do |f|
|
|
568
557
|
@body = ''
|
|
569
558
|
@body << %Q(<div class="titlepage">\n)
|
|
570
|
-
@body << %Q(<h1 class="tp-title">#{
|
|
559
|
+
@body << %Q(<h1 class="tp-title">#{h(@config.name_of('booktitle'))}</h1>\n)
|
|
571
560
|
if @config['subtitle']
|
|
572
|
-
@body << %Q(<h2 class="tp-subtitle">#{
|
|
561
|
+
@body << %Q(<h2 class="tp-subtitle">#{h(@config.name_of('subtitle'))}</h2>\n)
|
|
573
562
|
end
|
|
574
563
|
if @config['aut']
|
|
575
|
-
@body << %Q(<h2 class="tp-author">#{
|
|
564
|
+
@body << %Q(<h2 class="tp-author">#{h(@config.names_of('aut').join(ReVIEW::I18n.t('names_splitter')))}</h2>\n)
|
|
576
565
|
end
|
|
577
566
|
if @config['pbl']
|
|
578
|
-
@body << %Q(<h3 class="tp-publisher">#{
|
|
567
|
+
@body << %Q(<h3 class="tp-publisher">#{h(@config.names_of('pbl').join(ReVIEW::I18n.t('names_splitter')))}</h3>\n)
|
|
579
568
|
end
|
|
580
569
|
@body << '</div>'
|
|
581
570
|
|
data/lib/review/htmlbuilder.rb
CHANGED
|
@@ -41,10 +41,6 @@ module ReVIEW
|
|
|
41
41
|
".#{@book.config['htmlext']}"
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
def builder_init
|
|
45
|
-
end
|
|
46
|
-
private :builder_init
|
|
47
|
-
|
|
48
44
|
def builder_init_file
|
|
49
45
|
@noindent = nil
|
|
50
46
|
@ol_num = nil
|
|
@@ -92,7 +88,7 @@ module ReVIEW
|
|
|
92
88
|
def result
|
|
93
89
|
# default XHTML header/footer
|
|
94
90
|
@title = strip_html(compile_inline(@chapter.title))
|
|
95
|
-
@body = @output.string
|
|
91
|
+
@body = solve_nest(@output.string)
|
|
96
92
|
@language = @book.config['language']
|
|
97
93
|
@stylesheets = @book.config['stylesheet']
|
|
98
94
|
@next = @chapter.next_chapter
|
|
@@ -107,6 +103,20 @@ module ReVIEW
|
|
|
107
103
|
ReVIEW::Template.load(layoutfile).result(binding)
|
|
108
104
|
end
|
|
109
105
|
|
|
106
|
+
def solve_nest(s)
|
|
107
|
+
check_nest
|
|
108
|
+
s.gsub("</dd>\n</dl>\n\x01→dl←\x01", '').
|
|
109
|
+
gsub("\x01→/dl←\x01", "</dd>\n</dl>←END\x01").
|
|
110
|
+
gsub("</li>\n</ul>\n\x01→ul←\x01", '').
|
|
111
|
+
gsub("\x01→/ul←\x01", "</li>\n</ul>←END\x01").
|
|
112
|
+
gsub("</li>\n</ol>\n\x01→ol←\x01", '').
|
|
113
|
+
gsub("\x01→/ol←\x01", "</li>\n</ol>←END\x01").
|
|
114
|
+
gsub("</dl>←END\x01\n<dl>", '').
|
|
115
|
+
gsub("</ul>←END\x01\n<ul>", '').
|
|
116
|
+
gsub("</ol>←END\x01\n<ol>", '').
|
|
117
|
+
gsub("←END\x01", '')
|
|
118
|
+
end
|
|
119
|
+
|
|
110
120
|
def xmlns_ops_prefix
|
|
111
121
|
if @book.config['epubversion'].to_i == 3
|
|
112
122
|
'epub'
|
|
@@ -228,6 +238,7 @@ module ReVIEW
|
|
|
228
238
|
end
|
|
229
239
|
|
|
230
240
|
def captionblock(type, lines, caption)
|
|
241
|
+
check_nested_minicolumn
|
|
231
242
|
puts %Q(<div class="#{type}">)
|
|
232
243
|
if caption.present?
|
|
233
244
|
puts %Q(<p class="caption">#{compile_inline(caption)}</p>)
|
|
@@ -312,6 +323,24 @@ module ReVIEW
|
|
|
312
323
|
captionblock('note', lines, caption)
|
|
313
324
|
end
|
|
314
325
|
|
|
326
|
+
CAPTION_TITLES.each do |name|
|
|
327
|
+
class_eval %Q(
|
|
328
|
+
def #{name}_begin(caption = nil)
|
|
329
|
+
check_nested_minicolumn
|
|
330
|
+
@doc_status[:minicolumn] = '#{name}'
|
|
331
|
+
puts %Q(<div class="#{name}">)
|
|
332
|
+
if caption.present?
|
|
333
|
+
puts %Q(<p class="caption">\#{compile_inline(caption)}</p>)
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
def #{name}_end
|
|
338
|
+
puts '</div>'
|
|
339
|
+
@doc_status[:minicolumn] = nil
|
|
340
|
+
end
|
|
341
|
+
), __FILE__, __LINE__ - 14
|
|
342
|
+
end
|
|
343
|
+
|
|
315
344
|
def ul_begin
|
|
316
345
|
puts '<ul>'
|
|
317
346
|
end
|
|
@@ -1018,7 +1047,7 @@ EOS
|
|
|
1018
1047
|
|
|
1019
1048
|
def inline_column_chap(chapter, id)
|
|
1020
1049
|
if @book.config['chapterlink']
|
|
1021
|
-
%Q(<a href="
|
|
1050
|
+
%Q(<a href="#{chapter.id}#{extname}##{column_label(id, chapter)}" class="columnref">#{I18n.t('column', compile_inline(chapter.column(id).caption))}</a>)
|
|
1022
1051
|
else
|
|
1023
1052
|
I18n.t('column', compile_inline(chapter.column(id).caption))
|
|
1024
1053
|
end
|
|
@@ -1180,7 +1209,7 @@ EOS
|
|
|
1180
1209
|
%Q(<span class="balloon">#{escape_html(str)}</span>)
|
|
1181
1210
|
end
|
|
1182
1211
|
|
|
1183
|
-
def inline_raw(str)
|
|
1212
|
+
def inline_raw(str) # rubocop:disable Lint/UselessMethodDefinition
|
|
1184
1213
|
super(str)
|
|
1185
1214
|
end
|
|
1186
1215
|
|
data/lib/review/htmlutils.rb
CHANGED
|
@@ -7,19 +7,16 @@
|
|
|
7
7
|
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
8
8
|
#
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
begin
|
|
11
|
+
require 'cgi/escape'
|
|
12
|
+
rescue
|
|
13
|
+
require 'cgi/util'
|
|
14
|
+
end
|
|
15
|
+
|
|
11
16
|
module ReVIEW
|
|
12
17
|
module HTMLUtils
|
|
13
|
-
ESC = {
|
|
14
|
-
'&' => '&',
|
|
15
|
-
'<' => '<',
|
|
16
|
-
'>' => '>',
|
|
17
|
-
'"' => '"'
|
|
18
|
-
} # .freeze
|
|
19
|
-
|
|
20
18
|
def escape(str)
|
|
21
|
-
|
|
22
|
-
str.gsub(/[&"<>]/) { |c| t[c] }
|
|
19
|
+
CGI.escapeHTML(str)
|
|
23
20
|
end
|
|
24
21
|
|
|
25
22
|
alias_method :escape_html, :escape # for backward compatibility
|
data/lib/review/i18n.rb
CHANGED
data/lib/review/idgxmlbuilder.rb
CHANGED
|
@@ -46,10 +46,6 @@ module ReVIEW
|
|
|
46
46
|
'.xml'
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
def builder_init
|
|
50
|
-
end
|
|
51
|
-
private :builder_init
|
|
52
|
-
|
|
53
49
|
def builder_init_file
|
|
54
50
|
@warns = []
|
|
55
51
|
@errors = []
|
|
@@ -89,7 +85,21 @@ module ReVIEW
|
|
|
89
85
|
s += '</sect>' if @section > 0
|
|
90
86
|
s += '</chapter>' if @chapter.number > 0
|
|
91
87
|
end
|
|
92
|
-
@output.string + s + "</#{@rootelement}>\n"
|
|
88
|
+
solve_nest(@output.string) + s + "</#{@rootelement}>\n"
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def solve_nest(s)
|
|
92
|
+
check_nest
|
|
93
|
+
s.gsub("</dd></dl>\x01→dl←\x01", '').
|
|
94
|
+
gsub("\x01→/dl←\x01", "</dd></dl>←END\x01").
|
|
95
|
+
gsub("</li></ul>\x01→ul←\x01", '').
|
|
96
|
+
gsub("\x01→/ul←\x01", "</li></ul>←END\x01").
|
|
97
|
+
gsub("</li></ol>\x01→ol←\x01", '').
|
|
98
|
+
gsub("\x01→/ol←\x01", "</li></ol>←END\x01").
|
|
99
|
+
gsub("</dl>←END\x01<dl>", '').
|
|
100
|
+
gsub("</ul>←END\x01<ul>", '').
|
|
101
|
+
gsub("</ol>←END\x01<ol>", '').
|
|
102
|
+
gsub("←END\x01", '')
|
|
93
103
|
end
|
|
94
104
|
|
|
95
105
|
def headline(level, label, caption)
|
|
@@ -508,7 +518,7 @@ module ReVIEW
|
|
|
508
518
|
sepidx = nil
|
|
509
519
|
rows = []
|
|
510
520
|
lines.each_with_index do |line, idx|
|
|
511
|
-
if /\A[
|
|
521
|
+
if /\A[=\-]{12}/ =~ line
|
|
512
522
|
sepidx ||= idx
|
|
513
523
|
next
|
|
514
524
|
end
|
|
@@ -942,18 +952,22 @@ module ReVIEW
|
|
|
942
952
|
end
|
|
943
953
|
|
|
944
954
|
def note(lines, caption = nil)
|
|
955
|
+
check_nested_minicolumn
|
|
945
956
|
captionblock('note', lines, caption)
|
|
946
957
|
end
|
|
947
958
|
|
|
948
959
|
def memo(lines, caption = nil)
|
|
960
|
+
check_nested_minicolumn
|
|
949
961
|
captionblock('memo', lines, caption)
|
|
950
962
|
end
|
|
951
963
|
|
|
952
964
|
def tip(lines, caption = nil)
|
|
965
|
+
check_nested_minicolumn
|
|
953
966
|
captionblock('tip', lines, caption)
|
|
954
967
|
end
|
|
955
968
|
|
|
956
969
|
def info(lines, caption = nil)
|
|
970
|
+
check_nested_minicolumn
|
|
957
971
|
captionblock('info', lines, caption)
|
|
958
972
|
end
|
|
959
973
|
|
|
@@ -966,6 +980,7 @@ module ReVIEW
|
|
|
966
980
|
end
|
|
967
981
|
|
|
968
982
|
def important(lines, caption = nil)
|
|
983
|
+
check_nested_minicolumn
|
|
969
984
|
captionblock('important', lines, caption)
|
|
970
985
|
end
|
|
971
986
|
|
|
@@ -974,10 +989,12 @@ module ReVIEW
|
|
|
974
989
|
end
|
|
975
990
|
|
|
976
991
|
def caution(lines, caption = nil)
|
|
992
|
+
check_nested_minicolumn
|
|
977
993
|
captionblock('caution', lines, caption)
|
|
978
994
|
end
|
|
979
995
|
|
|
980
996
|
def warning(lines, caption = nil)
|
|
997
|
+
check_nested_minicolumn
|
|
981
998
|
captionblock('warning', lines, caption)
|
|
982
999
|
end
|
|
983
1000
|
|
|
@@ -990,6 +1007,7 @@ module ReVIEW
|
|
|
990
1007
|
end
|
|
991
1008
|
|
|
992
1009
|
def notice(lines, caption = nil)
|
|
1010
|
+
check_nested_minicolumn
|
|
993
1011
|
if caption
|
|
994
1012
|
captionblock('notice-t', lines, caption, 'notice-title')
|
|
995
1013
|
else
|
|
@@ -1025,6 +1043,33 @@ module ReVIEW
|
|
|
1025
1043
|
captionblock('expert', lines, nil)
|
|
1026
1044
|
end
|
|
1027
1045
|
|
|
1046
|
+
CAPTION_TITLES.each do |name|
|
|
1047
|
+
class_eval %Q(
|
|
1048
|
+
def #{name}_begin(caption = nil)
|
|
1049
|
+
check_nested_minicolumn
|
|
1050
|
+
if '#{name}' == 'notice' && caption.present?
|
|
1051
|
+
@doc_status[:minicolumn] = '#{name}-t'
|
|
1052
|
+
print "<#{name}-t>"
|
|
1053
|
+
else
|
|
1054
|
+
@doc_status[:minicolumn] = '#{name}'
|
|
1055
|
+
print "<#{name}>"
|
|
1056
|
+
end
|
|
1057
|
+
if caption.present?
|
|
1058
|
+
puts %Q(<title aid:pstyle='#{name}-title'>\#{compile_inline(caption)}</title>)
|
|
1059
|
+
end
|
|
1060
|
+
end
|
|
1061
|
+
|
|
1062
|
+
def #{name}_end
|
|
1063
|
+
if '#{name}' == 'notice' && @doc_status[:minicolumn] == 'notice-t'
|
|
1064
|
+
print "</#{name}-t>"
|
|
1065
|
+
else
|
|
1066
|
+
print "</#{name}>"
|
|
1067
|
+
end
|
|
1068
|
+
@doc_status[:minicolumn] = nil
|
|
1069
|
+
end
|
|
1070
|
+
), __FILE__, __LINE__ - 23
|
|
1071
|
+
end
|
|
1072
|
+
|
|
1028
1073
|
def syntaxblock(type, lines, caption)
|
|
1029
1074
|
captionstr = nil
|
|
1030
1075
|
if caption.present?
|
data/lib/review/idgxmlmaker.rb
CHANGED
|
@@ -15,9 +15,12 @@ require 'review/book'
|
|
|
15
15
|
require 'review/yamlloader'
|
|
16
16
|
require 'review/idgxmlbuilder'
|
|
17
17
|
require 'review/version'
|
|
18
|
+
require 'review/makerhelper'
|
|
18
19
|
|
|
19
20
|
module ReVIEW
|
|
20
21
|
class IDGXMLMaker
|
|
22
|
+
include MakerHelper
|
|
23
|
+
|
|
21
24
|
attr_accessor :config, :basedir
|
|
22
25
|
|
|
23
26
|
def initialize
|
|
@@ -74,19 +77,12 @@ module ReVIEW
|
|
|
74
77
|
end
|
|
75
78
|
|
|
76
79
|
def execute(*args)
|
|
77
|
-
@config = ReVIEW::Configure.values
|
|
78
|
-
@config.maker = 'idgxmlmaker'
|
|
79
80
|
cmd_config, yamlfile = parse_opts(args)
|
|
80
81
|
error "#{yamlfile} not found." unless File.exist?(yamlfile)
|
|
81
82
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
rescue => e
|
|
86
|
-
error "yaml error #{e.message}"
|
|
87
|
-
end
|
|
88
|
-
# YAML configs will be overridden by command line options.
|
|
89
|
-
@config.deep_merge!(cmd_config)
|
|
83
|
+
@config = ReVIEW::Configure.create(maker: 'idgxmlmaker',
|
|
84
|
+
yamlfile: yamlfile,
|
|
85
|
+
config: cmd_config)
|
|
90
86
|
I18n.setup(@config['language'])
|
|
91
87
|
begin
|
|
92
88
|
generate_idgxml_files(yamlfile)
|
|
@@ -102,8 +98,7 @@ module ReVIEW
|
|
|
102
98
|
remove_old_files(@path)
|
|
103
99
|
Dir.mkdir(@path)
|
|
104
100
|
|
|
105
|
-
@book = ReVIEW::Book.
|
|
106
|
-
@book.config = @config
|
|
101
|
+
@book = ReVIEW::Book::Base.new(@basedir, config: @config)
|
|
107
102
|
if @table
|
|
108
103
|
@book.config['tableopt'] = @table
|
|
109
104
|
end
|
|
@@ -155,9 +150,9 @@ module ReVIEW
|
|
|
155
150
|
end
|
|
156
151
|
f.puts '<?xml version="1.0" encoding="UTF-8"?>'
|
|
157
152
|
f.print '<doc xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"><title aid:pstyle="h1">'
|
|
158
|
-
f.print
|
|
153
|
+
f.print h(title)
|
|
159
154
|
f.print '</title><?dtp level="1" section="'
|
|
160
|
-
f.print
|
|
155
|
+
f.print h(title)
|
|
161
156
|
f.puts '"?></doc>'
|
|
162
157
|
end
|
|
163
158
|
apply_filter(File.join(basetmpdir, xmlfile))
|