review-peg 0.1.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/.gitignore +36 -0
- data/.rubocop.yml +47 -0
- data/.rubocop_todo.yml +605 -0
- data/.travis.yml +18 -0
- data/COPYING +515 -0
- data/ChangeLog +2449 -0
- data/Dockerfile +22 -0
- data/Gemfile +6 -0
- data/README.rdoc +81 -0
- data/Rakefile +51 -0
- data/bin/review-catalog-converter-peg +129 -0
- data/bin/review-check-peg +169 -0
- data/bin/review-checkdep-peg +63 -0
- data/bin/review-compile-peg +202 -0
- data/bin/review-epubmaker-legacy-peg +1024 -0
- data/bin/review-epubmaker-peg +44 -0
- data/bin/review-index-peg +110 -0
- data/bin/review-init-peg +151 -0
- data/bin/review-pdfmaker-peg +18 -0
- data/bin/review-preproc-peg +131 -0
- data/bin/review-validate-peg +51 -0
- data/bin/review-vol-peg +100 -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/NEWS.ja.md +350 -0
- data/doc/NEWS.md +354 -0
- data/doc/catalog.ja.md +53 -0
- data/doc/catalog.md +52 -0
- data/doc/format.ja.md +734 -0
- data/doc/format.md +746 -0
- data/doc/format_idg.ja.md +203 -0
- data/doc/quickstart.ja.md +222 -0
- data/doc/quickstart.md +252 -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.yml +238 -0
- data/lib/epubmaker.rb +24 -0
- data/lib/epubmaker/content.rb +93 -0
- data/lib/epubmaker/epubcommon.rb +424 -0
- data/lib/epubmaker/epubv2.rb +139 -0
- data/lib/epubmaker/epubv3.rb +222 -0
- data/lib/epubmaker/producer.rb +330 -0
- data/lib/lineinput.rb +107 -0
- data/lib/review.rb +3 -0
- data/lib/review/book.rb +43 -0
- data/lib/review/book/base.rb +401 -0
- data/lib/review/book/chapter.rb +100 -0
- data/lib/review/book/compilable.rb +184 -0
- data/lib/review/book/image_finder.rb +71 -0
- data/lib/review/book/index.rb +413 -0
- data/lib/review/book/page_metric.rb +47 -0
- data/lib/review/book/part.rb +54 -0
- data/lib/review/book/volume.rb +67 -0
- data/lib/review/builder.rb +452 -0
- data/lib/review/catalog.rb +52 -0
- data/lib/review/compiler.rb +5183 -0
- data/lib/review/compiler/literals_1_9.kpeg +22 -0
- data/lib/review/compiler/literals_1_9.rb +435 -0
- data/lib/review/configure.rb +64 -0
- data/lib/review/epubbuilder.rb +18 -0
- data/lib/review/epubmaker.rb +480 -0
- data/lib/review/ewbbuilder.rb +381 -0
- data/lib/review/exception.rb +21 -0
- data/lib/review/extentions.rb +4 -0
- data/lib/review/extentions/array.rb +25 -0
- data/lib/review/extentions/object.rb +9 -0
- data/lib/review/extentions/string.rb +33 -0
- data/lib/review/htmlbuilder.rb +1166 -0
- data/lib/review/htmllayout.rb +41 -0
- data/lib/review/htmltoc.rb +45 -0
- data/lib/review/htmlutils.rb +90 -0
- data/lib/review/i18n.rb +96 -0
- data/lib/review/i18n.yml +169 -0
- data/lib/review/idgxmlbuilder.rb +1233 -0
- data/lib/review/inaobuilder.rb +357 -0
- data/lib/review/latexbuilder.rb +941 -0
- data/lib/review/latexindex.rb +35 -0
- data/lib/review/latexutils.rb +95 -0
- data/lib/review/layout.tex.erb +340 -0
- data/lib/review/lineinput.rb +17 -0
- data/lib/review/location.rb +24 -0
- data/lib/review/makerhelper.rb +67 -0
- data/lib/review/markdownbuilder.rb +339 -0
- data/lib/review/node.rb +288 -0
- data/lib/review/pdfmaker.rb +332 -0
- data/lib/review/preprocessor.rb +530 -0
- data/lib/review/review.kpeg +745 -0
- data/lib/review/sec_counter.rb +69 -0
- data/lib/review/template.rb +21 -0
- data/lib/review/textbuilder.rb +17 -0
- data/lib/review/textutils.rb +16 -0
- data/lib/review/tocparser.rb +348 -0
- data/lib/review/tocprinter.rb +205 -0
- data/lib/review/topbuilder.rb +796 -0
- data/lib/review/unfold.rb +138 -0
- data/lib/review/version.rb +3 -0
- data/lib/uuid.rb +312 -0
- data/review.gemspec +32 -0
- data/templates/html/layout-html5.html.erb +17 -0
- data/templates/html/layout-xhtml1.html.erb +20 -0
- data/templates/ncx/epubv2.ncx.erb +11 -0
- data/templates/opf/epubv2.opf.erb +21 -0
- data/templates/opf/epubv3.opf.erb +18 -0
- data/templates/xml/container.xml.erb +6 -0
- data/test/CHAPS +2 -0
- data/test/assets/test.xml.erb +3 -0
- data/test/assets/test_template.tex +255 -0
- data/test/assets/test_template_backmatter.tex +32 -0
- data/test/bib.re +13 -0
- data/test/book_test_helper.rb +35 -0
- data/test/sample-book/README.md +7 -0
- data/test/sample-book/src/Rakefile +58 -0
- data/test/sample-book/src/_cover.html +3 -0
- data/test/sample-book/src/catalog.yml +10 -0
- data/test/sample-book/src/ch01.re +71 -0
- data/test/sample-book/src/ch02.re +3 -0
- data/test/sample-book/src/config.yml +186 -0
- data/test/sample-book/src/images/ch01-imgsample.jpg +0 -0
- data/test/sample-book/src/images/cover.jpg +0 -0
- data/test/sample-book/src/preface.re +15 -0
- data/test/sample-book/src/sty/jumoline.sty +310 -0
- data/test/sample-book/src/sty/reviewmacro.sty +39 -0
- data/test/sample-book/src/style.css +251 -0
- data/test/sample-book/src/vendor/jumoline/README +29 -0
- data/test/sample-book/src/vendor/jumoline/jumoline.dtx +2988 -0
- data/test/sample-book/src/vendor/jumoline/jumoline.ins +6 -0
- data/test/test.re +43 -0
- data/test/test_book.rb +556 -0
- data/test/test_book_chapter.rb +280 -0
- data/test/test_book_part.rb +54 -0
- data/test/test_builder.rb +80 -0
- data/test/test_catalog.rb +119 -0
- data/test/test_catalog_converter_cmd.rb +73 -0
- data/test/test_compiler.rb +92 -0
- data/test/test_configure.rb +50 -0
- data/test/test_epub3maker.rb +529 -0
- data/test/test_epubmaker.rb +569 -0
- data/test/test_epubmaker_cmd.rb +40 -0
- data/test/test_helper.rb +92 -0
- data/test/test_htmlbuilder.rb +1114 -0
- data/test/test_htmltoc.rb +32 -0
- data/test/test_htmlutils.rb +50 -0
- data/test/test_i18n.rb +180 -0
- data/test/test_idgxmlbuilder.rb +608 -0
- data/test/test_image_finder.rb +82 -0
- data/test/test_inaobuilder.rb +245 -0
- data/test/test_index.rb +174 -0
- data/test/test_latexbuilder.rb +732 -0
- data/test/test_lineinput.rb +182 -0
- data/test/test_makerhelper.rb +66 -0
- data/test/test_markdownbuilder.rb +125 -0
- data/test/test_pdfmaker.rb +171 -0
- data/test/test_pdfmaker_cmd.rb +40 -0
- data/test/test_preprocessor.rb +23 -0
- data/test/test_review_ext.rb +31 -0
- data/test/test_template.rb +26 -0
- data/test/test_textutils.rb +32 -0
- data/test/test_topbuilder.rb +291 -0
- data/test/test_uuid.rb +157 -0
- metadata +357 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2010-2013 Kenshi Muto and Masayoshi Takahashi
|
|
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
|
+
require 'pathname'
|
|
12
|
+
require 'optparse'
|
|
13
|
+
bindir = Pathname.new(__FILE__).realpath.dirname
|
|
14
|
+
$LOAD_PATH.unshift((bindir + '../lib').realpath)
|
|
15
|
+
require 'review/epubmaker'
|
|
16
|
+
require 'review/version'
|
|
17
|
+
|
|
18
|
+
rv = ReVIEW::EPUBMaker.new
|
|
19
|
+
|
|
20
|
+
opts = OptionParser.new
|
|
21
|
+
opts.version = ReVIEW::VERSION
|
|
22
|
+
opts.banner = "Usage: #{File.basename($0)} [options] YAML_filename [export_filename]"
|
|
23
|
+
opts.on('--help', 'Prints this message and quit.') do
|
|
24
|
+
puts opts.help
|
|
25
|
+
exit 0
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
begin
|
|
29
|
+
opts.parse!
|
|
30
|
+
rescue OptionParser::ParseError => err
|
|
31
|
+
$stderr.puts err.message
|
|
32
|
+
$stderr.puts opts.help
|
|
33
|
+
exit 1
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if ARGV.size < 1 || !File.exist?(ARGV[0])
|
|
38
|
+
puts opts.help
|
|
39
|
+
exit 1
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
yaml_file = ARGV[0]
|
|
43
|
+
bookname = ARGV[1]
|
|
44
|
+
rv.produce(yaml_file, bookname)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 1999-2007 Minero Aoki
|
|
5
|
+
# 2008-2014 Minero Aoki, Kenshi Muto
|
|
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
|
+
# For details of the GNU LGPL, see the file "COPYING".
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
require 'pathname'
|
|
14
|
+
|
|
15
|
+
bindir = Pathname.new(__FILE__).realpath.dirname
|
|
16
|
+
$LOAD_PATH.unshift((bindir + '../lib').realpath)
|
|
17
|
+
|
|
18
|
+
require 'review/book'
|
|
19
|
+
require 'review/tocparser'
|
|
20
|
+
require 'review/tocprinter'
|
|
21
|
+
require 'review/version'
|
|
22
|
+
require 'optparse'
|
|
23
|
+
|
|
24
|
+
def main
|
|
25
|
+
Signal.trap(:INT) { exit 1 }
|
|
26
|
+
if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
|
|
27
|
+
Signal.trap(:PIPE, 'IGNORE')
|
|
28
|
+
end
|
|
29
|
+
_main
|
|
30
|
+
rescue Errno::EPIPE
|
|
31
|
+
exit 0
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def _main
|
|
35
|
+
printer_class = ReVIEW::TextTOCPrinter
|
|
36
|
+
source = nil
|
|
37
|
+
upper = ReVIEW::TOCPrinter.default_upper_level
|
|
38
|
+
param = {}
|
|
39
|
+
book = ReVIEW::Book::Base.load
|
|
40
|
+
|
|
41
|
+
opts = OptionParser.new
|
|
42
|
+
opts.version = ReVIEW::VERSION
|
|
43
|
+
opts.on('-a', '--all', 'print all chapters.') {
|
|
44
|
+
begin
|
|
45
|
+
source = book
|
|
46
|
+
rescue ReVIEW::Error => err
|
|
47
|
+
error_exit err.message
|
|
48
|
+
end
|
|
49
|
+
}
|
|
50
|
+
opts.on('-p', '--part N', 'list only part N.') {|n|
|
|
51
|
+
source = book.part(Integer(n)) or
|
|
52
|
+
error_exit "part #{n} does not exist in this book"
|
|
53
|
+
}
|
|
54
|
+
opts.on('-c', '--chapter C', 'list only chapter C.') {|c|
|
|
55
|
+
begin
|
|
56
|
+
source = ReVIEW::Book::Part.new(nil, 1, [book.chapter(c)])
|
|
57
|
+
rescue
|
|
58
|
+
error_exit "chapter #{c} does not exist in this book"
|
|
59
|
+
end
|
|
60
|
+
}
|
|
61
|
+
opts.on('-l', '--level N', 'list upto N level (1..4, default=4)') {|n|
|
|
62
|
+
upper = Integer(n)
|
|
63
|
+
unless (0..4).include?(upper) # 0 is hidden option
|
|
64
|
+
$stderr.puts "-l/--level option accepts only 1..4"
|
|
65
|
+
exit 1
|
|
66
|
+
end
|
|
67
|
+
}
|
|
68
|
+
opts.on('--text', 'output in plain text (default)') {
|
|
69
|
+
printer_class = ReVIEW::TextTOCPrinter
|
|
70
|
+
}
|
|
71
|
+
opts.on('--html', 'output in HTML (deprecated)') {
|
|
72
|
+
printer_class = ReVIEW::HTMLTOCPrinter
|
|
73
|
+
}
|
|
74
|
+
opts.on('--idg', 'output in InDesign XML') {
|
|
75
|
+
printer_class = ReVIEW::IDGTOCPrinter
|
|
76
|
+
}
|
|
77
|
+
opts.on('--help', 'print this message and quit.') {
|
|
78
|
+
puts opts.help
|
|
79
|
+
exit 0
|
|
80
|
+
}
|
|
81
|
+
begin
|
|
82
|
+
opts.parse!
|
|
83
|
+
rescue OptionParser::ParseError => err
|
|
84
|
+
$stderr.puts err.message
|
|
85
|
+
$stderr.puts opts.help
|
|
86
|
+
exit 1
|
|
87
|
+
end
|
|
88
|
+
if source
|
|
89
|
+
unless ARGV.empty?
|
|
90
|
+
error_exit '-a/-s option and file arguments are exclusive'
|
|
91
|
+
end
|
|
92
|
+
else
|
|
93
|
+
puts opts.help
|
|
94
|
+
exit 0
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
begin
|
|
98
|
+
printer_class.new(upper, param).print_book source
|
|
99
|
+
rescue ReVIEW::Error, Errno::ENOENT => err
|
|
100
|
+
raise if $DEBUG
|
|
101
|
+
error_exit err.message
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def error_exit(msg)
|
|
106
|
+
$stderr.puts "#{File.basename($0)}: #{msg}"
|
|
107
|
+
exit 1
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
main
|
data/bin/review-init-peg
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2013-2014 Masanori Kado
|
|
4
|
+
#
|
|
5
|
+
# This program is free software.
|
|
6
|
+
# You can distribute or modify this program under the terms of
|
|
7
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
8
|
+
# For details of the GNU LGPL, see the file "COPYING".
|
|
9
|
+
|
|
10
|
+
require 'fileutils'
|
|
11
|
+
require 'optparse'
|
|
12
|
+
|
|
13
|
+
require 'pathname'
|
|
14
|
+
|
|
15
|
+
bindir = Pathname.new(__FILE__).realpath.dirname
|
|
16
|
+
$LOAD_PATH.unshift((bindir + '../lib').realpath)
|
|
17
|
+
|
|
18
|
+
require 'review/version'
|
|
19
|
+
|
|
20
|
+
def main
|
|
21
|
+
opts = OptionParser.new
|
|
22
|
+
opts.version = ReVIEW::VERSION
|
|
23
|
+
opts.banner = "Usage: #{File.basename($0)} [option] dirname"
|
|
24
|
+
opts.on('-h', '--help', 'print this message and quit.') {
|
|
25
|
+
puts opts.help
|
|
26
|
+
exit 0
|
|
27
|
+
}
|
|
28
|
+
opts.on('-f', '--force', 'generate files (except *.re) if directory has already existed.') {
|
|
29
|
+
@force = true
|
|
30
|
+
}
|
|
31
|
+
opts.on('-l', '--locale', 'generate locale.yml file.') {
|
|
32
|
+
@locale = true
|
|
33
|
+
}
|
|
34
|
+
begin
|
|
35
|
+
opts.parse!
|
|
36
|
+
rescue OptionParser::ParseError => err
|
|
37
|
+
$stderr.puts err.message
|
|
38
|
+
$stderr.puts opts.help
|
|
39
|
+
exit 1
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if ARGV.empty?
|
|
43
|
+
$stderr.puts opts.help
|
|
44
|
+
exit 1
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
initdir = File.expand_path(ARGV.shift)
|
|
48
|
+
@review_dir = File.dirname(File.expand_path(__FILE__ + "./../"))
|
|
49
|
+
|
|
50
|
+
generate_dir(initdir) do |dir|
|
|
51
|
+
generate_catalog_file(dir)
|
|
52
|
+
generate_sample(dir)
|
|
53
|
+
generate_images_dir(dir)
|
|
54
|
+
generate_cover_image(dir)
|
|
55
|
+
generate_layout(dir)
|
|
56
|
+
generate_style(dir)
|
|
57
|
+
generate_texmacro(dir)
|
|
58
|
+
generate_config(dir)
|
|
59
|
+
generate_locale(dir) if @locale
|
|
60
|
+
generate_rakefile(dir)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def generate_dir(dir)
|
|
65
|
+
if File.exist?(dir) && !@force
|
|
66
|
+
puts "#{dir} already exists."
|
|
67
|
+
exit
|
|
68
|
+
end
|
|
69
|
+
FileUtils.mkdir_p dir
|
|
70
|
+
yield dir
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def generate_sample(dir)
|
|
74
|
+
if !@force
|
|
75
|
+
File.open("#{dir}/#{File.basename(dir)}.re", "w") do |file|
|
|
76
|
+
file.write("= ")
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def generate_layout(dir)
|
|
82
|
+
FileUtils.mkdir_p dir + '/layouts'
|
|
83
|
+
File.open("#{dir}/layouts/layout.html.erb", "w") do |file|
|
|
84
|
+
file.write <<-EOS
|
|
85
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
86
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
|
87
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="ja">
|
|
88
|
+
<head>
|
|
89
|
+
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
|
|
90
|
+
<meta http-equiv="Content-Style-Type" content="text/css" />
|
|
91
|
+
<link rel="stylesheet" type="text/css" href="style.css" />
|
|
92
|
+
<meta name="generator" content="Re:VIEW" />
|
|
93
|
+
<title><%= title %></title>
|
|
94
|
+
</head>
|
|
95
|
+
<body>
|
|
96
|
+
<%= body %>
|
|
97
|
+
</body>
|
|
98
|
+
</html>
|
|
99
|
+
EOS
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def generate_catalog_file(dir)
|
|
104
|
+
File.open(dir + "/catalog.yml", "w") do |file|
|
|
105
|
+
file.write <<-EOS
|
|
106
|
+
PREDEF:
|
|
107
|
+
|
|
108
|
+
CHAPS:
|
|
109
|
+
- #{File.basename(dir)}.re
|
|
110
|
+
|
|
111
|
+
APPENDIX:
|
|
112
|
+
|
|
113
|
+
POSTDEF:
|
|
114
|
+
|
|
115
|
+
EOS
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def generate_images_dir(dir)
|
|
120
|
+
FileUtils.mkdir_p dir + '/images'
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def generate_cover_image(dir)
|
|
124
|
+
FileUtils.cp @review_dir + "/test/sample-book/src/images/cover.jpg", dir + '/images/'
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def generate_config(dir)
|
|
128
|
+
FileUtils.cp @review_dir + "/test/sample-book/src/config.yml", dir
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def generate_style(dir)
|
|
132
|
+
FileUtils.cp @review_dir + "/test/sample-book/src/style.css", dir
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def generate_texmacro(dir)
|
|
136
|
+
texmacrodir = dir + '/sty'
|
|
137
|
+
FileUtils.mkdir_p texmacrodir
|
|
138
|
+
FileUtils.cp @review_dir + "/test/sample-book/src/sty/reviewmacro.sty", texmacrodir
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def generate_rakefile(dir)
|
|
142
|
+
FileUtils.cp @review_dir + "/test/sample-book/src/Rakefile", dir
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def generate_locale(dir)
|
|
146
|
+
FileUtils.cp @review_dir + '/lib/review/i18n.yml', dir + '/locale.yml'
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
if File.basename($0) == File.basename(__FILE__)
|
|
150
|
+
main()
|
|
151
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2010-2014 Kenshi Muto and Masayoshi Takahashi
|
|
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
|
+
require 'pathname'
|
|
13
|
+
bindir = Pathname.new(__FILE__).realpath.dirname
|
|
14
|
+
$LOAD_PATH.unshift((bindir + '../lib').realpath)
|
|
15
|
+
|
|
16
|
+
require 'review/pdfmaker'
|
|
17
|
+
|
|
18
|
+
ReVIEW::PDFMaker.execute(*ARGV)
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# $Id: review-preproc 3761 2007-12-31 07:20:09Z aamine $
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2010-2014 Minero Aoki, Kenshi Muto
|
|
6
|
+
# Copyright (c) 1999-2007 Minero Aoki
|
|
7
|
+
#
|
|
8
|
+
# This program is free software.
|
|
9
|
+
# You can distribute or modify this program under the terms of
|
|
10
|
+
# the GNU LGPL, Lesser General Public License version 2.1.
|
|
11
|
+
# For details of the GNU LGPL, see the file "COPYING".
|
|
12
|
+
#
|
|
13
|
+
|
|
14
|
+
require 'pathname'
|
|
15
|
+
|
|
16
|
+
bindir = Pathname.new(__FILE__).realpath.dirname
|
|
17
|
+
$LOAD_PATH.unshift((bindir + '../lib').realpath)
|
|
18
|
+
|
|
19
|
+
require 'review/preprocessor'
|
|
20
|
+
require 'review/unfold'
|
|
21
|
+
require 'review/version'
|
|
22
|
+
require 'lineinput'
|
|
23
|
+
require 'stringio'
|
|
24
|
+
require 'fileutils'
|
|
25
|
+
require 'optparse'
|
|
26
|
+
|
|
27
|
+
def sigmain
|
|
28
|
+
Signal.trap(:INT) { exit 1 }
|
|
29
|
+
if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
|
|
30
|
+
Signal.trap(:PIPE, 'IGNORE')
|
|
31
|
+
end
|
|
32
|
+
main
|
|
33
|
+
rescue Errno::EPIPE
|
|
34
|
+
exit 0
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def main
|
|
38
|
+
param = {}
|
|
39
|
+
|
|
40
|
+
mode = :output
|
|
41
|
+
opts = OptionParser.new
|
|
42
|
+
opts.version = ReVIEW::VERSION
|
|
43
|
+
opts.banner = "Usage: #{File.basename($0)} [-c|-d|-s|--replace] [<file>...]"
|
|
44
|
+
opts.on('-c', '--check', 'Check if preprocess is needed.') {
|
|
45
|
+
mode = :check
|
|
46
|
+
}
|
|
47
|
+
opts.on('-d', '--diff', 'Show diff from current file.') {
|
|
48
|
+
mode = :diff
|
|
49
|
+
}
|
|
50
|
+
opts.on('--replace', 'Replace file by preprocessed one.') {
|
|
51
|
+
mode = :replace
|
|
52
|
+
}
|
|
53
|
+
opts.on('-s', '--strip', 'Strip preprocessor tags.') {
|
|
54
|
+
mode = :strip
|
|
55
|
+
}
|
|
56
|
+
opts.on('--final', 'Unfold text and strip preprocessor tags. (deprecated)') {
|
|
57
|
+
mode = :final
|
|
58
|
+
}
|
|
59
|
+
opts.on('--tabwidth=WIDTH', "Replace tabs with space characters. (0: don't replace)") {|width| param["tabwidth"] = width.to_i }
|
|
60
|
+
opts.on('--help', 'Print this message and quit.') {
|
|
61
|
+
puts opts.help
|
|
62
|
+
exit 0
|
|
63
|
+
}
|
|
64
|
+
begin
|
|
65
|
+
opts.parse!
|
|
66
|
+
rescue OptionParser::ParseError => err
|
|
67
|
+
$stderr.puts err.message
|
|
68
|
+
$stderr.puts opts.help
|
|
69
|
+
exit 1
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
pp = ReVIEW::Preprocessor.new(ReVIEW::Repository.new(param), param)
|
|
73
|
+
current_file = nil
|
|
74
|
+
ARGV.each do |path|
|
|
75
|
+
current_file = path
|
|
76
|
+
case mode
|
|
77
|
+
when :output
|
|
78
|
+
File.open(path) {|f|
|
|
79
|
+
pp.process f, $stdout
|
|
80
|
+
}
|
|
81
|
+
when :replace
|
|
82
|
+
File.write "#{path}.pptmp", preproc(pp, path)
|
|
83
|
+
File.rename "#{path}.pptmp", path
|
|
84
|
+
when :diff, :check
|
|
85
|
+
tmp = '/tmp/review.pptmp'
|
|
86
|
+
begin
|
|
87
|
+
File.write tmp, preproc(pp, path)
|
|
88
|
+
if mode == :check
|
|
89
|
+
system "diff -qu #{path} #{tmp} >/dev/null || echo #{path}"
|
|
90
|
+
else
|
|
91
|
+
system "diff -u #{path} #{tmp}"
|
|
92
|
+
end
|
|
93
|
+
ensure
|
|
94
|
+
FileUtils.rm_f tmp
|
|
95
|
+
end
|
|
96
|
+
when :strip
|
|
97
|
+
File.open(path) {|f|
|
|
98
|
+
ReVIEW::Preprocessor::Strip.new(f).each do |line|
|
|
99
|
+
puts line
|
|
100
|
+
end
|
|
101
|
+
}
|
|
102
|
+
when :final
|
|
103
|
+
u = ReVIEW::Unfold.new
|
|
104
|
+
File.open(path) {|f|
|
|
105
|
+
u.unfold ReVIEW::Preprocessor::Strip.new(f), $stdout
|
|
106
|
+
}
|
|
107
|
+
else
|
|
108
|
+
raise "must not happen: #{mode}"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
rescue ReVIEW::Error => err
|
|
112
|
+
raise if $DEBUG
|
|
113
|
+
$stderr.puts err.message
|
|
114
|
+
exit 1
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def preproc(pp, path)
|
|
118
|
+
buf = StringIO.new
|
|
119
|
+
File.open(path) {|f|
|
|
120
|
+
pp.process f, buf
|
|
121
|
+
}
|
|
122
|
+
buf.string
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def File.write(path, str)
|
|
126
|
+
File.open(path, 'w') {|f|
|
|
127
|
+
f.write str
|
|
128
|
+
}
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
sigmain
|