sc2epub 0.0.3 → 0.0.4

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.
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ = 0.0.4
2
+ Rewrite directory recursion to loop. for performance.
3
+ Fix bug in Makefile
4
+
1
5
  = 0.0.3
2
6
  Rewrite some class.
3
7
  Add encoding-convert.
@@ -1,5 +1,5 @@
1
1
  class Sc2epub::Converter
2
- require 'kconv'
2
+ require 'nkf'
3
3
  require 'fileutils'
4
4
  def initialize env, root, output
5
5
  @root = path(root)
@@ -73,17 +73,18 @@ class Sc2epub::Converter
73
73
  end
74
74
  end
75
75
  def dofile path
76
- if File::extname(path) == '.html' or File::extname(path) == '.xhtml'
76
+ ext = File::extname(path)
77
+ if ext == '.html' or ext == '.xhtml' or ext == '.jpg' or ext == '.gif' or ext == '.png'
77
78
  FileUtils::cp(path, @output)
78
79
  return
79
80
  end
80
81
  output = @output
81
82
  s = open(path){|io|io.read}
82
- enc = Kconv::guess(s)
83
- if enc==Kconv::BINARY
83
+ enc = NKF::guess(s)
84
+ if enc==NKF::BINARY
84
85
  return nil
85
- elsif enc!=Kconv::UTF8
86
- s = s.toutf8
86
+ elsif enc!=NKF::ASCII and enc!=NKF::UTF8
87
+ s = NKF::nkf('-wxm0', s)
87
88
  end
88
89
  title = title(local(path))
89
90
  s = @template.xhtml('title'=>local(path), 'body'=>s)
@@ -101,18 +102,31 @@ class Sc2epub::Converter
101
102
  end
102
103
  def dodir dir
103
104
  return [] if File::basename(dir)=~/^\..*/
