tmtms-review 1.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.
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