shoesgem 0.1424.0 → 0.1426.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (320) hide show
  1. data/README.rdoc +3 -0
  2. data/shoes/CHANGELOG.txt +21 -21
  3. data/shoes/COPYING.txt +30 -30
  4. data/shoes/VERSION.txt +1 -1
  5. data/shoes/freetype6.dll +0 -0
  6. data/shoes/lib/shoes/cache.rb +54 -54
  7. data/shoes/lib/shoes/data.rb +39 -39
  8. data/shoes/lib/shoes/help.rb +421 -421
  9. data/shoes/lib/shoes/image.rb +25 -25
  10. data/shoes/lib/shoes/inspect.rb +128 -128
  11. data/shoes/lib/shoes/log.rb +48 -48
  12. data/shoes/lib/shoes/minitar.rb +986 -986
  13. data/shoes/lib/shoes/override.rb +38 -38
  14. data/shoes/lib/shoes/pack.rb +503 -503
  15. data/shoes/lib/shoes/search.rb +46 -46
  16. data/shoes/lib/shoes/setup.rb +329 -329
  17. data/shoes/lib/shoes/shy.rb +131 -131
  18. data/shoes/lib/shoes/shybuilder.rb +44 -44
  19. data/shoes/lib/shoes.rb +522 -522
  20. data/shoes/libcairo-2.dll +0 -0
  21. data/shoes/libeay32.dll +0 -0
  22. data/shoes/libexpat-1.dll +0 -0
  23. data/shoes/libfontconfig-1.dll +0 -0
  24. data/shoes/libgio-2.0-0.dll +0 -0
  25. data/shoes/libglib-2.0-0.dll +0 -0
  26. data/shoes/libgmodule-2.0-0.dll +0 -0
  27. data/shoes/libgobject-2.0-0.dll +0 -0
  28. data/shoes/libgthread-2.0-0.dll +0 -0
  29. data/shoes/libiconv2.dll +0 -0
  30. data/shoes/libjpeg-8.dll +0 -0
  31. data/shoes/libpango-1.0-0.dll +0 -0
  32. data/shoes/libpangocairo-1.0-0.dll +0 -0
  33. data/shoes/libpangoft2-1.0-0.dll +0 -0
  34. data/shoes/libpangowin32-1.0-0.dll +0 -0
  35. data/shoes/libpng14-14.dll +0 -0
  36. data/shoes/libportaudio-2.dll +0 -0
  37. data/shoes/libshoes.dll +0 -0
  38. data/shoes/libssl32.dll +0 -0
  39. data/shoes/libungif4.dll +0 -0
  40. data/shoes/msvcrt-ruby191.dll +0 -0
  41. data/shoes/nsis/base.nsi +644 -0
  42. data/shoes/nsis/installer-1.bmp +0 -0
  43. data/shoes/nsis/installer-2.bmp +0 -0
  44. data/shoes/nsis/setup.ico +0 -0
  45. data/shoes/nsis/shoes.exe.manifest +17 -0
  46. data/shoes/nsis/shoes.ico +0 -0
  47. data/shoes/nsis/shoes.nsi +644 -0
  48. data/shoes/nsis/stub-inject.c +59 -0
  49. data/shoes/nsis/stub.c +271 -0
  50. data/shoes/nsis/stub32.h +14 -0
  51. data/shoes/nsis/stub32.rc +16 -0
  52. data/shoes/readline5.dll +0 -0
  53. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/fast_xs.so +0 -0
  54. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/blankslate.rb +63 -63
  55. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/builder.rb +216 -216
  56. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/elements.rb +510 -510
  57. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/htmlinfo.rb +691 -691
  58. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/inspect.rb +103 -103
  59. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/modules.rb +40 -40
  60. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/parse.rb +38 -38
  61. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tag.rb +202 -202
  62. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tags.rb +164 -164
  63. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/traverse.rb +838 -838
  64. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/xchar.rb +94 -94
  65. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot.rb +26 -26
  66. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot_scan.so +0 -0
  67. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/core.rb +135 -135
  68. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/rails.rb +58 -58
  69. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/common.rb +354 -354
  70. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/generator.so +0 -0
  71. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/parser.so +0 -0
  72. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext.rb +13 -13
  73. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/version.rb +9 -9
  74. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json.rb +8 -8
  75. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/constants.rb +49 -49
  76. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/database.rb +721 -721
  77. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/api.rb +152 -152
  78. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/driver.rb +307 -307
  79. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/native/driver.rb +219 -219
  80. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/errors.rb +68 -68
  81. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/pragmas.rb +271 -271
  82. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/resultset.rb +180 -180
  83. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/statement.rb +231 -231
  84. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/translator.rb +109 -109
  85. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/value.rb +57 -57
  86. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/version.rb +16 -16
  87. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3.rb +1 -1
  88. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3_api.so +0 -0
  89. data/shoes/ruby/gems/1.9.1/specifications/hpricot-0.8.1.gemspec +32 -32
  90. data/shoes/ruby/gems/1.9.1/specifications/json-shoes-1.1.3.gemspec +34 -34
  91. data/shoes/ruby/gems/1.9.1/specifications/sqlite3-ruby-1.2.5-x86-mswin32.gemspec +46 -46
  92. data/shoes/ruby/lib/ftsearch/analysis/analyzer.rb +16 -16
  93. data/shoes/ruby/lib/ftsearch/analysis/simple_identifier_analyzer.rb +23 -23
  94. data/shoes/ruby/lib/ftsearch/analysis/whitespace_analyzer.rb +22 -22
  95. data/shoes/ruby/lib/ftsearch/document_map_reader.rb +106 -106
  96. data/shoes/ruby/lib/ftsearch/document_map_writer.rb +46 -46
  97. data/shoes/ruby/lib/ftsearch/field_infos.rb +46 -46
  98. data/shoes/ruby/lib/ftsearch/fragment_writer.rb +114 -114
  99. data/shoes/ruby/lib/ftsearch/fulltext_reader.rb +52 -52
  100. data/shoes/ruby/lib/ftsearch/fulltext_writer.rb +75 -75
  101. data/shoes/ruby/lib/ftsearch/suffix_array_reader.rb +275 -275
  102. data/shoes/ruby/lib/ftsearch/suffix_array_writer.rb +99 -99
  103. data/shoes/ruby/lib/ftsearch/util.rb +21 -21
  104. data/shoes/ruby/lib/i386-mingw32/bigdecimal.so +0 -0
  105. data/shoes/ruby/lib/i386-mingw32/binject.so +0 -0
  106. data/shoes/ruby/lib/i386-mingw32/bloops.so +0 -0
  107. data/shoes/ruby/lib/i386-mingw32/continuation.so +0 -0
  108. data/shoes/ruby/lib/i386-mingw32/coverage.so +0 -0
  109. data/shoes/ruby/lib/i386-mingw32/curses.so +0 -0
  110. data/shoes/ruby/lib/i386-mingw32/digest/bubblebabble.so +0 -0
  111. data/shoes/ruby/lib/i386-mingw32/digest/md5.so +0 -0
  112. data/shoes/ruby/lib/i386-mingw32/digest/rmd160.so +0 -0
  113. data/shoes/ruby/lib/i386-mingw32/digest/sha1.so +0 -0
  114. data/shoes/ruby/lib/i386-mingw32/digest/sha2.so +0 -0
  115. data/shoes/ruby/lib/i386-mingw32/digest.so +0 -0
  116. data/shoes/ruby/lib/i386-mingw32/dl.so +0 -0
  117. data/shoes/ruby/lib/i386-mingw32/enc/big5.so +0 -0
  118. data/shoes/ruby/lib/i386-mingw32/enc/cp949.so +0 -0
  119. data/shoes/ruby/lib/i386-mingw32/enc/emacs_mule.so +0 -0
  120. data/shoes/ruby/lib/i386-mingw32/enc/encdb.so +0 -0
  121. data/shoes/ruby/lib/i386-mingw32/enc/euc_jp.so +0 -0
  122. data/shoes/ruby/lib/i386-mingw32/enc/euc_kr.so +0 -0
  123. data/shoes/ruby/lib/i386-mingw32/enc/euc_tw.so +0 -0
  124. data/shoes/ruby/lib/i386-mingw32/enc/gb18030.so +0 -0
  125. data/shoes/ruby/lib/i386-mingw32/enc/gb2312.so +0 -0
  126. data/shoes/ruby/lib/i386-mingw32/enc/gbk.so +0 -0
  127. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_1.so +0 -0
  128. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_10.so +0 -0
  129. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_11.so +0 -0
  130. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_13.so +0 -0
  131. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_14.so +0 -0
  132. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_15.so +0 -0
  133. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_16.so +0 -0
  134. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_2.so +0 -0
  135. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_3.so +0 -0
  136. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_4.so +0 -0
  137. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_5.so +0 -0
  138. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_6.so +0 -0
  139. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_7.so +0 -0
  140. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_8.so +0 -0
  141. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_9.so +0 -0
  142. data/shoes/ruby/lib/i386-mingw32/enc/koi8_r.so +0 -0
  143. data/shoes/ruby/lib/i386-mingw32/enc/koi8_u.so +0 -0
  144. data/shoes/ruby/lib/i386-mingw32/enc/shift_jis.so +0 -0
  145. data/shoes/ruby/lib/i386-mingw32/enc/trans/big5.so +0 -0
  146. data/shoes/ruby/lib/i386-mingw32/enc/trans/chinese.so +0 -0
  147. data/shoes/ruby/lib/i386-mingw32/enc/trans/escape.so +0 -0
  148. data/shoes/ruby/lib/i386-mingw32/enc/trans/gb18030.so +0 -0
  149. data/shoes/ruby/lib/i386-mingw32/enc/trans/gbk.so +0 -0
  150. data/shoes/ruby/lib/i386-mingw32/enc/trans/iso2022.so +0 -0
  151. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese.so +0 -0
  152. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_euc.so +0 -0
  153. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_sjis.so +0 -0
  154. data/shoes/ruby/lib/i386-mingw32/enc/trans/korean.so +0 -0
  155. data/shoes/ruby/lib/i386-mingw32/enc/trans/single_byte.so +0 -0
  156. data/shoes/ruby/lib/i386-mingw32/enc/trans/transdb.so +0 -0
  157. data/shoes/ruby/lib/i386-mingw32/enc/trans/utf_16_32.so +0 -0
  158. data/shoes/ruby/lib/i386-mingw32/enc/utf_16be.so +0 -0
  159. data/shoes/ruby/lib/i386-mingw32/enc/utf_16le.so +0 -0
  160. data/shoes/ruby/lib/i386-mingw32/enc/utf_32be.so +0 -0
  161. data/shoes/ruby/lib/i386-mingw32/enc/utf_32le.so +0 -0
  162. data/shoes/ruby/lib/i386-mingw32/enc/windows_1251.so +0 -0
  163. data/shoes/ruby/lib/i386-mingw32/etc.so +0 -0
  164. data/shoes/ruby/lib/i386-mingw32/fcntl.so +0 -0
  165. data/shoes/ruby/lib/i386-mingw32/fiber.so +0 -0
  166. data/shoes/ruby/lib/i386-mingw32/ftsearchrt.so +0 -0
  167. data/shoes/ruby/lib/i386-mingw32/gdbm.so +0 -0
  168. data/shoes/ruby/lib/i386-mingw32/iconv.so +0 -0
  169. data/shoes/ruby/lib/i386-mingw32/io/wait.so +0 -0
  170. data/shoes/ruby/lib/i386-mingw32/json/ext/generator.so +0 -0
  171. data/shoes/ruby/lib/i386-mingw32/json/ext/parser.so +0 -0
  172. data/shoes/ruby/lib/i386-mingw32/mathn/complex.so +0 -0
  173. data/shoes/ruby/lib/i386-mingw32/mathn/rational.so +0 -0
  174. data/shoes/ruby/lib/i386-mingw32/nkf.so +0 -0
  175. data/shoes/ruby/lib/i386-mingw32/openssl.so +0 -0
  176. data/shoes/ruby/lib/i386-mingw32/racc/cparse.so +0 -0
  177. data/shoes/ruby/lib/i386-mingw32/rbconfig.rb +2 -2
  178. data/shoes/ruby/lib/i386-mingw32/readline.so +0 -0
  179. data/shoes/ruby/lib/i386-mingw32/ripper.so +0 -0
  180. data/shoes/ruby/lib/i386-mingw32/sdbm.so +0 -0
  181. data/shoes/ruby/lib/i386-mingw32/socket.so +0 -0
  182. data/shoes/ruby/lib/i386-mingw32/stringio.so +0 -0
  183. data/shoes/ruby/lib/i386-mingw32/strscan.so +0 -0
  184. data/shoes/ruby/lib/i386-mingw32/syck.so +0 -0
  185. data/shoes/ruby/lib/i386-mingw32/win32ole.so +0 -0
  186. data/shoes/ruby/lib/i386-mingw32/zlib.so +0 -0
  187. data/shoes/ruby/lib/rbconfig/datadir.rb +24 -24
  188. data/shoes/ruby/lib/rubygems/builder.rb +88 -88
  189. data/shoes/ruby/lib/rubygems/command.rb +406 -406
  190. data/shoes/ruby/lib/rubygems/command_manager.rb +146 -146
  191. data/shoes/ruby/lib/rubygems/commands/build_command.rb +53 -53
  192. data/shoes/ruby/lib/rubygems/commands/cert_command.rb +86 -86
  193. data/shoes/ruby/lib/rubygems/commands/check_command.rb +75 -75
  194. data/shoes/ruby/lib/rubygems/commands/cleanup_command.rb +91 -91
  195. data/shoes/ruby/lib/rubygems/commands/contents_command.rb +74 -74
  196. data/shoes/ruby/lib/rubygems/commands/dependency_command.rb +188 -188
  197. data/shoes/ruby/lib/rubygems/commands/environment_command.rb +128 -128
  198. data/shoes/ruby/lib/rubygems/commands/fetch_command.rb +62 -62
  199. data/shoes/ruby/lib/rubygems/commands/generate_index_command.rb +57 -57
  200. data/shoes/ruby/lib/rubygems/commands/help_command.rb +172 -172
  201. data/shoes/ruby/lib/rubygems/commands/install_command.rb +148 -148
  202. data/shoes/ruby/lib/rubygems/commands/list_command.rb +35 -35
  203. data/shoes/ruby/lib/rubygems/commands/lock_command.rb +110 -110
  204. data/shoes/ruby/lib/rubygems/commands/mirror_command.rb +111 -111
  205. data/shoes/ruby/lib/rubygems/commands/outdated_command.rb +33 -33
  206. data/shoes/ruby/lib/rubygems/commands/pristine_command.rb +93 -93
  207. data/shoes/ruby/lib/rubygems/commands/query_command.rb +233 -233
  208. data/shoes/ruby/lib/rubygems/commands/rdoc_command.rb +82 -82
  209. data/shoes/ruby/lib/rubygems/commands/search_command.rb +37 -37
  210. data/shoes/ruby/lib/rubygems/commands/server_command.rb +48 -48
  211. data/shoes/ruby/lib/rubygems/commands/sources_command.rb +152 -152
  212. data/shoes/ruby/lib/rubygems/commands/specification_command.rb +77 -77
  213. data/shoes/ruby/lib/rubygems/commands/stale_command.rb +27 -27
  214. data/shoes/ruby/lib/rubygems/commands/uninstall_command.rb +73 -73
  215. data/shoes/ruby/lib/rubygems/commands/unpack_command.rb +95 -95
  216. data/shoes/ruby/lib/rubygems/commands/update_command.rb +181 -181
  217. data/shoes/ruby/lib/rubygems/commands/which_command.rb +87 -87
  218. data/shoes/ruby/lib/rubygems/config_file.rb +266 -266
  219. data/shoes/ruby/lib/rubygems/custom_require.rb +46 -46
  220. data/shoes/ruby/lib/rubygems/defaults.rb +89 -89
  221. data/shoes/ruby/lib/rubygems/dependency.rb +119 -119
  222. data/shoes/ruby/lib/rubygems/dependency_installer.rb +258 -258
  223. data/shoes/ruby/lib/rubygems/dependency_list.rb +165 -165
  224. data/shoes/ruby/lib/rubygems/digest/digest_adapter.rb +39 -39
  225. data/shoes/ruby/lib/rubygems/digest/md5.rb +23 -23
  226. data/shoes/ruby/lib/rubygems/digest/sha1.rb +16 -16
  227. data/shoes/ruby/lib/rubygems/digest/sha2.rb +17 -17
  228. data/shoes/ruby/lib/rubygems/doc_manager.rb +214 -214
  229. data/shoes/ruby/lib/rubygems/exceptions.rb +84 -84
  230. data/shoes/ruby/lib/rubygems/ext/builder.rb +56 -56
  231. data/shoes/ruby/lib/rubygems/ext/configure_builder.rb +24 -24
  232. data/shoes/ruby/lib/rubygems/ext/ext_conf_builder.rb +23 -23
  233. data/shoes/ruby/lib/rubygems/ext/rake_builder.rb +27 -27
  234. data/shoes/ruby/lib/rubygems/ext.rb +18 -18
  235. data/shoes/ruby/lib/rubygems/format.rb +87 -87
  236. data/shoes/ruby/lib/rubygems/gem_openssl.rb +83 -83
  237. data/shoes/ruby/lib/rubygems/gem_path_searcher.rb +100 -100
  238. data/shoes/ruby/lib/rubygems/gem_runner.rb +58 -58
  239. data/shoes/ruby/lib/rubygems/indexer.rb +370 -370
  240. data/shoes/ruby/lib/rubygems/install_update_options.rb +113 -113
  241. data/shoes/ruby/lib/rubygems/installer.rb +578 -578
  242. data/shoes/ruby/lib/rubygems/local_remote_options.rb +134 -134
  243. data/shoes/ruby/lib/rubygems/old_format.rb +148 -148
  244. data/shoes/ruby/lib/rubygems/package/f_sync_dir.rb +24 -24
  245. data/shoes/ruby/lib/rubygems/package/tar_header.rb +245 -245
  246. data/shoes/ruby/lib/rubygems/package/tar_input.rb +219 -219
  247. data/shoes/ruby/lib/rubygems/package/tar_output.rb +143 -143
  248. data/shoes/ruby/lib/rubygems/package/tar_reader/entry.rb +99 -99
  249. data/shoes/ruby/lib/rubygems/package/tar_reader.rb +86 -86
  250. data/shoes/ruby/lib/rubygems/package/tar_writer.rb +180 -180
  251. data/shoes/ruby/lib/rubygems/package.rb +95 -95
  252. data/shoes/ruby/lib/rubygems/platform.rb +178 -178
  253. data/shoes/ruby/lib/rubygems/remote_fetcher.rb +344 -344
  254. data/shoes/ruby/lib/rubygems/require_paths_builder.rb +14 -14
  255. data/shoes/ruby/lib/rubygems/requirement.rb +163 -163
  256. data/shoes/ruby/lib/rubygems/rubygems_version.rb +6 -6
  257. data/shoes/ruby/lib/rubygems/security.rb +786 -786
  258. data/shoes/ruby/lib/rubygems/server.rb +629 -629
  259. data/shoes/ruby/lib/rubygems/source_index.rb +559 -559
  260. data/shoes/ruby/lib/rubygems/source_info_cache.rb +393 -393
  261. data/shoes/ruby/lib/rubygems/source_info_cache_entry.rb +56 -56
  262. data/shoes/ruby/lib/rubygems/spec_fetcher.rb +249 -249
  263. data/shoes/ruby/lib/rubygems/specification.rb +1262 -1262
  264. data/shoes/ruby/lib/rubygems/test_utilities.rb +131 -131
  265. data/shoes/ruby/lib/rubygems/timer.rb +25 -25
  266. data/shoes/ruby/lib/rubygems/uninstaller.rb +242 -242
  267. data/shoes/ruby/lib/rubygems/user_interaction.rb +360 -360
  268. data/shoes/ruby/lib/rubygems/validator.rb +208 -208
  269. data/shoes/ruby/lib/rubygems/version.rb +167 -167
  270. data/shoes/ruby/lib/rubygems/version_option.rb +48 -48
  271. data/shoes/ruby/lib/rubygems.rb +888 -888
  272. data/shoes/ruby/lib/ubygems.rb +10 -10
  273. data/shoes/samples/class-book.rb +43 -43
  274. data/shoes/samples/class-book.yaml +387 -387
  275. data/shoes/samples/expert-definr.rb +23 -23
  276. data/shoes/samples/expert-funnies.rb +51 -51
  277. data/shoes/samples/expert-irb.rb +112 -112
  278. data/shoes/samples/expert-minesweeper.rb +267 -267
  279. data/shoes/samples/expert-othello.rb +319 -319
  280. data/shoes/samples/expert-pong.rb +62 -62
  281. data/shoes/samples/expert-tankspank.rb +385 -385
  282. data/shoes/samples/good-arc.rb +37 -37
  283. data/shoes/samples/good-clock.rb +51 -51
  284. data/shoes/samples/good-follow.rb +26 -26
  285. data/shoes/samples/good-reminder.rb +174 -174
  286. data/shoes/samples/good-vjot.rb +56 -56
  287. data/shoes/samples/simple-accordion.rb +75 -75
  288. data/shoes/samples/simple-anim-shapes.rb +17 -17
  289. data/shoes/samples/simple-anim-text.rb +13 -13
  290. data/shoes/samples/simple-arc.rb +23 -23
  291. data/shoes/samples/simple-bounce.rb +24 -24
  292. data/shoes/samples/simple-calc.rb +70 -70
  293. data/shoes/samples/simple-control-sizes.rb +24 -24
  294. data/shoes/samples/simple-curve.rb +26 -26
  295. data/shoes/samples/simple-dialogs.rb +29 -29
  296. data/shoes/samples/simple-downloader.rb +27 -27
  297. data/shoes/samples/simple-draw.rb +13 -13
  298. data/shoes/samples/simple-editor.rb +28 -28
  299. data/shoes/samples/simple-form.rb +28 -28
  300. data/shoes/samples/simple-mask.rb +21 -21
  301. data/shoes/samples/simple-menu.rb +31 -31
  302. data/shoes/samples/simple-menu1.rb +35 -35
  303. data/shoes/samples/simple-rubygems.rb +29 -29
  304. data/shoes/samples/simple-slide.rb +45 -45
  305. data/shoes/samples/simple-sphere.rb +28 -28
  306. data/shoes/samples/simple-timer.rb +13 -13
  307. data/shoes/samples/simple-video.rb +13 -13
  308. data/shoes/shoes.exe +0 -0
  309. data/shoes/sqlite3.dll +0 -0
  310. data/shoes/static/code_highlighter.js +188 -188
  311. data/shoes/static/code_highlighter_ruby.js +26 -26
  312. data/shoes/static/manual-en.txt +2783 -2783
  313. data/shoes/static/manual-ja.txt +2780 -2780
  314. data/shoes/static/manual.css +167 -167
  315. data/shoes/static/stubs/blank.run +375 -375
  316. data/shoes/static/stubs/sh-install +48 -48
  317. data/shoes/zlib.dll +0 -0
  318. data/shoes/zlib1.dll +0 -0
  319. metadata +15 -5
  320. data/shoes/static/Thumbs.db +0 -0
