epuber 0.3.5

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 (206) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +6 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +46 -0
  5. data/bin/epuber +10 -0
  6. data/epuber.gemspec +51 -0
  7. data/lib/epuber.rb +14 -0
  8. data/lib/epuber/book.rb +267 -0
  9. data/lib/epuber/book/contributor.rb +90 -0
  10. data/lib/epuber/book/file_request.rb +68 -0
  11. data/lib/epuber/book/target.rb +284 -0
  12. data/lib/epuber/book/toc_item.rb +130 -0
  13. data/lib/epuber/checker.rb +19 -0
  14. data/lib/epuber/checker/text_checker.rb +129 -0
  15. data/lib/epuber/checker_transformer_base.rb +71 -0
  16. data/lib/epuber/command.rb +65 -0
  17. data/lib/epuber/command/compile.rb +142 -0
  18. data/lib/epuber/command/init.rb +145 -0
  19. data/lib/epuber/command/server.rb +59 -0
  20. data/lib/epuber/compiler.rb +255 -0
  21. data/lib/epuber/compiler/compilation_context.rb +86 -0
  22. data/lib/epuber/compiler/file_finders/abstract.rb +270 -0
  23. data/lib/epuber/compiler/file_finders/imaginary.rb +167 -0
  24. data/lib/epuber/compiler/file_finders/normal.rb +22 -0
  25. data/lib/epuber/compiler/file_resolver.rb +316 -0
  26. data/lib/epuber/compiler/file_types/abstract_file.rb +119 -0
  27. data/lib/epuber/compiler/file_types/bade_file.rb +39 -0
  28. data/lib/epuber/compiler/file_types/container_xml_file.rb +26 -0
  29. data/lib/epuber/compiler/file_types/generated_file.rb +29 -0
  30. data/lib/epuber/compiler/file_types/ibooks_display_options_file.rb +31 -0
  31. data/lib/epuber/compiler/file_types/image_file.rb +42 -0
  32. data/lib/epuber/compiler/file_types/mime_type_file.rb +20 -0
  33. data/lib/epuber/compiler/file_types/nav_file.rb +42 -0
  34. data/lib/epuber/compiler/file_types/opf_file.rb +27 -0
  35. data/lib/epuber/compiler/file_types/source_file.rb +52 -0
  36. data/lib/epuber/compiler/file_types/static_file.rb +18 -0
  37. data/lib/epuber/compiler/file_types/stylus_file.rb +20 -0
  38. data/lib/epuber/compiler/file_types/xhtml_file.rb +102 -0
  39. data/lib/epuber/compiler/generator.rb +67 -0
  40. data/lib/epuber/compiler/meta_inf_generator.rb +41 -0
  41. data/lib/epuber/compiler/nav_generator.rb +201 -0
  42. data/lib/epuber/compiler/opf_generator.rb +284 -0
  43. data/lib/epuber/compiler/xhtml_processor.rb +254 -0
  44. data/lib/epuber/config.rb +133 -0
  45. data/lib/epuber/dsl/attribute.rb +248 -0
  46. data/lib/epuber/dsl/attribute_support.rb +130 -0
  47. data/lib/epuber/dsl/object.rb +145 -0
  48. data/lib/epuber/dsl/tree_object.rb +101 -0
  49. data/lib/epuber/helper.rb +19 -0
  50. data/lib/epuber/lockfile.rb +55 -0
  51. data/lib/epuber/plugin.rb +108 -0
  52. data/lib/epuber/ruby_extensions/match_data.rb +40 -0
  53. data/lib/epuber/ruby_extensions/thread.rb +13 -0
  54. data/lib/epuber/server.rb +614 -0
  55. data/lib/epuber/server/auto_refresh/auto_refresh.coffee +97 -0
  56. data/lib/epuber/server/auto_refresh/connector.coffee +125 -0
  57. data/lib/epuber/server/auto_refresh/protocol.coffee +41 -0
  58. data/lib/epuber/server/auto_refresh/reloader.coffee +261 -0
  59. data/lib/epuber/server/base.styl +3 -0
  60. data/lib/epuber/server/basic.styl +211 -0
  61. data/lib/epuber/server/book_content.styl +39 -0
  62. data/lib/epuber/server/default_cover.png +0 -0
  63. data/lib/epuber/server/fonts/AvenirNext/AvenirNext-Bold.ttf +0 -0
  64. data/lib/epuber/server/fonts/AvenirNext/AvenirNext-BoldItalic.ttf +0 -0
  65. data/lib/epuber/server/fonts/AvenirNext/AvenirNext-Italic.ttf +0 -0
  66. data/lib/epuber/server/fonts/AvenirNext/AvenirNext-Regular.ttf +0 -0
  67. data/lib/epuber/server/handlers.rb +67 -0
  68. data/lib/epuber/server/keyboard_control.coffee +6 -0
  69. data/lib/epuber/server/pages/book.bade +75 -0
  70. data/lib/epuber/server/pages/common.bade +59 -0
  71. data/lib/epuber/server/pages/files.bade +17 -0
  72. data/lib/epuber/server/pages/toc.bade +29 -0
  73. data/lib/epuber/server/support.coffee +10 -0
  74. data/lib/epuber/templates/template.bookspec +143 -0
  75. data/lib/epuber/third_party/bower.rb +22 -0
  76. data/lib/epuber/third_party/bower/bower.json +10 -0
  77. data/lib/epuber/third_party/bower/bower_components/cookies-js/bower.json +10 -0
  78. data/lib/epuber/third_party/bower/bower_components/cookies-js/dist/cookies.d.ts +33 -0
  79. data/lib/epuber/third_party/bower/bower_components/cookies-js/dist/cookies.js +173 -0
  80. data/lib/epuber/third_party/bower/bower_components/cookies-js/dist/cookies.min.js +6 -0
  81. data/lib/epuber/third_party/bower/bower_components/jquery/MIT-LICENSE.txt +21 -0
  82. data/lib/epuber/third_party/bower/bower_components/jquery/bower.json +28 -0
  83. data/lib/epuber/third_party/bower/bower_components/jquery/dist/jquery.js +9210 -0
  84. data/lib/epuber/third_party/bower/bower_components/jquery/dist/jquery.min.js +5 -0
  85. data/lib/epuber/third_party/bower/bower_components/jquery/dist/jquery.min.map +1 -0
  86. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax.js +786 -0
  87. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/jsonp.js +89 -0
  88. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/load.js +75 -0
  89. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  90. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/parseXML.js +28 -0
  91. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/script.js +64 -0
  92. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  93. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  94. data/lib/epuber/third_party/bower/bower_components/jquery/src/ajax/xhr.js +136 -0
  95. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes.js +11 -0
  96. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/attr.js +141 -0
  97. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/classes.js +158 -0
  98. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/prop.js +94 -0
  99. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/support.js +35 -0
  100. data/lib/epuber/third_party/bower/bower_components/jquery/src/attributes/val.js +161 -0
  101. data/lib/epuber/third_party/bower/bower_components/jquery/src/callbacks.js +205 -0
  102. data/lib/epuber/third_party/bower/bower_components/jquery/src/core.js +502 -0
  103. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/access.js +60 -0
  104. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/init.js +123 -0
  105. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/parseHTML.js +39 -0
  106. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/ready.js +97 -0
  107. data/lib/epuber/third_party/bower/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
  108. data/lib/epuber/third_party/bower/bower_components/jquery/src/css.js +450 -0
  109. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/addGetHookIf.js +22 -0
  110. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/curCSS.js +57 -0
  111. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/defaultDisplay.js +70 -0
  112. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  113. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/support.js +96 -0
  114. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/swap.js +28 -0
  115. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  116. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/getStyles.js +12 -0
  117. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/isHidden.js +13 -0
  118. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/rmargin.js +3 -0
  119. data/lib/epuber/third_party/bower/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  120. data/lib/epuber/third_party/bower/bower_components/jquery/src/data.js +178 -0
  121. data/lib/epuber/third_party/bower/bower_components/jquery/src/data/Data.js +181 -0
  122. data/lib/epuber/third_party/bower/bower_components/jquery/src/data/accepts.js +20 -0
  123. data/lib/epuber/third_party/bower/bower_components/jquery/src/data/var/data_priv.js +5 -0
  124. data/lib/epuber/third_party/bower/bower_components/jquery/src/data/var/data_user.js +5 -0
  125. data/lib/epuber/third_party/bower/bower_components/jquery/src/deferred.js +149 -0
  126. data/lib/epuber/third_party/bower/bower_components/jquery/src/deprecated.js +13 -0
  127. data/lib/epuber/third_party/bower/bower_components/jquery/src/dimensions.js +50 -0
  128. data/lib/epuber/third_party/bower/bower_components/jquery/src/effects.js +648 -0
  129. data/lib/epuber/third_party/bower/bower_components/jquery/src/effects/Tween.js +114 -0
  130. data/lib/epuber/third_party/bower/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  131. data/lib/epuber/third_party/bower/bower_components/jquery/src/event.js +868 -0
  132. data/lib/epuber/third_party/bower/bower_components/jquery/src/event/ajax.js +13 -0
  133. data/lib/epuber/third_party/bower/bower_components/jquery/src/event/alias.js +39 -0
  134. data/lib/epuber/third_party/bower/bower_components/jquery/src/event/support.js +9 -0
  135. data/lib/epuber/third_party/bower/bower_components/jquery/src/exports/amd.js +24 -0
  136. data/lib/epuber/third_party/bower/bower_components/jquery/src/exports/global.js +32 -0
  137. data/lib/epuber/third_party/bower/bower_components/jquery/src/intro.js +44 -0
  138. data/lib/epuber/third_party/bower/bower_components/jquery/src/jquery.js +37 -0
  139. data/lib/epuber/third_party/bower/bower_components/jquery/src/manipulation.js +580 -0
  140. data/lib/epuber/third_party/bower/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
  141. data/lib/epuber/third_party/bower/bower_components/jquery/src/manipulation/support.js +32 -0
  142. data/lib/epuber/third_party/bower/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  143. data/lib/epuber/third_party/bower/bower_components/jquery/src/offset.js +207 -0
  144. data/lib/epuber/third_party/bower/bower_components/jquery/src/outro.js +1 -0
  145. data/lib/epuber/third_party/bower/bower_components/jquery/src/queue.js +142 -0
  146. data/lib/epuber/third_party/bower/bower_components/jquery/src/queue/delay.js +22 -0
  147. data/lib/epuber/third_party/bower/bower_components/jquery/src/selector-native.js +172 -0
  148. data/lib/epuber/third_party/bower/bower_components/jquery/src/selector-sizzle.js +14 -0
  149. data/lib/epuber/third_party/bower/bower_components/jquery/src/selector.js +1 -0
  150. data/lib/epuber/third_party/bower/bower_components/jquery/src/serialize.js +111 -0
  151. data/lib/epuber/third_party/bower/bower_components/jquery/src/sizzle/dist/sizzle.js +2067 -0
  152. data/lib/epuber/third_party/bower/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  153. data/lib/epuber/third_party/bower/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  154. data/lib/epuber/third_party/bower/bower_components/jquery/src/traversing.js +199 -0
  155. data/lib/epuber/third_party/bower/bower_components/jquery/src/traversing/findFilter.js +100 -0
  156. data/lib/epuber/third_party/bower/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  157. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/arr.js +3 -0
  158. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/class2type.js +4 -0
  159. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/concat.js +5 -0
  160. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/hasOwn.js +5 -0
  161. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/indexOf.js +5 -0
  162. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/pnum.js +3 -0
  163. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/push.js +5 -0
  164. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/rnotwhite.js +3 -0
  165. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/slice.js +5 -0
  166. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/strundefined.js +3 -0
  167. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/support.js +4 -0
  168. data/lib/epuber/third_party/bower/bower_components/jquery/src/var/toString.js +5 -0
  169. data/lib/epuber/third_party/bower/bower_components/jquery/src/wrap.js +79 -0
  170. data/lib/epuber/third_party/bower/bower_components/keymaster/MIT-LICENSE +20 -0
  171. data/lib/epuber/third_party/bower/bower_components/keymaster/Makefile +4 -0
  172. data/lib/epuber/third_party/bower/bower_components/keymaster/README.markdown +212 -0
  173. data/lib/epuber/third_party/bower/bower_components/keymaster/bower.json +27 -0
  174. data/lib/epuber/third_party/bower/bower_components/keymaster/keymaster.js +296 -0
  175. data/lib/epuber/third_party/bower/bower_components/keymaster/package.json +11 -0
  176. data/lib/epuber/third_party/bower/bower_components/keymaster/test.html +93 -0
  177. data/lib/epuber/third_party/bower/bower_components/spin.js/LICENSE.txt +21 -0
  178. data/lib/epuber/third_party/bower/bower_components/spin.js/README.md +21 -0
  179. data/lib/epuber/third_party/bower/bower_components/spin.js/bower.json +18 -0
  180. data/lib/epuber/third_party/bower/bower_components/spin.js/jquery.spin.js +80 -0
  181. data/lib/epuber/third_party/bower/bower_components/spin.js/spin.js +337 -0
  182. data/lib/epuber/third_party/bower/bower_components/uri.js/LICENSE.txt +21 -0
  183. data/lib/epuber/third_party/bower/bower_components/uri.js/README.md +534 -0
  184. data/lib/epuber/third_party/bower/bower_components/uri.js/bower.json +16 -0
  185. data/lib/epuber/third_party/bower/bower_components/uri.js/contributing.md +19 -0
  186. data/lib/epuber/third_party/bower/bower_components/uri.js/src/IPv6.js +188 -0
  187. data/lib/epuber/third_party/bower/bower_components/uri.js/src/SecondLevelDomains.js +241 -0
  188. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URI.fragmentQuery.js +104 -0
  189. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URI.fragmentURI.js +97 -0
  190. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URI.js +2115 -0
  191. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URI.min.js +86 -0
  192. data/lib/epuber/third_party/bower/bower_components/uri.js/src/URITemplate.js +499 -0
  193. data/lib/epuber/third_party/bower/bower_components/uri.js/src/jquery.URI.js +235 -0
  194. data/lib/epuber/third_party/bower/bower_components/uri.js/src/jquery.URI.min.js +7 -0
  195. data/lib/epuber/third_party/bower/bower_components/uri.js/src/punycode.js +508 -0
  196. data/lib/epuber/transformer.rb +19 -0
  197. data/lib/epuber/transformer/text_transformer.rb +60 -0
  198. data/lib/epuber/user_interface.rb +186 -0
  199. data/lib/epuber/vendor/globals_context.rb +26 -0
  200. data/lib/epuber/vendor/hash_binding.rb +26 -0
  201. data/lib/epuber/vendor/nokogiri_extensions.rb +30 -0
  202. data/lib/epuber/vendor/ruby_templater.rb +71 -0
  203. data/lib/epuber/vendor/size.rb +20 -0
  204. data/lib/epuber/vendor/version.rb +83 -0
  205. data/lib/epuber/version.rb +4 -0
  206. metadata +556 -0
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Epuber
5
+ class Compiler
6
+ module FileTypes
7
+ class AbstractFile
8
+
9
+ # @return [String] relative destination path
10
+ #
11
+ attr_accessor :destination_path
12
+
13
+ # @return [Symbol] group of this file (:text, :image, :font, ...), see Epuber::Compiler::FileFinder::GROUP_EXTENSIONS
14
+ #
15
+ attr_accessor :group
16
+
17
+ # @return [Set<Symbol>] list of properties
18
+ #
19
+ attr_accessor :properties
20
+
21
+ # @return [Set<Symbol>] list of properties
22
+ #
23
+ def properties
24
+ @properties ||= Set.new
25
+ end
26
+
27
+
28
+ # @return [String] final relative destination path from root of the package calculated by FileResolver
29
+ #
30
+ attr_accessor :pkg_destination_path
31
+
32
+ # @return [String] final absolute destination path calculated by FileResolver
33
+ #
34
+ attr_accessor :final_destination_path
35
+
36
+ # @return [Symbol] type of path, one of :spine, :manifest, :package
37
+ #
38
+ attr_accessor :path_type
39
+
40
+
41
+ def ==(other)
42
+ self.class == other.class && final_destination_path == other.final_destination_path
43
+ end
44
+
45
+
46
+ ################################################################################################################
47
+
48
+ # @param [String] source_path
49
+ # @param [String] dest_path
50
+ #
51
+ # @return [Bool]
52
+ #
53
+ def self.file_copy?(source_path, dest_path)
54
+ return false if FileUtils.uptodate?(dest_path, [source_path])
55
+ return false if File.exists?(dest_path) && FileUtils.compare_file(dest_path, source_path)
56
+
57
+ true
58
+ end
59
+
60
+ # @param [String] source_path
61
+ # @param [String] dest_path
62
+ #
63
+ # @return nil
64
+ #
65
+ def self.file_copy(source_path, dest_path)
66
+ return unless file_copy?(source_path, dest_path)
67
+
68
+ file_copy!(source_path, dest_path)
69
+ end
70
+
71
+ # @param [String] source_path
72
+ # @param [String] dest_path
73
+ #
74
+ # @return nil
75
+ #
76
+ def self.file_copy!(source_path, dest_path)
77
+ FileUtils.mkdir_p(File.dirname(dest_path))
78
+
79
+ FileUtils.cp(source_path, dest_path)
80
+ end
81
+
82
+ # @param [String | #to_s] content anything, that can be converted to string and should be written to file
83
+ # @param [String] to_path destination path
84
+ #
85
+ # @return nil
86
+ #
87
+ def self.write_to_file?(content, to_path)
88
+ return true unless File.exists?(to_path)
89
+
90
+ File.read(to_path) != content.to_s
91
+ end
92
+
93
+ # @param [String | #to_s] content anything, that can be converted to string and should be written to file
94
+ # @param [String] to_path destination path
95
+ #
96
+ # @return nil
97
+ #
98
+ def self.write_to_file(content, to_path)
99
+ return unless write_to_file?(content, to_path)
100
+
101
+ write_to_file!(content, to_path)
102
+ end
103
+
104
+ # @param [String | #to_s] content anything, that can be converted to string and should be written to file
105
+ # @param [String] to_path destination path
106
+ #
107
+ # @return nil
108
+ #
109
+ def self.write_to_file!(content, to_path)
110
+ FileUtils.mkdir_p(File.dirname(to_path))
111
+
112
+ File.open(to_path, 'w') do |file_handle|
113
+ file_handle.write(content)
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ require 'bade'
4
+
5
+
6
+ module Epuber
7
+ class Compiler
8
+ module FileTypes
9
+ require_relative 'xhtml_file'
10
+
11
+ class BadeFile < XHTMLFile
12
+ # @param [Epuber::Compiler::CompilationContext] compilation_context
13
+ #
14
+ def process(compilation_context)
15
+ target = compilation_context.target
16
+ book = compilation_context.book
17
+ file_resolver = compilation_context.file_resolver
18
+
19
+ bade_content = load_source(compilation_context)
20
+
21
+ variables = {
22
+ __book: book,
23
+ __target: target,
24
+ __file_resolver: file_resolver,
25
+ __file: self,
26
+ __toc_item: toc_item,
27
+ __const: Hash.new { |_hash, key| UI.warning("Undefined constant with key `#{key}`", location: caller_locations[0]) }.merge!(target.constants),
28
+ }
29
+
30
+ xhtml_content = Bade::Renderer.from_source(bade_content, source_path)
31
+ .with_locals(variables)
32
+ .render(new_line: '', indent: '')
33
+
34
+ write_compiled(common_process(xhtml_content, compilation_context))
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Epuber
5
+ class Compiler
6
+ module FileTypes
7
+ require_relative 'generated_file'
8
+
9
+ class ContainerXMLFile < GeneratedFile
10
+ def initialize
11
+ super
12
+
13
+ self.destination_path = 'META-INF/container.xml'
14
+ self.path_type = :package
15
+ end
16
+
17
+ # @param [Compiler::CompilationContext] compilation_context
18
+ #
19
+ def process(compilation_context)
20
+ gen = MetaInfGenerator.new(compilation_context)
21
+ write_generate(gen.generate_container_xml)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Epuber
5
+ class Compiler
6
+ module FileTypes
7
+ require_relative 'abstract_file'
8
+
9
+ class GeneratedFile < AbstractFile
10
+ # @return [String | #to_s] files content
11
+ #
12
+ attr_accessor :content
13
+
14
+ # @param [Compiler::CompilationContext] compilation_context
15
+ #
16
+ def process(compilation_context)
17
+ write_generate(content.to_s)
18
+ end
19
+
20
+ def write_generate(content)
21
+ if self.class.write_to_file?(content, final_destination_path)
22
+ UI.print_processing_debug_info("Writing generated content to #{pkg_destination_path}")
23
+ self.class.write_to_file!(content, final_destination_path)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Epuber
5
+ class Compiler
6
+ module FileTypes
7
+ require_relative 'generated_file'
8
+
9
+ class IBooksDisplayOptionsFile < GeneratedFile
10
+ def initialize
11
+ super
12
+
13
+ self.destination_path = 'META-INF/com.apple.ibooks.display-options.xml'
14
+ self.path_type = :package
15
+ end
16
+
17
+ # @param [Compiler::CompilationContext] compilation_context
18
+ #
19
+ def process(compilation_context)
20
+ gen = MetaInfGenerator.new(compilation_context)
21
+ write_generate(gen.generate_ibooks_display_options_xml)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+
29
+
30
+
31
+
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rmagick'
4
+
5
+
6
+ module Epuber
7
+ class Compiler
8
+ module FileTypes
9
+ require_relative 'source_file'
10
+
11
+ class ImageFile < SourceFile
12
+ # @param [Compiler::CompilationContext] compilation_context
13
+ #
14
+ def process(compilation_context)
15
+ dest = final_destination_path
16
+ source = abs_source_path
17
+
18
+ return if FileUtils.uptodate?(dest, [source])
19
+
20
+ img = Magick::Image::read(source).first
21
+
22
+ resolution = img.columns * img.rows
23
+ max_resolution = 3_000_000
24
+
25
+ if resolution > max_resolution
26
+ img = img.change_geometry("#{max_resolution}@>") do |width, height, b_img|
27
+ UI.print_processing_debug_info("downscaling from resolution #{b_img.columns}x#{b_img.rows} to #{width}x#{height}")
28
+ b_img.resize!(width, height)
29
+ end
30
+
31
+ FileUtils.mkdir_p(File.dirname(dest))
32
+
33
+ img.write(dest)
34
+ else
35
+ # file is already old
36
+ self.class.file_copy!(source, dest)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Epuber
5
+ class Compiler
6
+ module FileTypes
7
+ require_relative 'generated_file'
8
+
9
+ class MimeTypeFile < GeneratedFile
10
+ def initialize
11
+ super
12
+
13
+ self.path_type = :package
14
+ self.destination_path = 'mimetype'
15
+ self.content = 'application/epub+zip'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Epuber
5
+ class Compiler
6
+ module FileTypes
7
+ require_relative 'generated_file'
8
+
9
+ class NavFile < GeneratedFile
10
+
11
+ # @return [Epuber::Version]
12
+ #
13
+ attr_reader :epub_version
14
+
15
+ # @param [Epuber::Version] epub_version
16
+ #
17
+ def initialize(epub_version)
18
+ super()
19
+
20
+ @epub_version = epub_version
21
+
22
+ properties << :navigation
23
+
24
+ self.destination_path = if epub_version >= 3
25
+ 'nav.xhtml'
26
+ else
27
+ 'nav.ncx'
28
+ end
29
+
30
+ self.path_type = :manifest
31
+ end
32
+
33
+ # @param [Compiler::CompilationContext] compilation_context
34
+ #
35
+ def process(compilation_context)
36
+ gen = NavGenerator.new(compilation_context)
37
+ write_generate(gen.generate_nav.to_s)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Epuber
5
+ class Compiler
6
+ module FileTypes
7
+ require_relative 'generated_file'
8
+
9
+ class OPFFile < GeneratedFile
10
+
11
+ def initialize
12
+ super
13
+
14
+ self.destination_path = File.join(Epuber::Compiler::EPUB_CONTENT_FOLDER, 'content.opf')
15
+ self.path_type = :package
16
+ end
17
+
18
+ # @param [Compiler::CompilationContext] compilation_context
19
+ #
20
+ def process(compilation_context)
21
+ gen = OPFGenerator.new(compilation_context)
22
+ write_generate(gen.generate_opf.to_s)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Epuber
5
+ class Compiler
6
+ module FileTypes
7
+ require_relative 'abstract_file'
8
+
9
+ class SourceFile < AbstractFile
10
+
11
+ # @return [String] relative source path
12
+ #
13
+ attr_reader :source_path
14
+
15
+ # @return [String] absolute source path
16
+ #
17
+ attr_accessor :abs_source_path
18
+
19
+ # @return [Epuber::Book::FileRequest]
20
+ #
21
+ attr_accessor :file_request
22
+
23
+ # @param [String] source_path relative path from project root to source file
24
+ #
25
+ def initialize(source_path)
26
+ @source_path = source_path
27
+ end
28
+
29
+ def default_file_copy
30
+ if self.class.file_copy?(abs_source_path, final_destination_path)
31
+ UI.print_processing_debug_info("Copying to #{pkg_destination_path}")
32
+ self.class.file_copy!(abs_source_path, final_destination_path)
33
+ end
34
+ end
35
+
36
+ def write_compiled(content)
37
+ if self.class.write_to_file?(content, final_destination_path)
38
+ UI.print_processing_debug_info("Writing compiled version to #{pkg_destination_path}")
39
+ self.class.write_to_file!(content, final_destination_path)
40
+ end
41
+ end
42
+
43
+ def write_processed(content)
44
+ if self.class.write_to_file?(content, final_destination_path)
45
+ UI.print_processing_debug_info("Writing processed version to #{pkg_destination_path}")
46
+ self.class.write_to_file!(content, final_destination_path)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Epuber
5
+ class Compiler
6
+ module FileTypes
7
+ require_relative 'source_file'
8
+
9
+ class StaticFile < SourceFile
10
+ # @param [Compiler::CompilationContext] compilation_context
11
+ #
12
+ def process(compilation_context)
13
+ default_file_copy
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end