tmtms-review 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +9 -0
  3. data/COPYING +515 -0
  4. data/ChangeLog +2083 -0
  5. data/README.rdoc +50 -0
  6. data/Rakefile +56 -0
  7. data/VERSION +1 -0
  8. data/bin/review-check +178 -0
  9. data/bin/review-checkdep +63 -0
  10. data/bin/review-compile +205 -0
  11. data/bin/review-epubmaker +661 -0
  12. data/bin/review-epubmaker-ng +176 -0
  13. data/bin/review-index +118 -0
  14. data/bin/review-pdfmaker +208 -0
  15. data/bin/review-preproc +142 -0
  16. data/bin/review-validate +51 -0
  17. data/bin/review-vol +102 -0
  18. data/debian/README.Debian +12 -0
  19. data/debian/README.source +5 -0
  20. data/debian/changelog +5 -0
  21. data/debian/compat +1 -0
  22. data/debian/control +22 -0
  23. data/debian/copyright +62 -0
  24. data/debian/docs +6 -0
  25. data/debian/manpage.1.ex +59 -0
  26. data/debian/patches/path.diff +91 -0
  27. data/debian/patches/series +1 -0
  28. data/debian/review.install +13 -0
  29. data/debian/review.links +4 -0
  30. data/debian/rules +13 -0
  31. data/debian/source/format +1 -0
  32. data/doc/format.rdoc +582 -0
  33. data/doc/format_idg.rdoc +180 -0
  34. data/doc/libepubmaker/sample.yaml +90 -0
  35. data/doc/quickstart.rdoc +188 -0
  36. data/doc/ruby-uuid/README +11 -0
  37. data/doc/ruby-uuid/README.ja +34 -0
  38. data/doc/sample.css +108 -0
  39. data/doc/sample.yaml +62 -0
  40. data/lib/epubmaker.rb +28 -0
  41. data/lib/epubmaker/content.rb +82 -0
  42. data/lib/epubmaker/epubv2.rb +418 -0
  43. data/lib/epubmaker/epubv3.rb +249 -0
  44. data/lib/epubmaker/producer.rb +204 -0
  45. data/lib/epubmaker/resource.rb +66 -0
  46. data/lib/lineinput.rb +155 -0
  47. data/lib/review.rb +3 -0
  48. data/lib/review/book.rb +46 -0
  49. data/lib/review/book/base.rb +235 -0
  50. data/lib/review/book/chapter.rb +81 -0
  51. data/lib/review/book/compilable.rb +159 -0
  52. data/lib/review/book/index.rb +339 -0
  53. data/lib/review/book/page_metric.rb +38 -0
  54. data/lib/review/book/parameters.rb +97 -0
  55. data/lib/review/book/part.rb +44 -0
  56. data/lib/review/book/volume.rb +65 -0
  57. data/lib/review/builder.rb +444 -0
  58. data/lib/review/compiler.rb +550 -0
  59. data/lib/review/configure.rb +38 -0
  60. data/lib/review/epubbuilder.rb +18 -0
  61. data/lib/review/exception.rb +21 -0
  62. data/lib/review/extentions.rb +3 -0
  63. data/lib/review/extentions/object.rb +9 -0
  64. data/lib/review/extentions/string.rb +33 -0
  65. data/lib/review/htmlbuilder.rb +1097 -0
  66. data/lib/review/htmllayout.rb +19 -0
  67. data/lib/review/htmlutils.rb +36 -0
  68. data/lib/review/i18n.rb +30 -0
  69. data/lib/review/i18n.yaml +34 -0
  70. data/lib/review/idgxmlbuilder.rb +1145 -0
  71. data/lib/review/latexbuilder.rb +815 -0
  72. data/lib/review/latexindex.rb +35 -0
  73. data/lib/review/latexutils.rb +79 -0
  74. data/lib/review/preprocessor.rb +563 -0
  75. data/lib/review/review.tex.erb +232 -0
  76. data/lib/review/textbuilder.rb +17 -0
  77. data/lib/review/textutils.rb +66 -0
  78. data/lib/review/tocparser.rb +342 -0
  79. data/lib/review/tocprinter.rb +221 -0
  80. data/lib/review/topbuilder.rb +785 -0
  81. data/lib/review/unfold.rb +138 -0
  82. data/lib/uuid.rb +312 -0
  83. data/review.gemspec +141 -0
  84. data/test/CHAPS +2 -0
  85. data/test/bib.re +13 -0
  86. data/test/book_test_helper.rb +35 -0
  87. data/test/test.re +43 -0
  88. data/test/test_book.rb +598 -0
  89. data/test/test_book_chapter.rb +418 -0
  90. data/test/test_book_parameter.rb +42 -0
  91. data/test/test_book_part.rb +50 -0
  92. data/test/test_builder.rb +144 -0
  93. data/test/test_compiler.rb +44 -0
  94. data/test/test_epubmaker.rb +507 -0
  95. data/test/test_helper.rb +27 -0
  96. data/test/test_htmlbuilder.rb +554 -0
  97. data/test/test_htmlutils.rb +28 -0
  98. data/test/test_i18n.rb +64 -0
  99. data/test/test_idgxmlbuilder.rb +589 -0
  100. data/test/test_index.rb +31 -0
  101. data/test/test_latexbuilder.rb +656 -0
  102. data/test/test_lineinput.rb +198 -0
  103. data/test/test_preprocessor.rb +23 -0
  104. data/test/test_textutils.rb +68 -0
  105. data/test/test_topbuilder.rb +244 -0
  106. data/test/test_uuid.rb +156 -0
  107. metadata +161 -0
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+ # = resource.rb -- Message resources for EPUBMaker.
3
+ #
4
+ # Copyright (c) 2010 Kenshi Muto
5
+ #
6
+ # This program is free software.
7
+ # You can distribute or modify this program under the terms of
8
+ # the GNU LGPL, Lesser General Public License version 2.1.
9
+ # For details of the GNU LGPL, see the file "COPYING".
10
+ #
11
+
12
+ module EPUBMaker
13
+
14
+ # EPUBMaker::Resource contains message translation resources for EPUBMaker.
15
+ class Resource
16
+ # Construct message resource object with using +params+["language"] value.
17
+ def initialize(params)
18
+ @hash = nil
19
+ begin
20
+ @hash = __send__ params["language"]
21
+ rescue
22
+ @hash = __send__ :en
23
+ end
24
+
25
+ @hash.each_pair do |k, v|
26
+ @hash[k] = params[k] unless params[k].nil?
27
+ end
28
+ end
29
+
30
+ # Return message translation for +key+.
31
+ def v(key)
32
+ return @hash[key]
33
+ end
34
+
35
+ private
36
+ # English messages.
37
+ def en
38
+ {
39
+ "toctitle" => "Table of Contents",
40
+ "covertitle" => "Cover",
41
+ "titlepagetitle" => "Title Page",
42
+ "colophontitle" => "Colophon",
43
+ "c-aut" => "Author",
44
+ "c-dsr" => "Designer",
45
+ "c-ill" => "Illustrator",
46
+ "c-edt" => "Editor",
47
+ "c-prt" => "Publisher",
48
+ }
49
+ end
50
+
51
+ # Japanese messages.
52
+ def ja
53
+ {
54
+ "toctitle" => "目次",
55
+ "covertitle" => "表紙",
56
+ "titlepagetitle" => "権利表記",
57
+ "colophontitle" => "奥付",
58
+ "c-aut" => "著 者",
59
+ "c-dsr" => "デザイン",
60
+ "c-ill" => "イラスト",
61
+ "c-edt" => "編 集",
62
+ "c-prt" => "発行所",
63
+ }
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,155 @@
1
+ #
2
+ # $Id: lineinput.rb 2226 2006-04-15 03:05:09Z aamine $
3
+ #
4
+ # Copyright (c) 2002-2005 Minero Aoki
5
+ #
6
+ # This program is free software.
7
+ # You can distribute/modify this program under the terms of
8
+ # the GNU LGPL, Lesser General Public License version 2.1.
9
+ #
10
+
11
+ class LineInput
12
+
13
+ def initialize(f)
14
+ @input = f
15
+ @buf = []
16
+ @lineno = 0
17
+ @eof_p = false
18
+ end
19
+
20
+ def inspect
21
+ "\#<#{self.class} file=#{@input.inspect} line=#{lineno()}>"
22
+ end
23
+
24
+ def eof?
25
+ @eof_p
26
+ end
27
+
28
+ def lineno
29
+ @lineno
30
+ end
31
+
32
+ def gets
33
+ unless @buf.empty?
34
+ @lineno += 1
35
+ return @buf.pop
36
+ end
37
+ return nil if @eof_p # to avoid ARGF blocking.
38
+ line = @input.gets
39
+ @eof_p = true unless line
40
+ @lineno += 1
41
+ line
42
+ end
43
+
44
+ def ungets(line)
45
+ return unless line
46
+ @lineno -= 1
47
+ @buf.push line
48
+ line
49
+ end
50
+
51
+ def peek
52
+ line = gets()
53
+ ungets line if line
54
+ line
55
+ end
56
+
57
+ def next?
58
+ peek() ? true : false
59
+ end
60
+
61
+ def skip_blank_lines
62
+ n = 0
63
+ while line = gets()
64
+ unless line.strip.empty?
65
+ ungets line
66
+ return n
67
+ end
68
+ n += 1
69
+ end
70
+ n
71
+ end
72
+
73
+ def gets_if(re)
74
+ line = gets()
75
+ if not line or not (re =~ line)
76
+ ungets line
77
+ return nil
78
+ end
79
+ line
80
+ end
81
+
82
+ def gets_unless(re)
83
+ line = gets()
84
+ if not line or re =~ line
85
+ ungets line
86
+ return nil
87
+ end
88
+ line
89
+ end
90
+
91
+ def each
92
+ while line = gets()
93
+ yield line
94
+ end
95
+ end
96
+
97
+ def while_match(re)
98
+ while line = gets()
99
+ unless re =~ line
100
+ ungets line
101
+ return
102
+ end
103
+ yield line
104
+ end
105
+ nil
106
+ end
107
+
108
+ def getlines_while(re)
109
+ buf = []
110
+ while_match(re) do |line|
111
+ buf.push line
112
+ end
113
+ buf
114
+ end
115
+
116
+ alias span getlines_while # from Haskell
117
+
118
+ def until_match(re)
119
+ while line = gets()
120
+ if re =~ line
121
+ ungets line
122
+ return
123
+ end
124
+ yield line
125
+ end
126
+ nil
127
+ end
128
+
129
+ def getlines_until(re)
130
+ buf = []
131
+ until_match(re) do |line|
132
+ buf.push line
133
+ end
134
+ buf
135
+ end
136
+
137
+ alias break getlines_until # from Haskell
138
+
139
+ def until_terminator(re)
140
+ while line = gets()
141
+ return if re =~ line # discard terminal line
142
+ yield line
143
+ end
144
+ nil
145
+ end
146
+
147
+ def getblock(term_re)
148
+ buf = []
149
+ until_terminator(term_re) do |line|
150
+ buf.push line
151
+ end
152
+ buf
153
+ end
154
+
155
+ end
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/review/*.rb"].sort.each do |path|
2
+ require "review/#{File.basename(path, '.rb')}"
3
+ end
@@ -0,0 +1,46 @@
1
+ #
2
+ # $Id: book.rb 4315 2009-09-02 04:15:24Z kmuto $
3
+ #
4
+ # Copyright (c) 2002-2008 Minero Aoki
5
+ # 2009 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 'review/exception'
14
+ require 'review/extentions'
15
+ require 'forwardable'
16
+ require 'nkf'
17
+
18
+ require 'review/book/base'
19
+ require 'review/book/chapter'
20
+ require 'review/book/part'
21
+ require 'review/book/parameters'
22
+ require 'review/book/page_metric'
23
+ require 'review/book/volume'
24
+ require 'review/book/index'
25
+
26
+ module ReVIEW
27
+ @default_book = nil
28
+
29
+ def ReVIEW.book
30
+ @default_book ||= Book::Base.load_default
31
+ end
32
+
33
+ module Book
34
+ def self.load_default
35
+ Base.load_default
36
+ end
37
+
38
+ def self.load(dir)
39
+ Base.load dir
40
+ end
41
+
42
+ def self.update_rubyenv(dir)
43
+ Base.update_rubyenv dir
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,235 @@
1
+ #
2
+ # $Id: book.rb 4315 2009-09-02 04:15:24Z kmuto $
3
+ #
4
+ # Copyright (c) 2002-2008 Minero Aoki
5
+ # 2009 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
+ module ReVIEW
13
+ module Book
14
+ class Base
15
+
16
+ attr_accessor :param
17
+
18
+ def self.load_default
19
+ %w( . .. ../.. ).each do |basedir|
20
+ if File.file?("#{basedir}/CHAPS")
21
+ book = load(basedir)
22
+ if File.file?("#{basedir}/config.rb")
23
+ book.instance_variable_set("@parameters", Parameters.load("#{basedir}/config.rb"))
24
+ end
25
+ return book
26
+ end
27
+ end
28
+ new('.')
29
+ end
30
+
31
+ def self.load(dir)
32
+ update_rubyenv dir
33
+ new(dir)
34
+ end
35
+
36
+ @basedir_seen = {}
37
+
38
+ def self.update_rubyenv(dir)
39
+ return if @basedir_seen.key?(dir)
40
+ if File.directory?("#{dir}/lib/review")
41
+ $LOAD_PATH.unshift "#{dir}/lib"
42
+ end
43
+ if File.file?("#{dir}/review-ext.rb")
44
+ Kernel.load File.expand_path("#{dir}/review-ext.rb")
45
+ end
46
+ @basedir_seen[dir] = true
47
+ end
48
+
49
+ def initialize(basedir, parameters = Parameters.default)
50
+ @basedir = basedir
51
+ @parameters = parameters
52
+ @parts = nil
53
+ @chapter_index = nil
54
+ end
55
+
56
+ extend Forwardable
57
+ def_delegators '@parameters',
58
+ :chapter_file,
59
+ :part_file,
60
+ :bib_file,
61
+ :reject_file,
62
+ :predef_file,
63
+ :postdef_file,
64
+ :ext,
65
+ :image_dir,
66
+ :image_types,
67
+ :page_metric
68
+
69
+ def parts
70
+ @parts ||= read_parts()
71
+ end
72
+
73
+ def parts_in_file
74
+ parts.find_all{|part| part if part.file? }
75
+ end
76
+
77
+ def part(n)
78
+ parts.detect {|part| part.number == n }
79
+ end
80
+
81
+ def each_part(&block)
82
+ parts.each(&block)
83
+ end
84
+
85
+ def chapters
86
+ parts().map {|p| p.chapters }.flatten
87
+ end
88
+
89
+ def each_chapter(&block)
90
+ chapters.each(&block)
91
+ end
92
+
93
+ def chapter_index
94
+ @chapter_index ||= ChapterIndex.new(chapters())
95
+ @chapter_index
96
+ end
97
+
98
+ def chapter(id)
99
+ chapter_index()[id]
100
+ end
101
+
102
+ def volume
103
+ Volume.sum(chapters.map {|chap| chap.volume })
104
+ end
105
+
106
+ def read_CHAPS
107
+ read_FILE("chapter_file")
108
+ end
109
+
110
+ def read_PREDEF
111
+ read_FILE("predef_file")
112
+ end
113
+
114
+ def read_POSTDEF
115
+ read_FILE("postdef_file")
116
+ end
117
+
118
+ def read_PART
119
+ @read_PART ||= File.read("#{@basedir}/#{part_file}")
120
+ end
121
+
122
+ def part_exist?
123
+ File.exist?("#{@basedir}/#{part_file}")
124
+ end
125
+
126
+ def read_bib
127
+ File.read("#{@basedir}/#{bib_file}")
128
+ end
129
+
130
+ def bib_exist?
131
+ File.exist?("#{@basedir}/#{bib_file}")
132
+ end
133
+
134
+ def prefaces
135
+ if File.file?("#{@basedir}/#{predef_file}")
136
+ begin
137
+ return mkpart_from_namelistfile("#{@basedir}/#{predef_file}")
138
+ rescue FileNotFound => err
139
+ raise FileNotFound, "preface #{err.message}"
140
+ end
141
+ else
142
+ mkpart_from_namelist(%w(preface))
143
+ end
144
+ end
145
+
146
+ def postscripts
147
+ if File.file?("#{@basedir}/#{postdef_file}")
148
+ begin
149
+ return mkpart_from_namelistfile("#{@basedir}/#{postdef_file}")
150
+ rescue FileNotFound => err
151
+ raise FileNotFound, "postscript #{err.message}"
152
+ end
153
+ else
154
+ mkpart_from_namelist(%w(appendix postscript))
155
+ end
156
+ end
157
+
158
+ def basedir
159
+ @basedir
160
+ end
161
+
162
+ private
163
+
164
+ def read_parts
165
+ list = parse_chapters
166
+ if pre = prefaces
167
+ list.unshift pre
168
+ end
169
+ if post = postscripts
170
+ list.push post
171
+ end
172
+ list
173
+ end
174
+
175
+ def parse_chapters
176
+ part = 0
177
+ num = 0
178
+ chap = read_CHAPS()\
179
+ .strip.lines.map {|line| line.strip }.join("\n").split(/\n{2,}/)\
180
+ .map {|part_chunk|
181
+ chaps = part_chunk.split.map {|chapid|
182
+ Chapter.new(self, (num += 1), chapid, "#{@basedir}/#{chapid}")
183
+ }
184
+ if part_exist? && read_PART.split("\n").size >= part
185
+ Part.new(self, (part += 1), chaps, read_PART.split("\n")[part-1])
186
+ else
187
+ Part.new(self, (part += 1), chaps)
188
+ end
189
+ }
190
+ return chap
191
+ end
192
+
193
+ def mkpart_from_namelistfile(path)
194
+ mkpart(File.read(path).split.map {|name| mkchap(name) })
195
+ end
196
+
197
+ def mkpart_from_namelist(names)
198
+ mkpart(names.map {|n| mkchap_ifexist(n) }.compact)
199
+ end
200
+
201
+ def mkpart(chaps)
202
+ chaps.empty? ? nil : Part.new(self, nil, chaps)
203
+ end
204
+
205
+ def mkchap(name)
206
+ name += ext if File.extname(name) == ""
207
+ path = "#{@basedir}/#{name}"
208
+ raise FileNotFound, "file not exist: #{path}" unless File.file?(path)
209
+ Chapter.new(self, nil, name, path)
210
+ end
211
+
212
+ def mkchap_ifexist(id)
213
+ name = "#{id}#{ext()}"
214
+ path = "#{@basedir}/#{name}"
215
+ File.file?(path) ? Chapter.new(self, nil, name, path) : nil
216
+ end
217
+
218
+ def read_FILE(filename)
219
+ res = ""
220
+ File.open("#{@basedir}/#{eval(filename)}") do |f|
221
+ while line = f.gets
222
+ if /\A#/ =~ line
223
+ next
224
+ end
225
+ line.gsub!(/#.*$/, "")
226
+ res << line
227
+ end
228
+ end
229
+ res
230
+ rescue Errno::ENOENT
231
+ Dir.glob("#{@basedir}/*#{ext()}").sort.join("\n")
232
+ end
233
+ end
234
+ end
235
+ end