104
- @dirstack.push({:name =>local(dir), :src =>nil,
105
+ @dirstack.push({:name =>local(dir), :src =>nil, :path => dir,
105
106
  :type => :dir, :level => @dirstack.size})
106
- Dir::foreach(dir) do |i|
107
- next if i=="."||i==".."
108
- path = File::join(dir, i)
109
- if FileTest::directory? path
110
- dodir(path)
111
- elsif FileTest::file? path
112
- dofile(path)
107
+ cache = {}
108
+ until(@dirstack.empty?)
109
+ dir = @dirstack.last[:path]
110
+ flag = false
111
+ Dir::foreach(dir) do |i|
112
+ next if i=="."||i==".."
113
+ path = File::join(dir, i)
114
+ next if cache[path]
115
+ if FileTest::directory? path
116
+ @dirstack.push({:name =>local(path), :src =>nil, :path => path,
117
+ :type => :dir, :level => @dirstack.size})
118
+ flag = true
119
+ break
120
+ elsif FileTest::file? path
121
+ dofile(path)
122
+ cache[path] = true
123
+ end
124
+ end
125
+ unless flag
126
+ done = @dirstack.pop
127
+ cache[done[:path]] = true
113
128
  end
114
129
  end
115
- @dirstack.pop
116
130
  end
117
131
  def doroot dir
118
132
  dir = path(dir)
@@ -11,8 +11,8 @@ kindle: $(MOBI)
11
11
 
12
12
  .PHONY: clean
13
13
  clean:
14
- find ./ -name "*.epub" -exec rm {} \\;
15
- find ./ -name "*.mobi" -exec rm {} \\;
14
+ find ./ -name "*.epub" -exec rm {} \;
15
+ find ./ -name "*.mobi" -exec rm {} \;
16
16
 
17
17
  $(EPUB):
18
18
  zip -Xr9D $(EPUB) mimetype META-INF toc.ncx $(PROJECT).opf
data/lib/sc2epub.rb CHANGED
@@ -2,5 +2,5 @@ module Sc2epub
2
2
  require 'sc2epub/converter'
3
3
  require 'sc2epub/template'
4
4
  require 'sc2epub/main'
5
- VERSION = "0.0.3"
5
+ VERSION = "0.0.4"
6
6
  end
data/sc2epub.gemspec CHANGED
@@ -11,8 +11,7 @@ GEMSPEC = Gem::Specification::new do |s|
11
11
  s.required_ruby_version = '>= 1.8.6'
12
12
  s.executables = ['sc2epub']
13
13
  s.default_executable = 'sc2epub'
14
-
15
- s.files = Dir::glob("{lib,bin}/**/*") + ['sc2epub.gemspec', 'README', 'CHANGES']
14
+ s.files = Dir::glob("{lib,bin,test}/**/*") + ['sc2epub.gemspec', 'README', 'CHANGES']
16
15
  s.has_rdoc = false
17
16
  s.homepage = 'https://github.com/takada-at/sc2epub'
18
17
  s.rubyforge_project = 'sc2epub'
@@ -0,0 +1,100 @@
1
+ require 'rubygems'
2
+ require 'lib/sc2epub'
3
+
4
+ describe Sc2epub::Converter, 'when on html' do
5
+ before(:all) do
6
+ @in = File::join(File::dirname(__FILE__), 'in')
7
+ @out = File::join(File::dirname(__FILE__), 'out')
8
+ `rm -r #{@in}` if FileTest::exists? @in
9
+ `rm -r #{@out}` if FileTest::exists? @out
10
+ `mkdir #{@in}`
11
+ `mkdir #{@out}`
12
+ open(File::join(@in, 'some.html'), 'w') do |io|
13
+ io.write('<html></html>')
14
+ end
15
+ open(File::join(@in, 'some.rb'), 'w') do |io|
16
+ io.write('puts "hello"')
17
+ end
18
+ @converter = Sc2epub::Converter::new({:author => 'test', :lang => 'en'}, @in, @out)
19
+ @converter.doroot(@in)
20
+ @converter.dogenerate('test')
21
+ end
22
+ it 'should copy html' do
23
+ FileTest.should be_exists(File::join(@out, 'some.html'))
24
+ end
25
+ it 'should rewrite source code' do
26
+ FileTest.should be_exists(File::join(@out, 'some_rb.html'))
27
+ end
28
+ it 'should not rewrite html' do
29
+ FileTest.should_not be_exists(File::join(@out, 'some_html.html'))
30
+ end
31
+ after(:all) do
32
+ `rm -r #{@in}` if FileTest::exists? @in
33
+ `rm -r #{@out}` if FileTest::exists? @out
34
+ end
35
+ end
36
+ describe Sc2epub::Converter, 'when on sc2epub/lib'do
37
+ before(:all) do
38
+ @lib = File::join(File::dirname(__FILE__), '../lib')
39
+ @out = File::join(File::dirname(__FILE__), 'out')
40
+ `mkdir #{@out}`
41
+ @converter = Sc2epub::Converter::new({:author => 'test', :lang => 'en'}, @lib, @out)
42
+ @converter.doroot(@lib)
43
+ @converter.dogenerate('test')
44
+ end
45
+ it 'should create META-INF and container.xml' do
46
+ FileTest.should be_exists(File::join(@out, 'META-INF'))
47
+ FileTest.should be_directory(File::join(@out, 'META-INF'))
48
+ FileTest.should be_exists(File::join(@out, 'META-INF', 'container.xml'))
49
+ end
50
+ it 'should create mimetype' do
51
+ FileTest.should be_exists(File::join(@out, 'mimetype'))
52
+ end
53
+ it 'should create Makefile' do
54
+ FileTest.should be_exists(File::join(@out, 'Makefile'))
55
+ end
56
+ it 'should create toc.ncx, test.opf' do
57
+ FileTest.should be_exists(File::join(@out, 'toc.ncx'))
58
+ FileTest.should be_exists(File::join(@out, 'test.opf'))
59
+ end
60
+ it 'should create "sc2epub_rb.html"' do
61
+ FileTest.should be_exists(File::join(@out, 'sc2epub_rb.html'))
62
+ end
63
+ it 'should create "sc2epub_converter_rb.html"' do
64
+ FileTest.should be_exists(File::join(@out, 'sc2epub_converter_rb.html'))
65
+ end
66
+ it 'should create html for any file in directory' do
67
+ checkfile = lambda do |f|
68
+ return if File::extname(f)=='.jpg'
69
+ f = @converter.path(f)
70
+ html = @converter.title(@converter.local(f))+'.html'
71
+ FileTest.should be_exists(File::join(@out, html))
72
+ end
73
+ checkdir = lambda do |d|
74
+ Dir::foreach(d) do |c|
75
+ next if c == '.' or c == '..'
76
+ path = File::join(d, c)
77
+ if FileTest::file? path
78
+ checkfile.call(path)
79
+ elsif FileTest::directory? path
80
+ checkdir.call(path)
81
+ end
82
+ end
83
+ end
84
+ checkdir.call(@lib)
85
+ end
86
+ it 'should have "test" in title' do
87
+ s = open(File::join(@out, 'test.opf')){|io|io.read}
88
+ /<dc:Title>(.*)<\/dc:Title>/.match(s).should_not be(nil)
89
+ Regexp::last_match[1].should == 'test'
90
+ /<dc:Language>(.*)<\/dc:Language>/.match(s).should_not be(nil)
91
+ Regexp::last_match[1].should == 'en'
92
+ /<dc:Creator>(.*)<\/dc:Creator>/.match(s).should_not be(nil)
93
+ Regexp::last_match[1].should == 'test'
94
+ end
95
+ after(:all) do
96
+ if FileTest::exists? @out
97
+ `rm -r #{@out}`
98
+ end
99
+ end
100
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - takada-at
@@ -41,6 +41,7 @@ files:
41
41
  - lib/sc2epub/converter.rb
42
42
  - lib/sc2epub/main.rb
43
43
  - bin/sc2epub
44
+ - test/sc2epubspec.rb
44
45
  - sc2epub.gemspec
45
46
  - README
46
47
  - CHANGES