epuber 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e871217ca7b9c9c84e676c2fc93b3e06020e5b9e
4
+ data.tar.gz: 3dda7ef83f00653bfede17172fc5132fb93e1c93
5
+ SHA512:
6
+ metadata.gz: 05d7c9075a019fc65e02b388cc98ac5aa640d3a42092732894a547fd41406e8d92847ed7dcf2ce491bddea5c376c018b95ef2a6c129e0f75b6af48f950a0d99e
7
+ data.tar.gz: e4b805811f7d2fba1e1bf143b13eecee70390621198ed871185698b2ee6db571ead5d5f4dba775536c9f0f2e6da4f5d0564acadcdd58105280410a47c93c2421
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in Epuber.gemspec
6
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Roman Kříž
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,46 @@
1
+ # Epuber
2
+
3
+ [![Build Status](https://travis-ci.org/epuber-io/epuber.svg?branch=master)](https://travis-ci.org/epuber-io/epuber)
4
+
5
+ Epuber is simple tool to compile and pack source files into EPUB format. Offers to define multiple "targets" which allows to create multiple versions of the book by running only one command. Eliminates copying code and information, eliminates needs to use _git_ branches to differ ebook content.
6
+
7
+
8
+ ## Features
9
+
10
+ - creating multiple versions of book with requirement to maintain only one source (e.g. for iBooks, Google Play, ...)
11
+ - defined constants are usable in almost all source files
12
+ - using template engines (currenlty only [Bade](https://github.com/epuber-io/bade)), css preprocessors (currently only Stylus) and standard EPUB formats at the same time
13
+ - have local development server which
14
+ - automatically refresh web browser when some source file changes
15
+ - quick jumping to next page with arrow keys on keyboard
16
+ - supports EPUB 2 and 3 + MOBI
17
+
18
+
19
+ ## Installation
20
+
21
+ Installation is easy, just type following line to terminal:
22
+
23
+ $ gem install epuber
24
+
25
+
26
+ ## Development
27
+
28
+ After checking out the repo, run `bundle install` to install dependencies. Then, run `rake spec` to run the tests.
29
+
30
+ To install this gem onto your local machine, run `bundle exec rake install`.
31
+
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/samnung/bade. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
36
+
37
+
38
+ ## TODO
39
+
40
+ - [ ] move all cards from Trello to GitHub
41
+ - [ ] create documentation
42
+ - [ ] create several examples of book specification
43
+
44
+ ## License
45
+
46
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby -Ku
2
+ # encoding: utf-8
3
+
4
+ lib = File.expand_path('../lib', File.dirname(__FILE__))
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+
7
+ require 'epuber'
8
+
9
+
10
+ Epuber::Command.run(ARGV)
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'epuber/version'
7
+
8
+
9
+ Gem::Specification.new do |spec|
10
+ spec.name = 'epuber'
11
+ spec.version = Epuber::VERSION
12
+ spec.authors = ['Roman Kříž']
13
+ spec.email = ['samnung@gmail.com']
14
+ spec.summary = 'Epuber is simple tool to compile and pack source files into EPUB format.'
15
+ spec.homepage = 'https://github.com/epuber-io/epuber'
16
+ spec.license = 'MIT'
17
+
18
+ spec.files = Dir['bin/**/*'] + Dir['lib/**/*'] + %w(epuber.gemspec Gemfile LICENSE.txt README.md)
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_runtime_dependency 'activesupport', '~> 4.2'
24
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6'
25
+ spec.add_runtime_dependency 'mime-types', '~> 2.4'
26
+ spec.add_runtime_dependency 'claide', '~> 0.8'
27
+ spec.add_runtime_dependency 'listen', '~> 3.0'
28
+ spec.add_runtime_dependency 'os', '~> 0.9'
29
+
30
+ spec.add_runtime_dependency 'stylus', '~> 1.0'
31
+ spec.add_runtime_dependency 'coffee-script', '~> 2.4'
32
+
33
+ spec.add_runtime_dependency 'sinatra', '~> 1.4'
34
+ spec.add_runtime_dependency 'sinatra-websocket', '~> 0.3'
35
+ spec.add_runtime_dependency 'sinatra-contrib', '~> 1.4'
36
+ spec.add_runtime_dependency 'thin', '~> 1.6'
37
+
38
+ spec.add_runtime_dependency 'rmagick', '~> 2.14'
39
+
40
+ spec.add_runtime_dependency 'rubyzip', '~> 1.0'
41
+
42
+ spec.add_runtime_dependency 'epubcheck', '~> 3.0', '>= 3.0.1'
43
+
44
+ spec.add_runtime_dependency 'bade', '>= 0.1.3', '< 1.0.0'
45
+
46
+ spec.add_development_dependency 'bundler', '~> 1'
47
+ spec.add_development_dependency 'rspec', '~> 3.2'
48
+ spec.add_development_dependency 'rubocop', '~> 0.29'
49
+ spec.add_development_dependency 'rake', '~> 10.4'
50
+ spec.add_development_dependency 'fakefs', '~> 0.6'
51
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+
3
+ module Epuber
4
+ require_relative 'epuber/version'
5
+
6
+ require 'bundler/setup'
7
+
8
+ autoload :Book, 'epuber/book'
9
+ autoload :Command, 'epuber/command'
10
+ autoload :Compiler, 'epuber/compiler'
11
+ autoload :Config, 'epuber/config'
12
+ autoload :UI, 'epuber/user_interface'
13
+ autoload :UserInterface, 'epuber/user_interface'
14
+ end
@@ -0,0 +1,267 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative 'dsl/object'
4
+
5
+
6
+ module Epuber
7
+ class Book < DSL::Object
8
+ require_relative 'book/contributor'
9
+ require_relative 'book/target'
10
+ require_relative 'book/toc_item'
11
+ require_relative 'book/file_request'
12
+
13
+ class StandardError < ::StandardError; end
14
+
15
+ def initialize
16
+ super
17
+
18
+ @default_target = Target.new(nil)
19
+ @toc_blocks = []
20
+
21
+ yield self if block_given?
22
+ end
23
+
24
+ # @return nil
25
+ #
26
+ def finish_toc
27
+ @toc_blocks.each do |block|
28
+ flat_all_targets.each do |target|
29
+ target.toc(&block)
30
+ end
31
+ end
32
+ end
33
+
34
+ # @return nil
35
+ #
36
+ def validate
37
+ super
38
+ @default_target.validate
39
+ end
40
+
41
+ # @return nil
42
+ #
43
+ def freeze
44
+ super
45
+ @default_target.freeze
46
+ end
47
+
48
+ # @return [Epuber::Book::Target]
49
+ #
50
+ attr_reader :default_target
51
+
52
+
53
+ # Defines setter and getter for default target attribute
54
+ #
55
+ # @param [Symbol] sym attribute name
56
+ #
57
+ # @return [Void]
58
+ #
59
+ def self.default_target_attribute(sym, readonly: false)
60
+ # getter
61
+ define_method(sym) do
62
+ @default_target.send(sym)
63
+ end
64
+
65
+ unless readonly
66
+ # setter
67
+ setter_method = sym.to_s + '='
68
+ define_method(setter_method) do |newValue|
69
+ @default_target.send(setter_method, newValue)
70
+ end
71
+ end
72
+ end
73
+
74
+
75
+ #-------------- Targets ----------------------------------
76
+
77
+ # All targets
78
+ #
79
+ # @return [Array<Target>]
80
+ #
81
+ def targets
82
+ if @default_target.sub_targets.length == 0
83
+ [@default_target]
84
+ else
85
+ @default_target.sub_targets
86
+ end
87
+ end
88
+
89
+ def flat_all_targets
90
+ if @default_target.sub_targets.length == 0
91
+ [@default_target]
92
+ else
93
+ @default_target.flat_sub_items
94
+ end
95
+ end
96
+
97
+ # Defines new target
98
+ #
99
+ # @return [Target] result target
100
+ #
101
+ def target(name)
102
+ @default_target.sub_target(name) do |target|
103
+ target.book = self
104
+ yield target if block_given?
105
+ end
106
+ end
107
+
108
+
109
+ #-------------- TOC --------------------------------------
110
+
111
+ # @return nil
112
+ #
113
+ def toc(&block)
114
+ @toc_blocks << block
115
+ end
116
+
117
+ #------------- DSL attributes ------------------------------------------------------------------------------------
118
+
119
+ # @return [String] title of book
120
+ #
121
+ attribute :title,
122
+ required: true
123
+
124
+ # @return [String] subtitle of book
125
+ #
126
+ attribute :subtitle
127
+
128
+ # @return [Array<Contributor>] authors of book
129
+ #
130
+ attribute :authors,
131
+ types: [Contributor, NormalContributor],
132
+ container: Array,
133
+ required: true,
134
+ singularize: true,
135
+ auto_convert: { [String, Hash] => ->(value) { Contributor.from_obj(value, 'aut') } }
136
+
137
+
138
+ # @return [String] publisher name
139
+ #
140
+ attribute :publisher
141
+
142
+ # @return [String] language of this book
143
+ #
144
+ attribute :language
145
+
146
+ # @return [Bool] book is for iBooks
147
+ #
148
+ default_target_attribute :is_ibooks
149
+
150
+ # @return [String] isbn of this book
151
+ #
152
+ default_target_attribute :isbn
153
+
154
+ # @return [String|Fixnum] epub version
155
+ #
156
+ default_target_attribute :epub_version
157
+
158
+ # @return [Bool] book uses custom fonts (used only for iBooks)
159
+ #
160
+ default_target_attribute :custom_fonts
161
+
162
+ # @return [Bool] whether the book uses fixed layout
163
+ #
164
+ default_target_attribute :fixed_layout
165
+
166
+ # @return [String] path or name of cover image
167
+ #
168
+ default_target_attribute :cover_image
169
+
170
+ # @return [Size] default view port size
171
+ #
172
+ default_target_attribute :default_viewport
173
+
174
+ # @return [Bool] whether the target should create mobi
175
+ #
176
+ default_target_attribute :create_mobi
177
+
178
+
179
+ # @return [String] isbn of printed book
180
+ #
181
+ attribute :print_isbn
182
+
183
+ # @return [Date] date of book was published
184
+ #
185
+ attribute :published,
186
+ types: [Date],
187
+ auto_convert: { String => Date }
188
+
189
+
190
+ # @return [Version] book version
191
+ # @note Is used only for ibooks versions
192
+ #
193
+ attribute :version,
194
+ inherited: true,
195
+ types: [Version],
196
+ auto_convert: { [String, Fixnum, Float] => Version }
197
+
198
+ # @return [String] build version of book
199
+ #
200
+ attribute :build_version,
201
+ types: [Version],
202
+ auto_convert: { [String, Fixnum, Float] => Version }
203
+
204
+ # @return [String] base name for output epub file
205
+ #
206
+ attribute :output_base_name,
207
+ inherited: true
208
+
209
+
210
+ # Add file to book, see {Target#add_file} to more details
211
+ #
212
+ def add_file(*args)
213
+ @default_target.add_file(*args)
214
+ end
215
+
216
+ # Add files to book, see Target#add_files to more details
217
+ #
218
+ def add_files(*file_paths)
219
+ @default_target.add_files(*file_paths)
220
+ end
221
+
222
+
223
+ # Add constant to target, constants can be used within text files
224
+ #
225
+ def add_const(*args)
226
+ @default_target.add_const(*args)
227
+ end
228
+
229
+ # Add default styles to default target, default styles will be automatically added to xhtml document
230
+ #
231
+ def add_default_style(*file_paths)
232
+ @default_target.add_default_style(*file_paths)
233
+ end
234
+
235
+ # Add default styles to default target, default styles will be automatically added to xhtml document
236
+ #
237
+ def add_default_styles(*file_paths)
238
+ @default_target.add_default_styles(*file_paths)
239
+ end
240
+
241
+ def use(path)
242
+ @default_target.use(path)
243
+ end
244
+
245
+
246
+
247
+ # --------------------------------------------------------------------- #
248
+ # @!group Other methods
249
+
250
+ # Finds target with name or nil when not found
251
+ #
252
+ # @param target_name [Symbol, String, Epuber::Book::Target]
253
+ #
254
+ # @return [Epuber::Book::Target, nil]
255
+ #
256
+ def target_named(target_name)
257
+ return target_name if target_name.is_a?(Epuber::Book::Target)
258
+
259
+ targets.find do |target|
260
+ target.name == target_name || target.name.to_s == target_name.to_s
261
+ end
262
+ end
263
+
264
+ # TODO: footnotes customization
265
+ # TODO: custom metadata
266
+ end
267
+ end
@@ -0,0 +1,90 @@
1
+ # encoding: utf-8
2
+
3
+ module Epuber
4
+ class Book
5
+ class Contributor
6
+ # File-as of contributor used in .opf file
7
+ # @return [String] pretty name
8
+ #
9
+ attr_reader :file_as
10
+
11
+ # Pretty name of contributor used in .opf file and copyright page
12
+ # @return [String] pretty name
13
+ #
14
+ attr_reader :pretty_name
15
+
16
+ # Role of contributor
17
+ # @return [String] role
18
+ #
19
+ attr_reader :role
20
+
21
+
22
+ # @param [String] pretty_name pretty name of contributor
23
+ # @param [String] file_as file as of contributor
24
+ # @param [String] role contributor role
25
+ #
26
+ def initialize(pretty_name, file_as, role)
27
+ @file_as = file_as
28
+ @pretty_name = pretty_name
29
+ @role = role
30
+ end
31
+
32
+ # Creates new instance of Contributor dependent on obj content
33
+ #
34
+ # @param obj [Hash<Symbol, String>, Array<Hash<Symbol,String>, String, Array<String>] input object
35
+ # @param role [String] role of contributor
36
+ #
37
+ # @return [Contributor]
38
+ #
39
+ def self.from_obj(obj, role)
40
+ if obj.is_a?(String)
41
+ components = obj.split(' ')
42
+ if components.length >= 2
43
+ NormalContributor.new(components.first(components.length - 1).join(' '), components.last, role)
44
+ end
45
+ elsif obj.is_a?(Hash)
46
+ if obj.key?(:first_name)
47
+ NormalContributor.new(obj[:first_name], obj[:last_name], role)
48
+ elsif obj.key?(:file_as)
49
+ Contributor.new(obj[:pretty_name], obj[:file_as], role)
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ class NormalContributor < Contributor
56
+ # @return [String] first name of contributor
57
+ #
58
+ attr_accessor :first_name
59
+
60
+ # @return [String] last name of contributor
61
+ #
62
+ attr_accessor :last_name
63
+
64
+
65
+ # @param [String] first_name first name of contributor
66
+ # @param [String] last_name last name of contributor
67
+ # @param [String] role contributor role
68
+ #
69
+ def initialize(first_name, last_name, role)
70
+ super(nil, nil, role)
71
+
72
+ @first_name = first_name
73
+ @last_name = last_name
74
+ end
75
+
76
+
77
+ # @return [String]
78
+ #
79
+ def pretty_name
80
+ "#{@first_name} #{@last_name}"
81
+ end
82
+
83
+ # @return [String]
84
+ #
85
+ def file_as
86
+ "#{@last_name.mb_chars.upcase}, #{@first_name}"
87
+ end
88
+ end
89
+ end
90
+ end