repub 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,178 +0,0 @@
1
- require 'rubygems'
2
- require 'builder'
3
-
4
- module Repub
5
- module Epub
6
-
7
- class Content
8
-
9
- def initialize(uid)
10
- @metadata = Metadata.new('Untitled', 'en', uid, Date.today.to_s)
11
- @manifest_items = []
12
- @spine_items = []
13
- @manifest_items << ContentItem.new('ncx', 'toc.ncx')
14
- end
15
-
16
- class Metadata < Struct.new(
17
- :title,
18
- :language,
19
- :identifier,
20
- :date,
21
- :subject,
22
- :description,
23
- :relation,
24
- :creator,
25
- :publisher,
26
- :rights
27
- )
28
- end
29
-
30
- attr_reader :metadata
31
-
32
- def add_item(href, id = nil)
33
- item = ContentItem.new(id || "item_#{@manifest_items.size}", href)
34
- @manifest_items << item
35
- @spine_items << item if item.document?
36
- end
37
-
38
- #def add_stylesheet(href, id = nil)
39
- # @manifest_items << ContentItem.new(id || "css_#{@css_counter += 1}", href, 'text/css')
40
- #end
41
- #
42
- #def add_image(href, id = nil)
43
- # image_type = case(href.strip.downcase)
44
- # when /.*\.(jpeg|jpg)$/
45
- # 'image/jpeg'
46
- # when /.*\.png$/
47
- # 'image/png'
48
- # when /.*\.gif$/
49
- # 'image/gif'
50
- # when /.*\.svg$/
51
- # 'image/svg+xml'
52
- # else
53
- # raise 'Unsupported image type'
54
- # end
55
- # @manifest_items << ContentItem.new(id || "img_#{@img_counter += 1}", href, image_type)
56
- #end
57
- #
58
- #def add_document(href, id = nil)
59
- # manifest_item = ContentItem.new(id || "item_#{@html_counter += 1}", href, 'application/xhtml+xml')
60
- # @manifest_items << manifest_item
61
- # @spine_items << manifest_item
62
- #end
63
-
64
- def to_xml
65
- out = ''
66
- builder = Builder::XmlMarkup.new(:target => out)
67
- builder.instruct!
68
- builder.package :xmlns => "http://www.idpf.org/2007/opf",
69
- 'unique-identifier' => "dcidid",
70
- 'version' => "2.0" do
71
- metadata_to_xml(builder)
72
- manifest_to_xml(@manifest_items, builder)
73
- spine_to_xml(@spine_items, builder)
74
- end
75
- out
76
- end
77
-
78
- def save(path = 'content.opf')
79
- File.open(path, 'w') do |f|
80
- f << to_xml
81
- end
82
- end
83
-
84
- private
85
-
86
- def metadata_to_xml(builder)
87
- builder.metadata 'xmlns:dc' => "http://purl.org/dc/elements/1.1/",
88
- 'xmlns:dcterms' => "http://purl.org/dc/terms/",
89
- 'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
90
- 'xmlns:opf' => "http://www.idpf.org/2007/opf" do
91
- # Required elements
92
- builder.dc :title do
93
- builder << @metadata.title
94
- end
95
- builder.dc :language, 'xsi:type' => "dcterms:RFC3066" do
96
- builder << @metadata.language
97
- end
98
- builder.dc :identifier, :id => 'dcidid', 'opf:scheme' => 'URI' do
99
- builder << @metadata.identifier
100
- end
101
- # Optional elements
102
- builder.dc :subject do
103
- builder << @metadata.subject
104
- end if @metadata.subject
105
- builder.dc :description do
106
- builder << @metadata.description
107
- end if @metadata.description
108
- builder.dc :relation do
109
- builder << @metadata.relation
110
- end if @metadata.relation
111
- builder.dc :creator do
112
- builder << @metadata.creator
113
- end if @metadata.creator
114
- builder.dc :publisher do
115
- builder << @metadata.publisher
116
- end if @metadata.publisher
117
- builder.dc :date do
118
- builder << @metadata.date.to_s
119
- end if @metadata.date
120
- builder.dc :rights do
121
- builder << @metadata.rights
122
- end if @metadata.rights
123
- end
124
- end
125
-
126
- class ContentItem < Struct.new(
127
- :id,
128
- :href,
129
- :media_type
130
- )
131
-
132
- def initialize(id, href)
133
- super(id, href)
134
- self.media_type = case href.strip.downcase
135
- when /.*\.html?$/
136
- 'application/xhtml+xml'
137
- when /.*\.css$/
138
- 'text/css'
139
- when /.*\.(jpeg|jpg)$/
140
- 'image/jpeg'
141
- when /.*\.png$/
142
- 'image/png'
143
- when /.*\.gif$/
144
- 'image/gif'
145
- when /.*\.svg$/
146
- 'image/svg+xml'
147
- when /.*\.ncx$/
148
- 'application/x-dtbncx+xml'
149
- else
150
- raise 'Unknown media type'
151
- end
152
- end
153
-
154
- def document?
155
- self.media_type == 'application/xhtml+xml'
156
- end
157
- end
158
-
159
- def manifest_to_xml(manifest_items, builder)
160
- builder.manifest do
161
- manifest_items.each do |i|
162
- builder.item :id => i[:id], :href => i[:href], 'media-type' => i[:media_type]
163
- end
164
- end
165
- end
166
-
167
- def spine_to_xml(spine_items, builder)
168
- builder.spine do
169
- spine_items.each do |i|
170
- builder.itemref :idref => i[:id]
171
- end
172
- end
173
- end
174
-
175
- end
176
-
177
- end
178
- end
@@ -1,15 +0,0 @@
1
- require 'test/unit'
2
- require 'rubygems'
3
- require 'nokogiri'
4
- require 'repub/epub'
5
-
6
- class TestContainer < Test::Unit::TestCase
7
- def test_container_create
8
- c = Repub::Epub::Container.new
9
- s = c.to_xml
10
- doc = Nokogiri::XML.parse(s)
11
- assert_not_nil(doc.at('rootfile'))
12
- assert_equal('content.opf', doc.at('rootfile')['full-path'])
13
- assert_equal('application/oebps-package+xml', doc.at('rootfile')['media-type'])
14
- end
15
- end