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.
Files changed (174) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +36 -0
  3. data/.rubocop.yml +47 -0
  4. data/.rubocop_todo.yml +605 -0
  5. data/.travis.yml +18 -0
  6. data/COPYING +515 -0
  7. data/ChangeLog +2449 -0
  8. data/Dockerfile +22 -0
  9. data/Gemfile +6 -0
  10. data/README.rdoc +81 -0
  11. data/Rakefile +51 -0
  12. data/bin/review-catalog-converter-peg +129 -0
  13. data/bin/review-check-peg +169 -0
  14. data/bin/review-checkdep-peg +63 -0
  15. data/bin/review-compile-peg +202 -0
  16. data/bin/review-epubmaker-legacy-peg +1024 -0
  17. data/bin/review-epubmaker-peg +44 -0
  18. data/bin/review-index-peg +110 -0
  19. data/bin/review-init-peg +151 -0
  20. data/bin/review-pdfmaker-peg +18 -0
  21. data/bin/review-preproc-peg +131 -0
  22. data/bin/review-validate-peg +51 -0
  23. data/bin/review-vol-peg +100 -0
  24. data/debian/README.Debian +12 -0
  25. data/debian/README.source +5 -0
  26. data/debian/changelog +5 -0
  27. data/debian/compat +1 -0
  28. data/debian/control +22 -0
  29. data/debian/copyright +62 -0
  30. data/debian/docs +6 -0
  31. data/debian/manpage.1.ex +59 -0
  32. data/debian/patches/path.diff +91 -0
  33. data/debian/patches/series +1 -0
  34. data/debian/review.install +13 -0
  35. data/debian/review.links +4 -0
  36. data/debian/rules +13 -0
  37. data/debian/source/format +1 -0
  38. data/doc/NEWS.ja.md +350 -0
  39. data/doc/NEWS.md +354 -0
  40. data/doc/catalog.ja.md +53 -0
  41. data/doc/catalog.md +52 -0
  42. data/doc/format.ja.md +734 -0
  43. data/doc/format.md +746 -0
  44. data/doc/format_idg.ja.md +203 -0
  45. data/doc/quickstart.ja.md +222 -0
  46. data/doc/quickstart.md +252 -0
  47. data/doc/ruby-uuid/README +11 -0
  48. data/doc/ruby-uuid/README.ja +34 -0
  49. data/doc/sample.css +108 -0
  50. data/doc/sample.yml +238 -0
  51. data/lib/epubmaker.rb +24 -0
  52. data/lib/epubmaker/content.rb +93 -0
  53. data/lib/epubmaker/epubcommon.rb +424 -0
  54. data/lib/epubmaker/epubv2.rb +139 -0
  55. data/lib/epubmaker/epubv3.rb +222 -0
  56. data/lib/epubmaker/producer.rb +330 -0
  57. data/lib/lineinput.rb +107 -0
  58. data/lib/review.rb +3 -0
  59. data/lib/review/book.rb +43 -0
  60. data/lib/review/book/base.rb +401 -0
  61. data/lib/review/book/chapter.rb +100 -0
  62. data/lib/review/book/compilable.rb +184 -0
  63. data/lib/review/book/image_finder.rb +71 -0
  64. data/lib/review/book/index.rb +413 -0
  65. data/lib/review/book/page_metric.rb +47 -0
  66. data/lib/review/book/part.rb +54 -0
  67. data/lib/review/book/volume.rb +67 -0
  68. data/lib/review/builder.rb +452 -0
  69. data/lib/review/catalog.rb +52 -0
  70. data/lib/review/compiler.rb +5183 -0
  71. data/lib/review/compiler/literals_1_9.kpeg +22 -0
  72. data/lib/review/compiler/literals_1_9.rb +435 -0
  73. data/lib/review/configure.rb +64 -0
  74. data/lib/review/epubbuilder.rb +18 -0
  75. data/lib/review/epubmaker.rb +480 -0
  76. data/lib/review/ewbbuilder.rb +381 -0
  77. data/lib/review/exception.rb +21 -0
  78. data/lib/review/extentions.rb +4 -0
  79. data/lib/review/extentions/array.rb +25 -0
  80. data/lib/review/extentions/object.rb +9 -0
  81. data/lib/review/extentions/string.rb +33 -0
  82. data/lib/review/htmlbuilder.rb +1166 -0
  83. data/lib/review/htmllayout.rb +41 -0
  84. data/lib/review/htmltoc.rb +45 -0
  85. data/lib/review/htmlutils.rb +90 -0
  86. data/lib/review/i18n.rb +96 -0
  87. data/lib/review/i18n.yml +169 -0
  88. data/lib/review/idgxmlbuilder.rb +1233 -0
  89. data/lib/review/inaobuilder.rb +357 -0
  90. data/lib/review/latexbuilder.rb +941 -0
  91. data/lib/review/latexindex.rb +35 -0
  92. data/lib/review/latexutils.rb +95 -0
  93. data/lib/review/layout.tex.erb +340 -0
  94. data/lib/review/lineinput.rb +17 -0
  95. data/lib/review/location.rb +24 -0
  96. data/lib/review/makerhelper.rb +67 -0
  97. data/lib/review/markdownbuilder.rb +339 -0
  98. data/lib/review/node.rb +288 -0
  99. data/lib/review/pdfmaker.rb +332 -0
  100. data/lib/review/preprocessor.rb +530 -0
  101. data/lib/review/review.kpeg +745 -0
  102. data/lib/review/sec_counter.rb +69 -0
  103. data/lib/review/template.rb +21 -0
  104. data/lib/review/textbuilder.rb +17 -0
  105. data/lib/review/textutils.rb +16 -0
  106. data/lib/review/tocparser.rb +348 -0
  107. data/lib/review/tocprinter.rb +205 -0
  108. data/lib/review/topbuilder.rb +796 -0
  109. data/lib/review/unfold.rb +138 -0
  110. data/lib/review/version.rb +3 -0
  111. data/lib/uuid.rb +312 -0
  112. data/review.gemspec +32 -0
  113. data/templates/html/layout-html5.html.erb +17 -0
  114. data/templates/html/layout-xhtml1.html.erb +20 -0
  115. data/templates/ncx/epubv2.ncx.erb +11 -0
  116. data/templates/opf/epubv2.opf.erb +21 -0
  117. data/templates/opf/epubv3.opf.erb +18 -0
  118. data/templates/xml/container.xml.erb +6 -0
  119. data/test/CHAPS +2 -0
  120. data/test/assets/test.xml.erb +3 -0
  121. data/test/assets/test_template.tex +255 -0
  122. data/test/assets/test_template_backmatter.tex +32 -0
  123. data/test/bib.re +13 -0
  124. data/test/book_test_helper.rb +35 -0
  125. data/test/sample-book/README.md +7 -0
  126. data/test/sample-book/src/Rakefile +58 -0
  127. data/test/sample-book/src/_cover.html +3 -0
  128. data/test/sample-book/src/catalog.yml +10 -0
  129. data/test/sample-book/src/ch01.re +71 -0
  130. data/test/sample-book/src/ch02.re +3 -0
  131. data/test/sample-book/src/config.yml +186 -0
  132. data/test/sample-book/src/images/ch01-imgsample.jpg +0 -0
  133. data/test/sample-book/src/images/cover.jpg +0 -0
  134. data/test/sample-book/src/preface.re +15 -0
  135. data/test/sample-book/src/sty/jumoline.sty +310 -0
  136. data/test/sample-book/src/sty/reviewmacro.sty +39 -0
  137. data/test/sample-book/src/style.css +251 -0
  138. data/test/sample-book/src/vendor/jumoline/README +29 -0
  139. data/test/sample-book/src/vendor/jumoline/jumoline.dtx +2988 -0
  140. data/test/sample-book/src/vendor/jumoline/jumoline.ins +6 -0
  141. data/test/test.re +43 -0
  142. data/test/test_book.rb +556 -0
  143. data/test/test_book_chapter.rb +280 -0
  144. data/test/test_book_part.rb +54 -0
  145. data/test/test_builder.rb +80 -0
  146. data/test/test_catalog.rb +119 -0
  147. data/test/test_catalog_converter_cmd.rb +73 -0
  148. data/test/test_compiler.rb +92 -0
  149. data/test/test_configure.rb +50 -0
  150. data/test/test_epub3maker.rb +529 -0
  151. data/test/test_epubmaker.rb +569 -0
  152. data/test/test_epubmaker_cmd.rb +40 -0
  153. data/test/test_helper.rb +92 -0
  154. data/test/test_htmlbuilder.rb +1114 -0
  155. data/test/test_htmltoc.rb +32 -0
  156. data/test/test_htmlutils.rb +50 -0
  157. data/test/test_i18n.rb +180 -0
  158. data/test/test_idgxmlbuilder.rb +608 -0
  159. data/test/test_image_finder.rb +82 -0
  160. data/test/test_inaobuilder.rb +245 -0
  161. data/test/test_index.rb +174 -0
  162. data/test/test_latexbuilder.rb +732 -0
  163. data/test/test_lineinput.rb +182 -0
  164. data/test/test_makerhelper.rb +66 -0
  165. data/test/test_markdownbuilder.rb +125 -0
  166. data/test/test_pdfmaker.rb +171 -0
  167. data/test/test_pdfmaker_cmd.rb +40 -0
  168. data/test/test_preprocessor.rb +23 -0
  169. data/test/test_review_ext.rb +31 -0
  170. data/test/test_template.rb +26 -0
  171. data/test/test_textutils.rb +32 -0
  172. data/test/test_topbuilder.rb +291 -0
  173. data/test/test_uuid.rb +157 -0
  174. 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
@@ -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