@@ -1,503 +1,503 @@
1
- #
2
- # lib/shoes/pack.rb
3
- # Packing apps into Windows, OS X and Linux binaries
4
- #
5
- require 'shoes/shy'
6
- require 'binject'
7
- require 'open-uri'
8
-
9
- class Shoes
10
- module Pack
11
- def self.rewrite a, before, hsh
12
- File.open(before) do |b|
13
- b.each do |line|
14
- a << line.gsub(/\#\{(\w+)\}/) { hsh[$1] }
15
- end
16
- end
17
- end
18
-
19
- def self.pkg(platform, opt)
20
- extension = case platform
21
- when "win32" then
22
- "exe"
23
- when "linux" then
24
- "run"
25
- when "osx" then
26
- "dmg"
27
- else
28
- raise "Unknown platform"
29
- end
30
-
31
- case opt
32
- when Shoes::I_YES then
33
- url = "http://shoes.heroku.com/pkg/#{Shoes::RELEASE_NAME.downcase}/#{platform}/shoes"
34
- local_file_path = File.join(LIB_DIR, Shoes::RELEASE_NAME.downcase, platform, "latest_shoes.#{extension}")
35
- when Shoes::I_NOV then
36
- url = "http://shoes.heroku.com/pkg/#{Shoes::RELEASE_NAME.downcase}/#{platform}/shoes-novideo"
37
- local_file_path = File.join(LIB_DIR, Shoes::RELEASE_NAME.downcase, platform, "latest_shoes-novideo.#{extension}")
38
- when I_NET then
39
- url = false
40
- end
41
-
42
- FileUtils.makedirs File.join(LIB_DIR, Shoes::RELEASE_NAME.downcase, platform)
43
-
44
- if url then
45
- begin
46
- url = open(url).read.strip
47
- debug url
48
- internet_ok = true
49
- rescue Exception => e
50
- error e
51
- internet_ok = false
52
- end
53
-
54
- if File.exists? local_file_path
55
- return open(local_file_path)
56
- elsif internet_ok then
57
- begin
58
- debug "Downloading #{url}..."
59
- downloaded = open(url)
60
- debug "Download of #{url} finished"
61
- rescue Exception => e
62
- error "Could not download from the internet" + e
63
- internet_ok = false
64
- end
65
- if internet_ok then
66
- begin
67
- File.open(local_file_path, "wb") do |f|
68
- f.write(downloaded.read)
69
- end
70
- return open(local_file_path)
71
- rescue Exception => e
72
- error "Could not download from the internet" + e
73
- alert "Couldn't find an Shoes at:\n #{local_file_path}\n or download it from the internet to include with the application.\n Will package application without Shoes."
74
- end
75
- end
76
- else
77
- alert "Couldn't find an existing Shoes at:\n #{local_file_path}\n or download it from the internet to include with the application.\n Will package application without Shoes."
78
- end
79
- end
80
- end
81
-
82
- def self.exe(script, opt, &blk)
83
- size = File.size(script)
84
- f = File.open(script, 'rb')
85
- exe = Binject::EXE.new(File.join(DIR, "static", "stubs", "blank.exe"))
86
- size += script.length
87
- exe.inject("SHOES_FILENAME", File.basename(script))
88
- size += File.size(script)
89
- exe.inject("SHOES_PAYLOAD", f)
90
- f2 = pkg("win32", opt)
91
- if f2
92
- size += File.size(f2.path)
93
- f3 = File.open(f2.path, 'rb')
94
- exe.inject("SHOES_SETUP", f3)
95
- end
96
-
97
- count, last = 0, 0.0
98
- exe.save(script.gsub(/\.\w+$/, '') + ".exe") do |len|
99
- count += len
100
- prg = count.to_f / size.to_f
101
- blk[last = prg] if blk and prg - last > 0.02 and prg < 1.0
102
- end
103
-
104
- f.close
105
- if f2
106
- f2.close
107
- f3.close
108
- end
109
- blk[1.0] if blk
110
- end
111
-
112
- def self.dmg(script, opt, &blk)
113
- name = File.basename(script).gsub(/\.\w+$/, '')
114
- app_name = name.capitalize.gsub(/[-_](\w)/) { $1.capitalize }
115
- vol_name = name.capitalize.gsub(/[-_](\w)/) { " " + $1.capitalize }
116
- app_app = "#{app_name}.app"
117
- vers = [1, 0]
118
-
119
- tmp_dir = File.join(LIB_DIR, "+dmg")
120
- FileUtils.rm_rf(tmp_dir)
121
- FileUtils.mkdir_p(tmp_dir)
122
- FileUtils.cp(File.join(DIR, "static", "stubs", "blank.hfz"),
123
- File.join(tmp_dir, "blank.hfz"))
124
- app_dir = File.join(tmp_dir, app_app)
125
- res_dir = File.join(tmp_dir, app_app, "Contents", "Resources")
126
- mac_dir = File.join(tmp_dir, app_app, "Contents", "MacOS")
127
- [res_dir, mac_dir].map { |x| FileUtils.mkdir_p(x) }
128
- FileUtils.cp(File.join(DIR, "static", "Shoes.icns"), app_dir)
129
- FileUtils.cp(File.join(DIR, "static", "Shoes.icns"), res_dir)
130
- File.open(File.join(app_dir, "Contents", "PkgInfo"), 'w') do |f|
131
- f << "APPL????"
132
- end
133
- File.open(File.join(app_dir, "Contents", "Info.plist"), 'w') do |f|
134
- f << <<END
135
- <?xml version="1.0" encoding="UTF-8"?>
136
- <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
137
- <plist version="1.0">
138
- <dict>
139
- <key>CFBundleGetInfoString</key>
140
- <string>#{app_name} #{vers.join(".")}</string>
141
- <key>CFBundleExecutable</key>
142
- <string>#{name}-launch</string>
143
- <key>CFBundleIdentifier</key>
144
- <string>org.hackety.#{name}</string>
145
- <key>CFBundleName</key>
146
- <string>#{app_name}</string>
147
- <key>CFBundleIconFile</key>
148
- <string>Shoes.icns</string>
149
- <key>CFBundleShortVersionString</key>
150
- <string>#{vers.join(".")}</string>
151
- <key>CFBundleInfoDictionaryVersion</key>
152
- <string>6.0</string>
153
- <key>CFBundlePackageType</key>
154
- <string>APPL</string>
155
- <key>IFMajorVersion</key>
156
- <integer>#{vers[0]}</integer>
157
- <key>IFMinorVersion</key>
158
- <integer>#{vers[1]}</integer>
159
- </dict>
160
- </plist>
161
- END
162
- end
163
- File.open(File.join(app_dir, "Contents", "version.plist"), 'w') do |f|
164
- f << <<END
165
- <?xml version="1.0" encoding="UTF-8"?>
166
- <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
167
- <plist version="1.0">
168
- <dict>
169
- <key>BuildVersion</key>
170
- <string>1</string>
171
- <key>CFBundleVersion</key>
172
- <string>#{vers.join(".")}</string>
173
- <key>ProjectName</key>
174
- <string>#{app_name}</string>
175
- <key>SourceVersion</key>
176
- <string>#{Time.now.strftime("%Y%m%d")}</string>
177
- </dict>
178
- </plist>
179
- END
180
- end
181
- File.open(File.join(mac_dir, "#{name}-launch"), 'w') do |f|
182
- f << <<END
183
- #!/bin/bash
184
- SHOESPATH=/Applications/Shoes.app/Contents/MacOS
185
- APPPATH="${0%/*}"
186
- unset DYLD_LIBRARY_PATH
187
- cd "$APPPATH"
188
- echo "[Pango]" > /tmp/pangorc
189
- echo "ModuleFiles=$SHOESPATH/pango.modules" >> /tmp/pangorc
190
- if [ ! -d /Applications/Shoes.app ]
191
- then ./cocoa-install
192
- fi
193
- open -a /Applications/Shoes.app "#{File.basename(script)}"
194
- # DYLD_LIBRARY_PATH=$SHOESPATH PANGO_RC_FILE="$APPPATH/pangorc" $SHOESPATH/shoes-bin "#{File.basename(script)}"
195
- END
196
- end
197
- FileUtils.cp(script, File.join(mac_dir, File.basename(script)))
198
- FileUtils.cp(File.join(DIR, "static", "stubs", "cocoa-install"),
199
- File.join(mac_dir, "cocoa-install"))
200
-
201
- dmg = Binject::DMG.new(File.join(tmp_dir, "blank.hfz"), vol_name)
202
- f2 = pkg("osx", opt)
203
- if f2
204
- dmg.grow(10)
205
- dmg.inject_file("setup.dmg", f2.path)
206
- end
207
- dmg.inject_dir(app_app, app_dir)
208
- dmg.chmod_file(0755, "#{app_app}/Contents/MacOS/#{name}-launch")
209
- dmg.chmod_file(0755, "#{app_app}/Contents/MacOS/cocoa-install")
210
- dmg.save(script.gsub(/\.\w+$/, '') + ".dmg") do |perc|
211
- blk[perc * 0.01] if blk
212
- end
213
- FileUtils.rm_rf(tmp_dir)
214
- blk[1.0] if blk
215
- end
216
-
217
- def self.linux(script, opt, &blk)
218
- name = File.basename(script).gsub(/\.\w+$/, '')
219
- app_name = name.capitalize.gsub(/[-_](\w)/) { $1.capitalize }
220
- run_path = script.gsub(/\.\w+$/, '') + ".run"
221
- tgz_path = script.gsub(/\.\w+$/, '') + ".tgz"
222
- tmp_dir = File.join(LIB_DIR, "+run")
223
- FileUtils.mkdir_p(tmp_dir)
224
- pkgf = pkg("linux", opt)
225
- prog = 1.0
226
- if pkgf
227
- size = Shy.hrun(pkgf)
228
- pblk = Shy.progress(size) do |name, perc, left|
229
- blk[perc * 0.5]
230
- end if blk
231
- Shy.xzf(pkgf, tmp_dir, &pblk)
232
- prog -= 0.5
233
- end
234
-
235
- FileUtils.cp(script, File.join(tmp_dir, File.basename(script)))
236
- File.open(File.join(tmp_dir, "sh-install"), 'wb') do |a|
237
- rewrite a, File.join(DIR, "static", "stubs", "sh-install"),
238
- 'SCRIPT' => "./#{File.basename(script)}"
239
- end
240
- FileUtils.chmod 0755, File.join(tmp_dir, "sh-install")
241
-
242
- raw = Shy.du(tmp_dir)
243
- File.open(tgz_path, 'wb') do |f|
244
- pblk = Shy.progress(raw) do |name, perc, left|
245
- blk[prog + (perc * prog)]
246
- end if blk
247
- Shy.czf(f, tmp_dir, &pblk)
248
- end
249
-
250
- md5, fsize = Shy.md5sum(tgz_path), File.size(tgz_path)
251
- File.open(run_path, 'wb') do |f|
252
- rewrite f, File.join(DIR, "static", "stubs", "blank.run"),
253
- 'CRC' => '0000000000', 'MD5' => md5, 'LABEL' => app_name, 'NAME' => name,
254
- 'SIZE' => fsize, 'RAWSIZE' => (raw / 1024) + 1, 'TIME' => Time.now, 'FULLSIZE' => raw
255
- File.open(tgz_path, 'rb') do |f2|
256
- f.write f2.read(8192) until f2.eof
257
- end
258
- end
259
- FileUtils.chmod 0755, run_path
260
- FileUtils.rm_rf(tgz_path)
261
- FileUtils.rm_rf(tmp_dir)
262
- blk[1.0] if blk
263
- end
264
- end
265
-
266
- Shoes::I_NET = "No, download Shoes if it's absent."
267
- Shoes::I_YES = "Yes, I want Shoes included."
268
- Shoes::I_NOV = "Yes, include Shoes, but without video support."
269
- PackMake = proc do
270
- background "#DDD"
271
-
272
- @page1 = stack do
273
- stack do
274
- background white
275
- background "#FFF".."#EEE", :height => 50, :bottom => 50
276
- border "#CCC", :height => 2, :bottom => 0
277
- stack :margin => 20 do
278
- selt = proc { @sel1.toggle; @sel2.toggle }
279
- @path = ""
280
- @shy_path = nil
281
- @sel1 =
282
- flow do
283
- para "File:"
284
- inscription " (or a ", link("directory", &selt), ")"
285
- edit1 = edit_line :width => -120
286
- @bb = button "Browse...", :width => 100 do
287
- @path = edit1.text = ask_open_file
288
- est_recount
289
- end
290
- end
291
- @sel2 =
292
- flow :hidden => true do
293
- para "Directory:"
294
- inscription " (or a ", link("single file", &selt), ")"
295
- edit2 = edit_line :width => -120
296
- @bf = button "Folder...", :width => 100 do
297
- @path = edit2.text = ask_open_folder
298
- est_recount
299
- end
300
- end
301
-
302
- para "Package for:"
303
- flow :margin_left => 20 do
304
- @shy = check
305
- para "Shoes (.shy)", :margin_right => 20
306
- @exe = check
307
- para "Windows", :margin_right => 20
308
- @dmg = check
309
- para "OS X", :margin_right => 20
310
- @run = check
311
- para "Linux"
312
- end
313
-
314
- para "Include Shoes with your app? ", :margin => 0
315
- @inc = list_box :items => [Shoes::I_NET, Shoes::I_YES, Shoes::I_NOV], :width => 0.6, :height => 30 do
316
- est_recount
317
- end
318
- inscription "(This option doesn't apply to Shoes .shy files.)"
319
- end
320
- end
321
-
322
- stack :margin => 20 do
323
- @est = para "Estimated size of each app: ", strong("0k"), :margin => 0, :margin_bottom => 4
324
- def est_recount
325
- base =
326
- case @inc.text
327
- when Shoes::I_NET; 70
328
- when Shoes::I_YES; 7000
329
- when Shoes::I_NOV; 2500
330
- end
331
- base += ((File.directory?(@path) ? Shy.du(@path) : File.size(@path)) rescue 0) / 1024
332
- @est.replace "Estimated size of each app: ", strong(base > 1024 ?
333
- "%0.1fM" % [base / 1024.0] : "#{base}K")
334
- end
335
- def build_thread
336
- @shy_path = nil
337
- if File.directory? @path
338
- @shy_path = @path.gsub(%r![\\/]+$!, '') + ".shy"
339
- elsif @shy.style[:checked]
340
- @shy_path = @path.gsub(/\.\w+$/, '') + ".shy"
341
- end
342
- if @shy_path and not @shy_meta
343
- @page_shy.show
344
- @shy_para.text = File.basename(@shy_path)
345
- @shy_launch.items = Shy.launchable(@path)
346
- return
347
- end
348
- @page2.show
349
- @path2.replace File.basename(@path)
350
- inc_text = @inc.text
351
- Thread.start do
352
- begin
353
- sofar, stage = 0.0, 1.0 / [@shy.style[:checked], @exe.style[:checked], @dmg.style[:checked], @run.style[:checked]].
354
- select { |x| x }.size
355
- blk = proc do |frac|
356
- @prog.style(:width => sofar + (frac * stage))
357
- end
358
-
359
- if @shy_path
360
- @status.replace "Compressing the script's folder."
361
- pblk = Shy.progress(Shy.du(@path)) do |name, perc, left|
362
- blk[perc]
363
- end
364
- Shy.c(@shy_path, @shy_meta, @path, &pblk)
365
- @path = @shy_path
366
- @prog.style(:width => sofar += stage)
367
- debug @prog.style[:width]
368
- end
369
- if @exe.style[:checked]
370
- @status.replace "Working on an .exe for Windows."
371
- Shoes::Pack.exe(@path, inc_text, &blk)
372
- @prog.style(:width => sofar += stage)
373
- debug @prog.style[:width]
374
- end
375
- if @dmg.style[:checked]
376
- @status.replace "Working on a .dmg for Mac OS X."
377
- Shoes::Pack.dmg(@path, inc_text, &blk)
378
- @prog.style(:width => sofar += stage)
379
- end
380
- if @run.style[:checked]
381
- @status.replace "Working on a .run for Linux."
382
- Shoes::Pack.linux(@path, inc_text, &blk)
383
- @prog.style(:width => sofar += stage)
384
- end
385
- if @shy_path and not @shy.style[:checked]
386
- FileUtils.rm_rf(@shy_path)
387
- end
388
-
389
- every do
390
- if @prog.style[:width] == 1.0
391
- @page2.hide
392
- @page3.show
393
- @path3.replace File.basename(@path)
394
- end
395
- end
396
- rescue => e
397
- error(e)
398
- end
399
- end
400
- end
401
-
402
- inscription "Using the latest Shoes build (0.r#{Shoes::REVISION})", :margin => 0
403
- flow :margin_top => 10, :margin_left => 310 do
404
- button "OK", :margin_right => 4 do
405
- @page1.hide; @bb.hide; @bf.hide
406
- build_thread
407
- end
408
- button "Cancel" do
409
- close
410
- end
411
- end
412
- end
413
- end
414
-
415
- @page_shy = stack :hidden => true do
416
- stack do
417
- background white
418
- border "#DDD", :height => 2, :bottom => 0
419
- stack :margin => 20 do
420
- para "Details for:", :margin => 4
421
- @shy_para = para "", :size => 20, :margin => 4
422
- flow do
423
- stack :margin => 10, :width => 0.4 do
424
- para "Name of app:"
425
- @shy_name = edit_line :width => 1.0
426
- end
427
- stack :margin => 10, :width => 0.4 do
428
- para "Version:"
429
- @shy_version = edit_line :width => 120
430
- end
431
- stack :margin => 10, :width => 0.4 do
432
- para "Creator"
433
- @shy_creator = edit_line :width => 1.0
434
- end
435
- stack :margin => 10, :width => 0.5 do
436
- para "Launch"
437
- @shy_launch = list_box :height => 30
438
- end
439
- end
440
- end
441
- end
442
-
443
- stack :margin => 20 do
444
- flow :margin_top => 10, :margin_left => 310 do
445
- button "OK", :margin_right => 4 do
446
- @shy_meta = Shy.new
447
- @shy_meta.name = @shy_name.text
448
- @shy_meta.creator = @shy_creator.text
449
- @shy_meta.version = @shy_version.text
450
- @shy_meta.launch = @shy_launch.text
451
- @page_shy.hide
452
- build_thread
453
- end
454
- button "Cancel" do
455
- close
456
- end
457
- end
458
- end
459
- end
460
-
461
- @page2 = stack :hidden => true do
462
- stack do
463
- background white
464
- border "#DDD", :height => 2, :bottom => 0
465
- stack :margin => 20 do
466
- para "Packaging:", :margin => 4
467
- @path2 = para "", :size => 20, :margin => 4
468
- @status = para "", :margin => 4
469
- end
470
- end
471
-
472
- stack :margin => 20 do
473
- stack :width => -20, :height => 24 do
474
- @prog = background "#{DIR}/static/stripe.png", :curve => 7
475
- background "rgb(0, 0, 0, 100)".."rgb(120, 120, 120, 0)", :curve => 6, :height => 16
476
- background "rgb(120, 120, 120, 0)".."rgb(0, 0, 0, 100)", :curve => 6,
477
- :height => 16, :top => 8
478
- border "rgb(60, 60, 60, 80)", :curve => 7, :strokewidth => 2
479
- end
480
- end
481
- end
482
-
483
- @page3 = stack :hidden => true do
484
- stack do
485
- background white
486
- border "#DDD", :height => 2, :bottom => 0
487
- stack :margin => 20 do
488
- para "Completed:", :margin => 4
489
- @path3 = para "", :size => 20, :margin => 4
490
- para "Your files are done, you may close this window.", :margin => 4
491
- end
492
- end
493
- end
494
-
495
- start do
496
- @exe.checked = false
497
- @dmg.checked = false
498
- @run.checked = false
499
- @shy.checked = true
500
- @inc.choose Shoes::I_NET
501
- end
502
- end
503
- end
1
+ #
2
+ # lib/shoes/pack.rb
3
+ # Packing apps into Windows, OS X and Linux binaries
4
+ #
5
+ require 'shoes/shy'
6
+ require 'binject'
7
+ require 'open-uri'
8
+
9
+ class Shoes
10
+ module Pack
11
+ def self.rewrite a, before, hsh
12
+ File.open(before) do |b|
13
+ b.each do |line|
14
+ a << line.gsub(/\#\{(\w+)\}/) { hsh[$1] }
15
+ end
16
+ end
17
+ end
18
+
19
+ def self.pkg(platform, opt)
20
+ extension = case platform
21
+ when "win32" then
22
+ "exe"
23
+ when "linux" then
24
+ "run"
25
+ when "osx" then
26
+ "dmg"
27
+ else
28
+ raise "Unknown platform"
29
+ end
30
+
31
+ case opt
32
+ when Shoes::I_YES then
33
+ url = "http://shoes.heroku.com/pkg/#{Shoes::RELEASE_NAME.downcase}/#{platform}/shoes"
34
+ local_file_path = File.join(LIB_DIR, Shoes::RELEASE_NAME.downcase, platform, "latest_shoes.#{extension}")
35
+ when Shoes::I_NOV then
36
+ url = "http://shoes.heroku.com/pkg/#{Shoes::RELEASE_NAME.downcase}/#{platform}/shoes-novideo"
37
+ local_file_path = File.join(LIB_DIR, Shoes::RELEASE_NAME.downcase, platform, "latest_shoes-novideo.#{extension}")
38
+ when I_NET then
39
+ url = false
40
+ end
41
+
42
+ FileUtils.makedirs File.join(LIB_DIR, Shoes::RELEASE_NAME.downcase, platform)
43
+
44
+ if url then
45
+ begin
46
+ url = open(url).read.strip
47
+ debug url
48
+ internet_ok = true
49
+ rescue Exception => e
50
+ error e
51
+ internet_ok = false
52
+ end
53
+
54
+ if File.exists? local_file_path
55
+ return open(local_file_path)
56
+ elsif internet_ok then
57
+ begin
58
+ debug "Downloading #{url}..."
59
+ downloaded = open(url)
60
+ debug "Download of #{url} finished"
61
+ rescue Exception => e
62
+ error "Could not download from the internet" + e
63
+ internet_ok = false
64
+ end
65
+ if internet_ok then
66
+ begin
67
+ File.open(local_file_path, "wb") do |f|
68
+ f.write(downloaded.read)
69
+ end
70
+ return open(local_file_path)
71
+ rescue Exception => e
72
+ error "Could not download from the internet" + e
73
+ alert "Couldn't find an Shoes at:\n #{local_file_path}\n or download it from the internet to include with the application.\n Will package application without Shoes."
74
+ end
75
+ end
76
+ else
77
+ alert "Couldn't find an existing Shoes at:\n #{local_file_path}\n or download it from the internet to include with the application.\n Will package application without Shoes."
78
+ end
79
+ end
80
+ end
81
+
82
+ def self.exe(script, opt, &blk)
83
+ size = File.size(script)
84
+ f = File.open(script, 'rb')
85
+ exe = Binject::EXE.new(File.join(DIR, "static", "stubs", "blank.exe"))
86
+ size += script.length
87
+ exe.inject("SHOES_FILENAME", File.basename(script))
88
+ size += File.size(script)
89
+ exe.inject("SHOES_PAYLOAD", f)
90
+ f2 = pkg("win32", opt)
91
+ if f2
92
+ size += File.size(f2.path)
93
+ f3 = File.open(f2.path, 'rb')
94
+ exe.inject("SHOES_SETUP", f3)
95
+ end
96
+
97
+ count, last = 0, 0.0
98
+ exe.save(script.gsub(/\.\w+$/, '') + ".exe") do |len|
99
+ count += len
100
+ prg = count.to_f / size.to_f
101
+ blk[last = prg] if blk and prg - last > 0.02 and prg < 1.0
102
+ end
103
+
104
+ f.close
105
+ if f2
106
+ f2.close
107
+ f3.close
108
+ end
109
+ blk[1.0] if blk
110
+ end
111
+
112
+ def self.dmg(script, opt, &blk)
113
+ name = File.basename(script).gsub(/\.\w+$/, '')
114
+ app_name = name.capitalize.gsub(/[-_](\w)/) { $1.capitalize }
115
+ vol_name = name.capitalize.gsub(/[-_](\w)/) { " " + $1.capitalize }
116
+ app_app = "#{app_name}.app"
117
+ vers = [1, 0]
118
+
119
+ tmp_dir = File.join(LIB_DIR, "+dmg")
120
+ FileUtils.rm_rf(tmp_dir)
121
+ FileUtils.mkdir_p(tmp_dir)
122
+ FileUtils.cp(File.join(DIR, "static", "stubs", "blank.hfz"),
123
+ File.join(tmp_dir, "blank.hfz"))
124
+ app_dir = File.join(tmp_dir, app_app)
125
+ res_dir = File.join(tmp_dir, app_app, "Contents", "Resources")
126
+ mac_dir = File.join(tmp_dir, app_app, "Contents", "MacOS")
127
+ [res_dir, mac_dir].map { |x| FileUtils.mkdir_p(x) }
128
+ FileUtils.cp(File.join(DIR, "static", "Shoes.icns"), app_dir)
129
+ FileUtils.cp(File.join(DIR, "static", "Shoes.icns"), res_dir)
130
+ File.open(File.join(app_dir, "Contents", "PkgInfo"), 'w') do |f|
131
+ f << "APPL????"
132
+ end
133
+ File.open(File.join(app_dir, "Contents", "Info.plist"), 'w') do |f|
134
+ f << <<END
135
+ <?xml version="1.0" encoding="UTF-8"?>
136
+ <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
137
+ <plist version="1.0">
138
+ <dict>
139
+ <key>CFBundleGetInfoString</key>
140
+ <string>#{app_name} #{vers.join(".")}</string>
141
+ <key>CFBundleExecutable</key>
142
+ <string>#{name}-launch</string>
143
+ <key>CFBundleIdentifier</key>
144
+ <string>org.hackety.#{name}</string>
145
+ <key>CFBundleName</key>
146
+ <string>#{app_name}</string>
147
+ <key>CFBundleIconFile</key>
148
+ <string>Shoes.icns</string>
149
+ <key>CFBundleShortVersionString</key>
150
+ <string>#{vers.join(".")}</string>
151
+ <key>CFBundleInfoDictionaryVersion</key>
152
+ <string>6.0</string>
153
+ <key>CFBundlePackageType</key>
154
+ <string>APPL</string>
155
+ <key>IFMajorVersion</key>
156
+ <integer>#{vers[0]}</integer>
157
+ <key>IFMinorVersion</key>
158
+ <integer>#{vers[1]}</integer>
159
+ </dict>
160
+ </plist>
161
+ END
162
+ end
163
+ File.open(File.join(app_dir, "Contents", "version.plist"), 'w') do |f|
164
+ f << <<END
165
+ <?xml version="1.0" encoding="UTF-8"?>
166
+ <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
167
+ <plist version="1.0">
168
+ <dict>
169
+ <key>BuildVersion</key>
170
+ <string>1</string>
171
+ <key>CFBundleVersion</key>
172
+ <string>#{vers.join(".")}</string>
173
+ <key>ProjectName</key>
174
+ <string>#{app_name}</string>
175
+ <key>SourceVersion</key>
176
+ <string>#{Time.now.strftime("%Y%m%d")}</string>
177
+ </dict>
178
+ </plist>
179
+ END
180
+ end
181
+ File.open(File.join(mac_dir, "#{name}-launch"), 'w') do |f|
182
+ f << <<END
183
+ #!/bin/bash
184
+ SHOESPATH=/Applications/Shoes.app/Contents/MacOS
185
+ APPPATH="${0%/*}"
186
+ unset DYLD_LIBRARY_PATH
187
+ cd "$APPPATH"
188
+ echo "[Pango]" > /tmp/pangorc
189
+ echo "ModuleFiles=$SHOESPATH/pango.modules" >> /tmp/pangorc
190
+ if [ ! -d /Applications/Shoes.app ]
191
+ then ./cocoa-install
192
+ fi
193
+ open -a /Applications/Shoes.app "#{File.basename(script)}"
194
+ # DYLD_LIBRARY_PATH=$SHOESPATH PANGO_RC_FILE="$APPPATH/pangorc" $SHOESPATH/shoes-bin "#{File.basename(script)}"
195
+ END
196
+ end
197
+ FileUtils.cp(script, File.join(mac_dir, File.basename(script)))
198
+ FileUtils.cp(File.join(DIR, "static", "stubs", "cocoa-install"),
199
+ File.join(mac_dir, "cocoa-install"))
200
+
201
+ dmg = Binject::DMG.new(File.join(tmp_dir, "blank.hfz"), vol_name)
202
+ f2 = pkg("osx", opt)
203
+ if f2
204
+ dmg.grow(10)
205
+ dmg.inject_file("setup.dmg", f2.path)
206
+ end
207
+ dmg.inject_dir(app_app, app_dir)
208
+ dmg.chmod_file(0755, "#{app_app}/Contents/MacOS/#{name}-launch")
209
+ dmg.chmod_file(0755, "#{app_app}/Contents/MacOS/cocoa-install")
210
+ dmg.save(script.gsub(/\.\w+$/, '') + ".dmg") do |perc|
211
+ blk[perc * 0.01] if blk
212
+ end
213
+ FileUtils.rm_rf(tmp_dir)
214
+ blk[1.0] if blk
215
+ end
216
+
217
+ def self.linux(script, opt, &blk)
218
+ name = File.basename(script).gsub(/\.\w+$/, '')
219
+ app_name = name.capitalize.gsub(/[-_](\w)/) { $1.capitalize }
220
+ run_path = script.gsub(/\.\w+$/, '') + ".run"
221
+ tgz_path = script.gsub(/\.\w+$/, '') + ".tgz"
222
+ tmp_dir = File.join(LIB_DIR, "+run")
223
+ FileUtils.mkdir_p(tmp_dir)
224
+ pkgf = pkg("linux", opt)
225
+ prog = 1.0
226
+ if pkgf
227
+ size = Shy.hrun(pkgf)
228
+ pblk = Shy.progress(size) do |name, perc, left|
229
+ blk[perc * 0.5]
230
+ end if blk
231
+ Shy.xzf(pkgf, tmp_dir, &pblk)
232
+ prog -= 0.5
233
+ end
234
+
235
+ FileUtils.cp(script, File.join(tmp_dir, File.basename(script)))
236
+ File.open(File.join(tmp_dir, "sh-install"), 'wb') do |a|
237
+ rewrite a, File.join(DIR, "static", "stubs", "sh-install"),
238
+ 'SCRIPT' => "./#{File.basename(script)}"
239
+ end
240
+ FileUtils.chmod 0755, File.join(tmp_dir, "sh-install")
241
+
242
+ raw = Shy.du(tmp_dir)
243
+ File.open(tgz_path, 'wb') do |f|
244
+ pblk = Shy.progress(raw) do |name, perc, left|
245
+ blk[prog + (perc * prog)]
246
+ end if blk
247
+ Shy.czf(f, tmp_dir, &pblk)
248
+ end
249
+
250
+ md5, fsize = Shy.md5sum(tgz_path), File.size(tgz_path)
251
+ File.open(run_path, 'wb') do |f|
252
+ rewrite f, File.join(DIR, "static", "stubs", "blank.run"),
253
+ 'CRC' => '0000000000', 'MD5' => md5, 'LABEL' => app_name, 'NAME' => name,
254
+ 'SIZE' => fsize, 'RAWSIZE' => (raw / 1024) + 1, 'TIME' => Time.now, 'FULLSIZE' => raw
255
+ File.open(tgz_path, 'rb') do |f2|
256
+ f.write f2.read(8192) until f2.eof
257
+ end
258
+ end
259
+ FileUtils.chmod 0755, run_path
260
+ FileUtils.rm_rf(tgz_path)
261
+ FileUtils.rm_rf(tmp_dir)
262
+ blk[1.0] if blk
263
+ end
264
+ end
265
+
266
+ Shoes::I_NET = "No, download Shoes if it's absent."
267
+ Shoes::I_YES = "Yes, I want Shoes included."
268
+ Shoes::I_NOV = "Yes, include Shoes, but without video support."
269
+ PackMake = proc do
270
+ background "#DDD"
271
+
272
+ @page1 = stack do
273
+ stack do
274
+ background white
275
+ background "#FFF".."#EEE", :height => 50, :bottom => 50
276
+ border "#CCC", :height => 2, :bottom => 0
277
+ stack :margin => 20 do
278
+ selt = proc { @sel1.toggle; @sel2.toggle }
279
+ @path = ""
280
+ @shy_path = nil
281
+ @sel1 =
282
+ flow do
283
+ para "File:"
284
+ inscription " (or a ", link("directory", &selt), ")"
285
+ edit1 = edit_line :width => -120
286
+ @bb = button "Browse...", :width => 100 do
287
+ @path = edit1.text = ask_open_file
288
+ est_recount
289
+ end
290
+ end
291
+ @sel2 =
292
+ flow :hidden => true do
293
+ para "Directory:"
294
+ inscription " (or a ", link("single file", &selt), ")"
295
+ edit2 = edit_line :width => -120
296
+ @bf = button "Folder...", :width => 100 do
297
+ @path = edit2.text = ask_open_folder
298
+ est_recount
299
+ end
300
+ end
301
+
302
+ para "Package for:"
303
+ flow :margin_left => 20 do
304
+ @shy = check
305
+ para "Shoes (.shy)", :margin_right => 20
306
+ @exe = check
307
+ para "Windows", :margin_right => 20
308
+ @dmg = check
309
+ para "OS X", :margin_right => 20
310
+ @run = check
311
+ para "Linux"
312
+ end
313
+
314
+ para "Include Shoes with your app? ", :margin => 0
315
+ @inc = list_box :items => [Shoes::I_NET, Shoes::I_YES, Shoes::I_NOV], :width => 0.6, :height => 30 do
316
+ est_recount
317
+ end
318
+ inscription "(This option doesn't apply to Shoes .shy files.)"
319
+ end
320
+ end
321
+
322
+ stack :margin => 20 do
323
+ @est = para "Estimated size of each app: ", strong("0k"), :margin => 0, :margin_bottom => 4
324
+ def est_recount
325
+ base =
326
+ case @inc.text
327
+ when Shoes::I_NET; 70
328
+ when Shoes::I_YES; 7000
329
+ when Shoes::I_NOV; 2500
330
+ end
331
+ base += ((File.directory?(@path) ? Shy.du(@path) : File.size(@path)) rescue 0) / 1024
332
+ @est.replace "Estimated size of each app: ", strong(base > 1024 ?
333
+ "%0.1fM" % [base / 1024.0] : "#{base}K")
334
+ end
335
+ def build_thread
336
+ @shy_path = nil
337
+ if File.directory? @path
338
+ @shy_path = @path.gsub(%r![\\/]+$!, '') + ".shy"
339
+ elsif @shy.style[:checked]
340
+ @shy_path = @path.gsub(/\.\w+$/, '') + ".shy"
341
+ end
342
+ if @shy_path and not @shy_meta
343
+ @page_shy.show
344
+ @shy_para.text = File.basename(@shy_path)
345
+ @shy_launch.items = Shy.launchable(@path)
346
+ return
347
+ end
348
+ @page2.show
349
+ @path2.replace File.basename(@path)
350
+ inc_text = @inc.text
351
+ Thread.start do
352
+ begin
353
+ sofar, stage = 0.0, 1.0 / [@shy.style[:checked], @exe.style[:checked], @dmg.style[:checked], @run.style[:checked]].
354
+ select { |x| x }.size
355
+ blk = proc do |frac|
356
+ @prog.style(:width => sofar + (frac * stage))
357
+ end
358
+
359
+ if @shy_path
360
+ @status.replace "Compressing the script's folder."
361
+ pblk = Shy.progress(Shy.du(@path)) do |name, perc, left|
362
+ blk[perc]
363
+ end
364
+ Shy.c(@shy_path, @shy_meta, @path, &pblk)
365
+ @path = @shy_path
366
+ @prog.style(:width => sofar += stage)
367
+ debug @prog.style[:width]
368
+ end
369
+ if @exe.style[:checked]
370
+ @status.replace "Working on an .exe for Windows."
371
+ Shoes::Pack.exe(@path, inc_text, &blk)
372
+ @prog.style(:width => sofar += stage)
373
+ debug @prog.style[:width]
374
+ end
375
+ if @dmg.style[:checked]
376
+ @status.replace "Working on a .dmg for Mac OS X."
377
+ Shoes::Pack.dmg(@path, inc_text, &blk)
378
+ @prog.style(:width => sofar += stage)
379
+ end
380
+ if @run.style[:checked]
381
+ @status.replace "Working on a .run for Linux."
382
+ Shoes::Pack.linux(@path, inc_text, &blk)
383
+ @prog.style(:width => sofar += stage)
384
+ end
385
+ if @shy_path and not @shy.style[:checked]
386
+ FileUtils.rm_rf(@shy_path)
387
+ end
388
+
389
+ every do
390
+ if @prog.style[:width] == 1.0
391
+ @page2.hide
392
+ @page3.show
393
+ @path3.replace File.basename(@path)
394
+ end
395
+ end
396
+ rescue => e
397
+ error(e)
398
+ end
399
+ end
400
+ end
401
+
402
+ inscription "Using the latest Shoes build (0.r#{Shoes::REVISION})", :margin => 0
403
+ flow :margin_top => 10, :margin_left => 310 do
404
+ button "OK", :margin_right => 4 do
405
+ @page1.hide; @bb.hide; @bf.hide
406
+ build_thread
407
+ end
408
+ button "Cancel" do
409
+ close
410
+ end
411
+ end
412
+ end
413
+ end
414
+
415
+ @page_shy = stack :hidden => true do
416
+ stack do
417
+ background white
418
+ border "#DDD", :height => 2, :bottom => 0
419
+ stack :margin => 20 do
420
+ para "Details for:", :margin => 4
421
+ @shy_para = para "", :size => 20, :margin => 4
422
+ flow do
423
+ stack :margin => 10, :width => 0.4 do
424
+ para "Name of app:"
425
+ @shy_name = edit_line :width => 1.0
426
+ end
427
+ stack :margin => 10, :width => 0.4 do
428
+ para "Version:"
429
+ @shy_version = edit_line :width => 120
430
+ end
431
+ stack :margin => 10, :width => 0.4 do
432
+ para "Creator"
433
+ @shy_creator = edit_line :width => 1.0
434
+ end
435
+ stack :margin => 10, :width => 0.5 do
436
+ para "Launch"
437
+ @shy_launch = list_box :height => 30
438
+ end
439
+ end
440
+ end
441
+ end
442
+
443
+ stack :margin => 20 do
444
+ flow :margin_top => 10, :margin_left => 310 do
445
+ button "OK", :margin_right => 4 do
446
+ @shy_meta = Shy.new
447
+ @shy_meta.name = @shy_name.text
448
+ @shy_meta.creator = @shy_creator.text
449
+ @shy_meta.version = @shy_version.text
450
+ @shy_meta.launch = @shy_launch.text
451
+ @page_shy.hide
452
+ build_thread
453
+ end
454
+ button "Cancel" do
455
+ close
456
+ end
457
+ end
458
+ end
459
+ end
460
+
461
+ @page2 = stack :hidden => true do
462
+ stack do
463
+ background white
464
+ border "#DDD", :height => 2, :bottom => 0
465
+ stack :margin => 20 do
466
+ para "Packaging:", :margin => 4
467
+ @path2 = para "", :size => 20, :margin => 4
468
+ @status = para "", :margin => 4
469
+ end
470
+ end
471
+
472
+ stack :margin => 20 do
473
+ stack :width => -20, :height => 24 do
474
+ @prog = background "#{DIR}/static/stripe.png", :curve => 7
475
+ background "rgb(0, 0, 0, 100)".."rgb(120, 120, 120, 0)", :curve => 6, :height => 16
476
+ background "rgb(120, 120, 120, 0)".."rgb(0, 0, 0, 100)", :curve => 6,
477
+ :height => 16, :top => 8
478
+ border "rgb(60, 60, 60, 80)", :curve => 7, :strokewidth => 2
479
+ end
480
+ end
481
+ end
482
+
483
+ @page3 = stack :hidden => true do
484
+ stack do
485
+ background white
486
+ border "#DDD", :height => 2, :bottom => 0
487
+ stack :margin => 20 do
488
+ para "Completed:", :margin => 4
489
+ @path3 = para "", :size => 20, :margin => 4
490
+ para "Your files are done, you may close this window.", :margin => 4
491
+ end
492
+ end
493
+ end
494
+
495
+ start do
496
+ @exe.checked = false
497
+ @dmg.checked = false
498
+ @run.checked = false
499
+ @shy.checked = true
500
+ @inc.choose Shoes::I_NET
501
+ end
502
+ end
503
+ end