shoesgem 0.1480.0 → 0.1514.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (447) hide show
  1. data/LICENSE +30 -30
  2. data/README.rdoc +34 -34
  3. data/lib/shoes.rb +4 -4
  4. data/shoes/CHANGELOG.txt +29 -21
  5. data/shoes/COPYING.txt +30 -30
  6. data/shoes/README.txt +117 -117
  7. data/shoes/VERSION.txt +1 -1
  8. data/shoes/freetype6.dll +0 -0
  9. data/shoes/lib/shoes.rb +547 -524
  10. data/shoes/lib/shoes/cache.rb +54 -54
  11. data/shoes/lib/shoes/chipmunk.rb +35 -35
  12. data/shoes/lib/shoes/data.rb +39 -39
  13. data/shoes/lib/shoes/help.rb +468 -468
  14. data/shoes/lib/shoes/image.rb +25 -25
  15. data/shoes/lib/shoes/inspect.rb +128 -128
  16. data/shoes/lib/shoes/log.rb +48 -48
  17. data/shoes/lib/shoes/minitar.rb +986 -986
  18. data/shoes/lib/shoes/override.rb +38 -38
  19. data/shoes/lib/shoes/pack.rb +505 -503
  20. data/shoes/lib/shoes/search.rb +46 -46
  21. data/shoes/lib/shoes/setup.rb +329 -329
  22. data/shoes/lib/shoes/shy.rb +131 -131
  23. data/shoes/lib/shoes/shybuilder.rb +44 -44
  24. data/shoes/libcairo-2.dll +0 -0
  25. data/shoes/libeay32.dll +0 -0
  26. data/shoes/libexpat-1.dll +0 -0
  27. data/shoes/libfontconfig-1.dll +0 -0
  28. data/shoes/libgio-2.0-0.dll +0 -0
  29. data/shoes/libglib-2.0-0.dll +0 -0
  30. data/shoes/libgmodule-2.0-0.dll +0 -0
  31. data/shoes/libgobject-2.0-0.dll +0 -0
  32. data/shoes/libgthread-2.0-0.dll +0 -0
  33. data/shoes/libiconv2.dll +0 -0
  34. data/shoes/libjpeg-8.dll +0 -0
  35. data/shoes/libpango-1.0-0.dll +0 -0
  36. data/shoes/libpangocairo-1.0-0.dll +0 -0
  37. data/shoes/libpangoft2-1.0-0.dll +0 -0
  38. data/shoes/libpangowin32-1.0-0.dll +0 -0
  39. data/shoes/libpng14-14.dll +0 -0
  40. data/shoes/libportaudio-2.dll +0 -0
  41. data/shoes/libshoes.dll +0 -0
  42. data/shoes/libssl32.dll +0 -0
  43. data/shoes/libungif4.dll +0 -0
  44. data/shoes/libvlc.dll +0 -0
  45. data/shoes/msvcrt-ruby191.dll +0 -0
  46. data/shoes/plugins/liba52_plugin.dll +0 -0
  47. data/shoes/plugins/liba52sys_plugin.dll +0 -0
  48. data/shoes/plugins/liba52tofloat32_plugin.dll +0 -0
  49. data/shoes/plugins/liba52tospdif_plugin.dll +0 -0
  50. data/shoes/plugins/libaccess_directory_plugin.dll +0 -0
  51. data/shoes/plugins/libaccess_fake_plugin.dll +0 -0
  52. data/shoes/plugins/libaccess_file_plugin.dll +0 -0
  53. data/shoes/plugins/libaccess_filter_dump_plugin.dll +0 -0
  54. data/shoes/plugins/libaccess_filter_record_plugin.dll +0 -0
  55. data/shoes/plugins/libaccess_filter_timeshift_plugin.dll +0 -0
  56. data/shoes/plugins/libaccess_ftp_plugin.dll +0 -0
  57. data/shoes/plugins/libaccess_http_plugin.dll +0 -0
  58. data/shoes/plugins/libaccess_mms_plugin.dll +0 -0
  59. data/shoes/plugins/libaccess_output_dummy_plugin.dll +0 -0
  60. data/shoes/plugins/libaccess_output_file_plugin.dll +0 -0
  61. data/shoes/plugins/libaccess_output_http_plugin.dll +0 -0
  62. data/shoes/plugins/libaccess_output_shout_plugin.dll +0 -0
  63. data/shoes/plugins/libaccess_output_udp_plugin.dll +0 -0
  64. data/shoes/plugins/libaccess_realrtsp_plugin.dll +0 -0
  65. data/shoes/plugins/libaccess_smb_plugin.dll +0 -0
  66. data/shoes/plugins/libaccess_tcp_plugin.dll +0 -0
  67. data/shoes/plugins/libaccess_udp_plugin.dll +0 -0
  68. data/shoes/plugins/libadjust_plugin.dll +0 -0
  69. data/shoes/plugins/libadpcm_plugin.dll +0 -0
  70. data/shoes/plugins/libaiff_plugin.dll +0 -0
  71. data/shoes/plugins/libaout_directx_plugin.dll +0 -0
  72. data/shoes/plugins/libaout_file_plugin.dll +0 -0
  73. data/shoes/plugins/libaraw_plugin.dll +0 -0
  74. data/shoes/plugins/libasf_plugin.dll +0 -0
  75. data/shoes/plugins/libau_plugin.dll +0 -0
  76. data/shoes/plugins/libaudio_format_plugin.dll +0 -0
  77. data/shoes/plugins/libavi_plugin.dll +0 -0
  78. data/shoes/plugins/libbandlimited_resampler_plugin.dll +0 -0
  79. data/shoes/plugins/libblend_plugin.dll +0 -0
  80. data/shoes/plugins/libcaca_plugin.dll +0 -0
  81. data/shoes/plugins/libcdda_plugin.dll +0 -0
  82. data/shoes/plugins/libcinepak_plugin.dll +0 -0
  83. data/shoes/plugins/libclone_plugin.dll +0 -0
  84. data/shoes/plugins/libcmml_plugin.dll +0 -0
  85. data/shoes/plugins/libcrop_plugin.dll +0 -0
  86. data/shoes/plugins/libcvdsub_plugin.dll +0 -0
  87. data/shoes/plugins/libdeinterlace_plugin.dll +0 -0
  88. data/shoes/plugins/libdemuxdump_plugin.dll +0 -0
  89. data/shoes/plugins/libdirect3d_plugin.dll +0 -0
  90. data/shoes/plugins/libdistort_plugin.dll +0 -0
  91. data/shoes/plugins/libdmo_plugin.dll +0 -0
  92. data/shoes/plugins/libdolby_surround_decoder_plugin.dll +0 -0
  93. data/shoes/plugins/libdshow_plugin.dll +0 -0
  94. data/shoes/plugins/libdts_plugin.dll +0 -0
  95. data/shoes/plugins/libdtssys_plugin.dll +0 -0
  96. data/shoes/plugins/libdtstofloat32_plugin.dll +0 -0
  97. data/shoes/plugins/libdtstospdif_plugin.dll +0 -0
  98. data/shoes/plugins/libdummy_plugin.dll +0 -0
  99. data/shoes/plugins/libdvbsub_plugin.dll +0 -0
  100. data/shoes/plugins/libdvdnav_plugin.dll +0 -0
  101. data/shoes/plugins/libdvdread_plugin.dll +0 -0
  102. data/shoes/plugins/libequalizer_plugin.dll +0 -0
  103. data/shoes/plugins/libexport_plugin.dll +0 -0
  104. data/shoes/plugins/libfaad_plugin.dll +0 -0
  105. data/shoes/plugins/libfake_plugin.dll +0 -0
  106. data/shoes/plugins/libffmpeg_plugin.dll +0 -0
  107. data/shoes/plugins/libfixed32tofloat32_plugin.dll +0 -0
  108. data/shoes/plugins/libfixed32tos16_plugin.dll +0 -0
  109. data/shoes/plugins/libflac_plugin.dll +0 -0
  110. data/shoes/plugins/libflacdec_plugin.dll +0 -0
  111. data/shoes/plugins/libfloat32_mixer_plugin.dll +0 -0
  112. data/shoes/plugins/libfloat32tos16_plugin.dll +0 -0
  113. data/shoes/plugins/libfloat32tos8_plugin.dll +0 -0
  114. data/shoes/plugins/libfloat32tou16_plugin.dll +0 -0
  115. data/shoes/plugins/libfloat32tou8_plugin.dll +0 -0
  116. data/shoes/plugins/libfreetype_plugin.dll +0 -0
  117. data/shoes/plugins/libgestures_plugin.dll +0 -0
  118. data/shoes/plugins/libglwin32_plugin.dll +0 -0
  119. data/shoes/plugins/libgoom_plugin.dll +0 -0
  120. data/shoes/plugins/libgrowl_plugin.dll +0 -0
  121. data/shoes/plugins/libh264_plugin.dll +0 -0
  122. data/shoes/plugins/libheadphone_channel_mixer_plugin.dll +0 -0
  123. data/shoes/plugins/libhotkeys_plugin.dll +0 -0
  124. data/shoes/plugins/libhttp_plugin.dll +0 -0
  125. data/shoes/plugins/libi420_rgb_plugin.dll +0 -0
  126. data/shoes/plugins/libi420_ymga_plugin.dll +0 -0
  127. data/shoes/plugins/libi420_yuy2_plugin.dll +0 -0
  128. data/shoes/plugins/libi422_yuy2_plugin.dll +0 -0
  129. data/shoes/plugins/libid3tag_plugin.dll +0 -0
  130. data/shoes/plugins/libimage_plugin.dll +0 -0
  131. data/shoes/plugins/libinvert_plugin.dll +0 -0
  132. data/shoes/plugins/libipv4_plugin.dll +0 -0
  133. data/shoes/plugins/libipv6_plugin.dll +0 -0
  134. data/shoes/plugins/liblibmpeg2_plugin.dll +0 -0
  135. data/shoes/plugins/liblinear_resampler_plugin.dll +0 -0
  136. data/shoes/plugins/liblogger_plugin.dll +0 -0
  137. data/shoes/plugins/liblogo_plugin.dll +0 -0
  138. data/shoes/plugins/liblpcm_plugin.dll +0 -0
  139. data/shoes/plugins/libm3u_plugin.dll +0 -0
  140. data/shoes/plugins/libm4a_plugin.dll +0 -0
  141. data/shoes/plugins/libm4v_plugin.dll +0 -0
  142. data/shoes/plugins/libmagnify_plugin.dll +0 -0
  143. data/shoes/plugins/libmarq_plugin.dll +0 -0
  144. data/shoes/plugins/libmemcpy_plugin.dll +0 -0
  145. data/shoes/plugins/libmjpeg_plugin.dll +0 -0
  146. data/shoes/plugins/libmkv_plugin.dll +0 -0
  147. data/shoes/plugins/libmod_plugin.dll +0 -0
  148. data/shoes/plugins/libmosaic_plugin.dll +0 -0
  149. data/shoes/plugins/libmotionblur_plugin.dll +0 -0
  150. data/shoes/plugins/libmotiondetect_plugin.dll +0 -0
  151. data/shoes/plugins/libmp4_plugin.dll +0 -0
  152. data/shoes/plugins/libmpc_plugin.dll +0 -0
  153. data/shoes/plugins/libmpeg_audio_plugin.dll +0 -0
  154. data/shoes/plugins/libmpga_plugin.dll +0 -0
  155. data/shoes/plugins/libmpgatofixed32_plugin.dll +0 -0
  156. data/shoes/plugins/libmpgv_plugin.dll +0 -0
  157. data/shoes/plugins/libmsn_plugin.dll +0 -0
  158. data/shoes/plugins/libmux_asf_plugin.dll +0 -0
  159. data/shoes/plugins/libmux_avi_plugin.dll +0 -0
  160. data/shoes/plugins/libmux_dummy_plugin.dll +0 -0
  161. data/shoes/plugins/libmux_mp4_plugin.dll +0 -0
  162. data/shoes/plugins/libmux_mpjpeg_plugin.dll +0 -0
  163. data/shoes/plugins/libmux_ogg_plugin.dll +0 -0
  164. data/shoes/plugins/libmux_ps_plugin.dll +0 -0
  165. data/shoes/plugins/libmux_wav_plugin.dll +0 -0
  166. data/shoes/plugins/libnetsync_plugin.dll +0 -0
  167. data/shoes/plugins/libnormvol_plugin.dll +0 -0
  168. data/shoes/plugins/libnsc_plugin.dll +0 -0
  169. data/shoes/plugins/libnsv_plugin.dll +0 -0
  170. data/shoes/plugins/libntservice_plugin.dll +0 -0
  171. data/shoes/plugins/libnuv_plugin.dll +0 -0
  172. data/shoes/plugins/libogg_plugin.dll +0 -0
  173. data/shoes/plugins/libopengl_plugin.dll +0 -0
  174. data/shoes/plugins/libosdmenu_plugin.dll +0 -0
  175. data/shoes/plugins/libpacketizer_copy_plugin.dll +0 -0
  176. data/shoes/plugins/libpacketizer_h264_plugin.dll +0 -0
  177. data/shoes/plugins/libpacketizer_mpeg4audio_plugin.dll +0 -0
  178. data/shoes/plugins/libpacketizer_mpeg4video_plugin.dll +0 -0
  179. data/shoes/plugins/libpacketizer_mpegvideo_plugin.dll +0 -0
  180. data/shoes/plugins/libparam_eq_plugin.dll +0 -0
  181. data/shoes/plugins/libplaylist_plugin.dll +0 -0
  182. data/shoes/plugins/libpng_plugin.dll +0 -0
  183. data/shoes/plugins/libpodcast_plugin.dll +0 -0
  184. data/shoes/plugins/libportaudio_plugin.dll +0 -0
  185. data/shoes/plugins/libps_plugin.dll +0 -0
  186. data/shoes/plugins/libpva_plugin.dll +0 -0
  187. data/shoes/plugins/librawdv_plugin.dll +0 -0
  188. data/shoes/plugins/librawvideo_plugin.dll +0 -0
  189. data/shoes/plugins/librc_plugin.dll +0 -0
  190. data/shoes/plugins/libreal_plugin.dll +0 -0
  191. data/shoes/plugins/librealaudio_plugin.dll +0 -0
  192. data/shoes/plugins/librss_plugin.dll +0 -0
  193. data/shoes/plugins/librv32_plugin.dll +0 -0
  194. data/shoes/plugins/libs16tofixed32_plugin.dll +0 -0
  195. data/shoes/plugins/libs16tofloat32_plugin.dll +0 -0
  196. data/shoes/plugins/libs16tofloat32swab_plugin.dll +0 -0
  197. data/shoes/plugins/libs8tofloat32_plugin.dll +0 -0
  198. data/shoes/plugins/libsap_plugin.dll +0 -0
  199. data/shoes/plugins/libscale_plugin.dll +0 -0
  200. data/shoes/plugins/libscreen_plugin.dll +0 -0
  201. data/shoes/plugins/libsdl_image_plugin.dll +0 -0
  202. data/shoes/plugins/libsgimb_plugin.dll +0 -0
  203. data/shoes/plugins/libshout_plugin.dll +0 -0
  204. data/shoes/plugins/libshowintf_plugin.dll +0 -0
  205. data/shoes/plugins/libsimple_channel_mixer_plugin.dll +0 -0
  206. data/shoes/plugins/libspdif_mixer_plugin.dll +0 -0
  207. data/shoes/plugins/libspeex_plugin.dll +0 -0
  208. data/shoes/plugins/libspudec_plugin.dll +0 -0
  209. data/shoes/plugins/libstream_out_bridge_plugin.dll +0 -0
  210. data/shoes/plugins/libstream_out_description_plugin.dll +0 -0
  211. data/shoes/plugins/libstream_out_display_plugin.dll +0 -0
  212. data/shoes/plugins/libstream_out_dummy_plugin.dll +0 -0
  213. data/shoes/plugins/libstream_out_duplicate_plugin.dll +0 -0
  214. data/shoes/plugins/libstream_out_es_plugin.dll +0 -0
  215. data/shoes/plugins/libstream_out_gather_plugin.dll +0 -0
  216. data/shoes/plugins/libstream_out_mosaic_bridge_plugin.dll +0 -0
  217. data/shoes/plugins/libstream_out_rtp_plugin.dll +0 -0
  218. data/shoes/plugins/libstream_out_standard_plugin.dll +0 -0
  219. data/shoes/plugins/libstream_out_transcode_plugin.dll +0 -0
  220. data/shoes/plugins/libsubsdec_plugin.dll +0 -0
  221. data/shoes/plugins/libsubtitle_plugin.dll +0 -0
  222. data/shoes/plugins/libsvcdsub_plugin.dll +0 -0
  223. data/shoes/plugins/libtelnet_plugin.dll +0 -0
  224. data/shoes/plugins/libtelx_plugin.dll +0 -0
  225. data/shoes/plugins/libtheora_plugin.dll +0 -0
  226. data/shoes/plugins/libtime_plugin.dll +0 -0
  227. data/shoes/plugins/libtransform_plugin.dll +0 -0
  228. data/shoes/plugins/libtrivial_channel_mixer_plugin.dll +0 -0
  229. data/shoes/plugins/libtrivial_mixer_plugin.dll +0 -0
  230. data/shoes/plugins/libtrivial_resampler_plugin.dll +0 -0
  231. data/shoes/plugins/libts_plugin.dll +0 -0
  232. data/shoes/plugins/libtta_plugin.dll +0 -0
  233. data/shoes/plugins/libtwolame_plugin.dll +0 -0
  234. data/shoes/plugins/libty_plugin.dll +0 -0
  235. data/shoes/plugins/libu8tofixed32_plugin.dll +0 -0
  236. data/shoes/plugins/libu8tofloat32_plugin.dll +0 -0
  237. data/shoes/plugins/libugly_resampler_plugin.dll +0 -0
  238. data/shoes/plugins/libvcd_plugin.dll +0 -0
  239. data/shoes/plugins/libvisual_plugin.dll +0 -0
  240. data/shoes/plugins/libvobsub_plugin.dll +0 -0
  241. data/shoes/plugins/libvoc_plugin.dll +0 -0
  242. data/shoes/plugins/libvod_rtsp_plugin.dll +0 -0
  243. data/shoes/plugins/libvorbis_plugin.dll +0 -0
  244. data/shoes/plugins/libvout_directx_plugin.dll +0 -0
  245. data/shoes/plugins/libwall_plugin.dll +0 -0
  246. data/shoes/plugins/libwav_plugin.dll +0 -0
  247. data/shoes/plugins/libwaveout_plugin.dll +0 -0
  248. data/shoes/plugins/libwingdi_plugin.dll +0 -0
  249. data/shoes/plugins/libx264_plugin.dll +0 -0
  250. data/shoes/plugins/libxa_plugin.dll +0 -0
  251. data/shoes/plugins/libxtag_plugin.dll +0 -0
  252. data/shoes/readline5.dll +0 -0
  253. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/fast_xs.so +0 -0
  254. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot.rb +26 -26
  255. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/blankslate.rb +63 -63
  256. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/builder.rb +216 -216
  257. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/elements.rb +510 -510
  258. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/htmlinfo.rb +691 -691
  259. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/inspect.rb +103 -103
  260. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/modules.rb +40 -40
  261. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/parse.rb +38 -38
  262. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tag.rb +202 -202
  263. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tags.rb +164 -164
  264. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/traverse.rb +838 -838
  265. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/xchar.rb +94 -94
  266. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot_scan.so +0 -0
  267. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json.rb +8 -8
  268. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/core.rb +135 -135
  269. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/rails.rb +58 -58
  270. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/common.rb +354 -354
  271. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext.rb +13 -13
  272. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/generator.so +0 -0
  273. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/parser.so +0 -0
  274. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/version.rb +9 -9
  275. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3.rb +11 -11
  276. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3/constants.rb +49 -49
  277. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3/database.rb +568 -568
  278. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3/errors.rb +44 -44
  279. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3/pragmas.rb +280 -280
  280. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3/resultset.rb +126 -126
  281. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3/statement.rb +146 -146
  282. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3/translator.rb +114 -114
  283. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3/value.rb +57 -57
  284. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3/version.rb +16 -16
  285. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3_native.so +0 -0
  286. data/shoes/ruby/gems/1.9.1/specifications/hpricot-0.8.1.gemspec +32 -32
  287. data/shoes/ruby/gems/1.9.1/specifications/json-shoes-1.1.3.gemspec +34 -34
  288. data/shoes/ruby/gems/1.9.1/specifications/sqlite3-ruby-1.3.0.gemspec +48 -48
  289. data/shoes/ruby/lib/ftsearch/analysis/analyzer.rb +16 -16
  290. data/shoes/ruby/lib/ftsearch/analysis/simple_identifier_analyzer.rb +23 -23
  291. data/shoes/ruby/lib/ftsearch/analysis/whitespace_analyzer.rb +22 -22
  292. data/shoes/ruby/lib/ftsearch/document_map_reader.rb +106 -106
  293. data/shoes/ruby/lib/ftsearch/document_map_writer.rb +46 -46
  294. data/shoes/ruby/lib/ftsearch/field_infos.rb +46 -46
  295. data/shoes/ruby/lib/ftsearch/fragment_writer.rb +114 -114
  296. data/shoes/ruby/lib/ftsearch/fulltext_reader.rb +52 -52
  297. data/shoes/ruby/lib/ftsearch/fulltext_writer.rb +75 -75
  298. data/shoes/ruby/lib/ftsearch/suffix_array_reader.rb +277 -277
  299. data/shoes/ruby/lib/ftsearch/suffix_array_writer.rb +99 -99
  300. data/shoes/ruby/lib/ftsearch/util.rb +21 -21
  301. data/shoes/ruby/lib/i386-mingw32/bigdecimal.so +0 -0
  302. data/shoes/ruby/lib/i386-mingw32/binject.so +0 -0
  303. data/shoes/ruby/lib/i386-mingw32/bloops.so +0 -0
  304. data/shoes/ruby/lib/i386-mingw32/chipmunk.so +0 -0
  305. data/shoes/ruby/lib/i386-mingw32/continuation.so +0 -0
  306. data/shoes/ruby/lib/i386-mingw32/coverage.so +0 -0
  307. data/shoes/ruby/lib/i386-mingw32/curses.so +0 -0
  308. data/shoes/ruby/lib/i386-mingw32/digest.so +0 -0
  309. data/shoes/ruby/lib/i386-mingw32/digest/bubblebabble.so +0 -0
  310. data/shoes/ruby/lib/i386-mingw32/digest/md5.so +0 -0
  311. data/shoes/ruby/lib/i386-mingw32/digest/rmd160.so +0 -0
  312. data/shoes/ruby/lib/i386-mingw32/digest/sha1.so +0 -0
  313. data/shoes/ruby/lib/i386-mingw32/digest/sha2.so +0 -0
  314. data/shoes/ruby/lib/i386-mingw32/dl.so +0 -0
  315. data/shoes/ruby/lib/i386-mingw32/enc/big5.so +0 -0
  316. data/shoes/ruby/lib/i386-mingw32/enc/cp949.so +0 -0
  317. data/shoes/ruby/lib/i386-mingw32/enc/emacs_mule.so +0 -0
  318. data/shoes/ruby/lib/i386-mingw32/enc/encdb.so +0 -0
  319. data/shoes/ruby/lib/i386-mingw32/enc/euc_jp.so +0 -0
  320. data/shoes/ruby/lib/i386-mingw32/enc/euc_kr.so +0 -0
  321. data/shoes/ruby/lib/i386-mingw32/enc/euc_tw.so +0 -0
  322. data/shoes/ruby/lib/i386-mingw32/enc/gb18030.so +0 -0
  323. data/shoes/ruby/lib/i386-mingw32/enc/gb2312.so +0 -0
  324. data/shoes/ruby/lib/i386-mingw32/enc/gbk.so +0 -0
  325. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_1.so +0 -0
  326. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_10.so +0 -0
  327. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_11.so +0 -0
  328. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_13.so +0 -0
  329. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_14.so +0 -0
  330. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_15.so +0 -0
  331. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_16.so +0 -0
  332. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_2.so +0 -0
  333. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_3.so +0 -0
  334. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_4.so +0 -0
  335. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_5.so +0 -0
  336. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_6.so +0 -0
  337. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_7.so +0 -0
  338. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_8.so +0 -0
  339. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_9.so +0 -0
  340. data/shoes/ruby/lib/i386-mingw32/enc/koi8_r.so +0 -0
  341. data/shoes/ruby/lib/i386-mingw32/enc/koi8_u.so +0 -0
  342. data/shoes/ruby/lib/i386-mingw32/enc/shift_jis.so +0 -0
  343. data/shoes/ruby/lib/i386-mingw32/enc/trans/big5.so +0 -0
  344. data/shoes/ruby/lib/i386-mingw32/enc/trans/chinese.so +0 -0
  345. data/shoes/ruby/lib/i386-mingw32/enc/trans/escape.so +0 -0
  346. data/shoes/ruby/lib/i386-mingw32/enc/trans/gb18030.so +0 -0
  347. data/shoes/ruby/lib/i386-mingw32/enc/trans/gbk.so +0 -0
  348. data/shoes/ruby/lib/i386-mingw32/enc/trans/iso2022.so +0 -0
  349. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese.so +0 -0
  350. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_euc.so +0 -0
  351. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_sjis.so +0 -0
  352. data/shoes/ruby/lib/i386-mingw32/enc/trans/korean.so +0 -0
  353. data/shoes/ruby/lib/i386-mingw32/enc/trans/single_byte.so +0 -0
  354. data/shoes/ruby/lib/i386-mingw32/enc/trans/transdb.so +0 -0
  355. data/shoes/ruby/lib/i386-mingw32/enc/trans/utf_16_32.so +0 -0
  356. data/shoes/ruby/lib/i386-mingw32/enc/utf_16be.so +0 -0
  357. data/shoes/ruby/lib/i386-mingw32/enc/utf_16le.so +0 -0
  358. data/shoes/ruby/lib/i386-mingw32/enc/utf_32be.so +0 -0
  359. data/shoes/ruby/lib/i386-mingw32/enc/utf_32le.so +0 -0
  360. data/shoes/ruby/lib/i386-mingw32/enc/windows_1251.so +0 -0
  361. data/shoes/ruby/lib/i386-mingw32/etc.so +0 -0
  362. data/shoes/ruby/lib/i386-mingw32/fcntl.so +0 -0
  363. data/shoes/ruby/lib/i386-mingw32/fiber.so +0 -0
  364. data/shoes/ruby/lib/i386-mingw32/ftsearchrt.so +0 -0
  365. data/shoes/ruby/lib/i386-mingw32/gdbm.so +0 -0
  366. data/shoes/ruby/lib/i386-mingw32/iconv.so +0 -0
  367. data/shoes/ruby/lib/i386-mingw32/io/wait.so +0 -0
  368. data/shoes/ruby/lib/i386-mingw32/json/ext/generator.so +0 -0
  369. data/shoes/ruby/lib/i386-mingw32/json/ext/parser.so +0 -0
  370. data/shoes/ruby/lib/i386-mingw32/mathn/complex.so +0 -0
  371. data/shoes/ruby/lib/i386-mingw32/mathn/rational.so +0 -0
  372. data/shoes/ruby/lib/i386-mingw32/nkf.so +0 -0
  373. data/shoes/ruby/lib/i386-mingw32/openssl.so +0 -0
  374. data/shoes/ruby/lib/i386-mingw32/racc/cparse.so +0 -0
  375. data/shoes/ruby/lib/i386-mingw32/rbconfig.rb +4 -4
  376. data/shoes/ruby/lib/i386-mingw32/readline.so +0 -0
  377. data/shoes/ruby/lib/i386-mingw32/ripper.so +0 -0
  378. data/shoes/ruby/lib/i386-mingw32/sdbm.so +0 -0
  379. data/shoes/ruby/lib/i386-mingw32/socket.so +0 -0
  380. data/shoes/ruby/lib/i386-mingw32/stringio.so +0 -0
  381. data/shoes/ruby/lib/i386-mingw32/strscan.so +0 -0
  382. data/shoes/ruby/lib/i386-mingw32/syck.so +0 -0
  383. data/shoes/ruby/lib/i386-mingw32/win32ole.so +0 -0
  384. data/shoes/ruby/lib/i386-mingw32/zlib.so +0 -0
  385. data/shoes/samples/class-book.rb +43 -43
  386. data/shoes/samples/class-book.yaml +387 -387
  387. data/shoes/samples/expert-definr.rb +23 -23
  388. data/shoes/samples/expert-funnies.rb +51 -51
  389. data/shoes/samples/expert-irb.rb +112 -112
  390. data/shoes/samples/expert-minesweeper.rb +267 -267
  391. data/shoes/samples/expert-othello.rb +319 -319
  392. data/shoes/samples/expert-pong.rb +62 -62
  393. data/shoes/samples/expert-tankspank.rb +385 -385
  394. data/shoes/samples/good-arc.rb +37 -37
  395. data/shoes/samples/good-clock.rb +51 -51
  396. data/shoes/samples/good-follow.rb +26 -26
  397. data/shoes/samples/good-reminder.rb +174 -174
  398. data/shoes/samples/good-vjot.rb +56 -56
  399. data/shoes/samples/simple-accordion.rb +75 -75
  400. data/shoes/samples/simple-anim-shapes.rb +17 -17
  401. data/shoes/samples/simple-anim-text.rb +13 -13
  402. data/shoes/samples/simple-arc.rb +23 -23
  403. data/shoes/samples/simple-bounce.rb +24 -24
  404. data/shoes/samples/simple-calc.rb +70 -70
  405. data/shoes/samples/simple-chipmunk.rb +26 -26
  406. data/shoes/samples/simple-control-sizes.rb +24 -24
  407. data/shoes/samples/simple-curve.rb +26 -26
  408. data/shoes/samples/simple-dialogs.rb +29 -29
  409. data/shoes/samples/simple-downloader.rb +27 -27
  410. data/shoes/samples/simple-draw.rb +13 -13
  411. data/shoes/samples/simple-editor.rb +28 -28
  412. data/shoes/samples/simple-form.rb +28 -28
  413. data/shoes/samples/simple-mask.rb +21 -21
  414. data/shoes/samples/simple-menu.rb +31 -31
  415. data/shoes/samples/simple-menu1.rb +35 -35
  416. data/shoes/samples/simple-rubygems.rb +29 -29
  417. data/shoes/samples/simple-slide.rb +45 -45
  418. data/shoes/samples/simple-sphere.rb +28 -28
  419. data/shoes/samples/simple-sqlite3.rb +13 -13
  420. data/shoes/samples/simple-timer.rb +13 -13
  421. data/shoes/samples/simple-video.rb +13 -13
  422. data/shoes/shoes.exe +0 -0
  423. data/shoes/shoes.exe.manifest +17 -17
  424. data/shoes/sqlite3.dll +0 -0
  425. data/shoes/static/code_highlighter.js +188 -188
  426. data/shoes/static/code_highlighter_ruby.js +26 -26
  427. data/shoes/static/manual-en.txt +2825 -2825
  428. data/shoes/static/manual-ja.txt +2825 -2780
  429. data/shoes/static/manual.css +167 -167
  430. data/shoes/static/stubs/blank.run +375 -375
  431. data/shoes/static/stubs/sh-install +48 -48
  432. data/shoes/static/stubs/shoes-stub-inject.exe +0 -0
  433. data/shoes/static/stubs/shoes-stub.exe +0 -0
  434. data/shoes/zlib.dll +0 -0
  435. data/shoes/zlib1.dll +0 -0
  436. metadata +213 -15
  437. data/shoes/nsis/base.nsi +0 -644
  438. data/shoes/nsis/installer-1.bmp +0 -0
  439. data/shoes/nsis/installer-2.bmp +0 -0
  440. data/shoes/nsis/setup.ico +0 -0
  441. data/shoes/nsis/shoes.exe.manifest +0 -17
  442. data/shoes/nsis/shoes.ico +0 -0
  443. data/shoes/nsis/shoes.nsi +0 -644
  444. data/shoes/nsis/stub-inject.c +0 -59
  445. data/shoes/nsis/stub.c +0 -271
  446. data/shoes/nsis/stub32.h +0 -14
  447. data/shoes/nsis/stub32.rc +0 -16
@@ -1,38 +1,38 @@
1
- module Override
2
- def self.extended mod
3
- def mod.list_box args = {}
4
- l, t, w, h = args[:left], args[:top], args[:width], 20
5
- w ||= 200
6
- bcolor = rgb(123, 158, 189)
7
- selected, fimg, bimg = [], nil, nil
8
-
9
- f = flow :left => l, :top => t, :width => w, :height => h do
10
- border bcolor
11
- selected[0] = inscription
12
- fimg = image "#{DIR}/static/listbox_button1.png", :left => w-17, :top => 2
13
- bimg = image("#{DIR}/static/listbox_button2.png", :left => w-17, :top => 2).hide
14
- fimg.hover{bimg.show}
15
- bimg.leave{bimg.hide}
16
- bimg.click{bimg.show}
17
- end
18
-
19
- rects, inscs = [], []
20
- args[:items].length.times do |i|
21
- x, y = l, t+(i+1)*h
22
- r = rect(x, y, w-1, h, :stroke => bcolor, :fill => white).hide
23
- s = inscription(args[:items][i], :left => x, :top => y).hide
24
- r.hover{r.style :fill => blue}
25
- r.leave{r.style :fill => white}
26
- r.click{selected[0].text = s.text; selected[1] = r}
27
- rects << r
28
- inscs << s
29
- end
30
-
31
- f.click do
32
- rects.each{|r| r.toggle; r.style(:fill => blue) if r == selected[1]}
33
- inscs.each{|i| i.toggle}
34
- end
35
- end
36
- end
37
- end
38
-
1
+ module Override
2
+ def self.extended mod
3
+ def mod.list_box args = {}
4
+ l, t, w, h = args[:left], args[:top], args[:width], 20
5
+ w ||= 200
6
+ bcolor = rgb(123, 158, 189)
7
+ selected, fimg, bimg = [], nil, nil
8
+
9
+ f = flow :left => l, :top => t, :width => w, :height => h do
10
+ border bcolor
11
+ selected[0] = inscription
12
+ fimg = image "#{DIR}/static/listbox_button1.png", :left => w-17, :top => 2
13
+ bimg = image("#{DIR}/static/listbox_button2.png", :left => w-17, :top => 2).hide
14
+ fimg.hover{bimg.show}
15
+ bimg.leave{bimg.hide}
16
+ bimg.click{bimg.show}
17
+ end
18
+
19
+ rects, inscs = [], []
20
+ args[:items].length.times do |i|
21
+ x, y = l, t+(i+1)*h
22
+ r = rect(x, y, w-1, h, :stroke => bcolor, :fill => white).hide
23
+ s = inscription(args[:items][i], :left => x, :top => y).hide
24
+ r.hover{r.style :fill => blue}
25
+ r.leave{r.style :fill => white}
26
+ r.click{selected[0].text = s.text; selected[1] = r}
27
+ rects << r
28
+ inscs << s
29
+ end
30
+
31
+ f.click do
32
+ rects.each{|r| r.toggle; r.style(:fill => blue) if r == selected[1]}
33
+ inscs.each{|i| i.toggle}
34
+ end
35
+ end
36
+ end
37
+ end
38
+
@@ -1,503 +1,505 @@
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
+
96
+ count, last = 0, 0.0
97
+ exe.save(script.gsub(/\.\w+$/, '') + ".exe") do |len|
98
+ count += len
99
+ prg = count.to_f / size.to_f
100
+ blk[last = prg] if blk and prg - last > 0.02 and prg < 1.0
101
+ end
102
+
103
+ f.close
104
+ f2.close
105
+ f3.close
106
+ else
107
+ Dir.chdir DIR + '/static/stubs' do
108
+ `.\\shoes-stub-inject.exe #{script.gsub('/', "\\")}`
109
+ end
110
+ end
111
+ blk[1.0] if blk
112
+ end
113
+
114
+ def self.dmg(script, opt, &blk)
115
+ name = File.basename(script).gsub(/\.\w+$/, '')
116
+ app_name = name.capitalize.gsub(/[-_](\w)/) { $1.capitalize }
117
+ vol_name = name.capitalize.gsub(/[-_](\w)/) { " " + $1.capitalize }
118
+ app_app = "#{app_name}.app"
119
+ vers = [1, 0]
120
+
121
+ tmp_dir = File.join(LIB_DIR, "+dmg")
122
+ FileUtils.rm_rf(tmp_dir)
123
+ FileUtils.mkdir_p(tmp_dir)
124
+ FileUtils.cp(File.join(DIR, "static", "stubs", "blank.hfz"),
125
+ File.join(tmp_dir, "blank.hfz"))
126
+ app_dir = File.join(tmp_dir, app_app)
127
+ res_dir = File.join(tmp_dir, app_app, "Contents", "Resources")
128
+ mac_dir = File.join(tmp_dir, app_app, "Contents", "MacOS")
129
+ [res_dir, mac_dir].map { |x| FileUtils.mkdir_p(x) }
130
+ FileUtils.cp(File.join(DIR, "static", "Shoes.icns"), app_dir)
131
+ FileUtils.cp(File.join(DIR, "static", "Shoes.icns"), res_dir)
132
+ File.open(File.join(app_dir, "Contents", "PkgInfo"), 'w') do |f|
133
+ f << "APPL????"
134
+ end
135
+ File.open(File.join(app_dir, "Contents", "Info.plist"), 'w') do |f|
136
+ f << <<END
137
+ <?xml version="1.0" encoding="UTF-8"?>
138
+ <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
139
+ <plist version="1.0">
140
+ <dict>
141
+ <key>CFBundleGetInfoString</key>
142
+ <string>#{app_name} #{vers.join(".")}</string>
143
+ <key>CFBundleExecutable</key>
144
+ <string>#{name}-launch</string>
145
+ <key>CFBundleIdentifier</key>
146
+ <string>org.hackety.#{name}</string>
147
+ <key>CFBundleName</key>
148
+ <string>#{app_name}</string>
149
+ <key>CFBundleIconFile</key>
150
+ <string>Shoes.icns</string>
151
+ <key>CFBundleShortVersionString</key>
152
+ <string>#{vers.join(".")}</string>
153
+ <key>CFBundleInfoDictionaryVersion</key>
154
+ <string>6.0</string>
155
+ <key>CFBundlePackageType</key>
156
+ <string>APPL</string>
157
+ <key>IFMajorVersion</key>
158
+ <integer>#{vers[0]}</integer>
159
+ <key>IFMinorVersion</key>
160
+ <integer>#{vers[1]}</integer>
161
+ </dict>
162
+ </plist>
163
+ END
164
+ end
165
+ File.open(File.join(app_dir, "Contents", "version.plist"), 'w') do |f|
166
+ f << <<END
167
+ <?xml version="1.0" encoding="UTF-8"?>
168
+ <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
169
+ <plist version="1.0">
170
+ <dict>
171
+ <key>BuildVersion</key>
172
+ <string>1</string>
173
+ <key>CFBundleVersion</key>
174
+ <string>#{vers.join(".")}</string>
175
+ <key>ProjectName</key>
176
+ <string>#{app_name}</string>
177
+ <key>SourceVersion</key>
178
+ <string>#{Time.now.strftime("%Y%m%d")}</string>
179
+ </dict>
180
+ </plist>
181
+ END
182
+ end
183
+ File.open(File.join(mac_dir, "#{name}-launch"), 'w') do |f|
184
+ f << <<END
185
+ #!/bin/bash
186
+ SHOESPATH=/Applications/Shoes.app/Contents/MacOS
187
+ APPPATH="${0%/*}"
188
+ unset DYLD_LIBRARY_PATH
189
+ cd "$APPPATH"
190
+ echo "[Pango]" > /tmp/pangorc
191
+ echo "ModuleFiles=$SHOESPATH/pango.modules" >> /tmp/pangorc
192
+ if [ ! -d /Applications/Shoes.app ]
193
+ then ./cocoa-install
194
+ fi
195
+ open -a /Applications/Shoes.app "#{File.basename(script)}"
196
+ # DYLD_LIBRARY_PATH=$SHOESPATH PANGO_RC_FILE="$APPPATH/pangorc" $SHOESPATH/shoes-bin "#{File.basename(script)}"
197
+ END
198
+ end
199
+ FileUtils.cp(script, File.join(mac_dir, File.basename(script)))
200
+ FileUtils.cp(File.join(DIR, "static", "stubs", "cocoa-install"),
201
+ File.join(mac_dir, "cocoa-install"))
202
+
203
+ dmg = Binject::DMG.new(File.join(tmp_dir, "blank.hfz"), vol_name)
204
+ f2 = pkg("osx", opt)
205
+ if f2
206
+ dmg.grow(10)
207
+ dmg.inject_file("setup.dmg", f2.path)
208
+ end
209
+ dmg.inject_dir(app_app, app_dir)
210
+ dmg.chmod_file(0755, "#{app_app}/Contents/MacOS/#{name}-launch")
211
+ dmg.chmod_file(0755, "#{app_app}/Contents/MacOS/cocoa-install")
212
+ dmg.save(script.gsub(/\.\w+$/, '') + ".dmg") do |perc|
213
+ blk[perc * 0.01] if blk
214
+ end
215
+ FileUtils.rm_rf(tmp_dir)
216
+ blk[1.0] if blk
217
+ end
218
+
219
+ def self.linux(script, opt, &blk)
220
+ name = File.basename(script).gsub(/\.\w+$/, '')
221
+ app_name = name.capitalize.gsub(/[-_](\w)/) { $1.capitalize }
222
+ run_path = script.gsub(/\.\w+$/, '') + ".run"
223
+ tgz_path = script.gsub(/\.\w+$/, '') + ".tgz"
224
+ tmp_dir = File.join(LIB_DIR, "+run")
225
+ FileUtils.mkdir_p(tmp_dir)
226
+ pkgf = pkg("linux", opt)
227
+ prog = 1.0
228
+ if pkgf
229
+ size = Shy.hrun(pkgf)
230
+ pblk = Shy.progress(size) do |name, perc, left|
231
+ blk[perc * 0.5]
232
+ end if blk
233
+ Shy.xzf(pkgf, tmp_dir, &pblk)
234
+ prog -= 0.5
235
+ end
236
+
237
+ FileUtils.cp(script, File.join(tmp_dir, File.basename(script)))
238
+ File.open(File.join(tmp_dir, "sh-install"), 'wb') do |a|
239
+ rewrite a, File.join(DIR, "static", "stubs", "sh-install"),
240
+ 'SCRIPT' => "./#{File.basename(script)}"
241
+ end
242
+ FileUtils.chmod 0755, File.join(tmp_dir, "sh-install")
243
+
244
+ raw = Shy.du(tmp_dir)
245
+ File.open(tgz_path, 'wb') do |f|
246
+ pblk = Shy.progress(raw) do |name, perc, left|
247
+ blk[prog + (perc * prog)]
248
+ end if blk
249
+ Shy.czf(f, tmp_dir, &pblk)
250
+ end
251
+
252
+ md5, fsize = Shy.md5sum(tgz_path), File.size(tgz_path)
253
+ File.open(run_path, 'wb') do |f|
254
+ rewrite f, File.join(DIR, "static", "stubs", "blank.run"),
255
+ 'CRC' => '0000000000', 'MD5' => md5, 'LABEL' => app_name, 'NAME' => name,
256
+ 'SIZE' => fsize, 'RAWSIZE' => (raw / 1024) + 1, 'TIME' => Time.now, 'FULLSIZE' => raw
257
+ File.open(tgz_path, 'rb') do |f2|
258
+ f.write f2.read(8192) until f2.eof
259
+ end
260
+ end
261
+ FileUtils.chmod 0755, run_path
262
+ FileUtils.rm_rf(tgz_path)
263
+ FileUtils.rm_rf(tmp_dir)
264
+ blk[1.0] if blk
265
+ end
266
+ end
267
+
268
+ Shoes::I_NET = "No, download Shoes if it's absent."
269
+ Shoes::I_YES = "Yes, I want Shoes included."
270
+ Shoes::I_NOV = "Yes, include Shoes, but without video support."
271
+ PackMake = proc do
272
+ background "#DDD"
273
+
274
+ @page1 = stack do
275
+ stack do
276
+ background white
277
+ background "#FFF".."#EEE", :height => 50, :bottom => 50
278
+ border "#CCC", :height => 2, :bottom => 0
279
+ stack :margin => 20 do
280
+ selt = proc { @sel1.toggle; @sel2.toggle }
281
+ @path = ""
282
+ @shy_path = nil
283
+ @sel1 =
284
+ flow do
285
+ para "File:"
286
+ inscription " (or a ", link("directory", &selt), ")"
287
+ edit1 = edit_line :width => -120
288
+ @bb = button "Browse...", :width => 100 do
289
+ @path = edit1.text = ask_open_file
290
+ est_recount
291
+ end
292
+ end
293
+ @sel2 =
294
+ flow :hidden => true do
295
+ para "Directory:"
296
+ inscription " (or a ", link("single file", &selt), ")"
297
+ edit2 = edit_line :width => -120
298
+ @bf = button "Folder...", :width => 100 do
299
+ @path = edit2.text = ask_open_folder
300
+ est_recount
301
+ end
302
+ end
303
+
304
+ para "Package for:"
305
+ flow :margin_left => 20 do
306
+ @shy = check
307
+ para "Shoes (.shy)", :margin_right => 20
308
+ @exe = check
309
+ para "Windows", :margin_right => 20
310
+ @dmg = check
311
+ para "OS X", :margin_right => 20
312
+ @run = check
313
+ para "Linux"
314
+ end
315
+
316
+ para "Include Shoes with your app? ", :margin => 0
317
+ items = [Shoes::I_YES, Shoes::I_NOV]
318
+ items.unshift(Shoes::I_NET) if ::RUBY_PLATFORM =~ /mswin|mingw/
319
+ @inc = list_box :items => items, :width => 0.6, :height => 30 do
320
+ est_recount
321
+ end
322
+ inscription "(This option doesn't apply to Shoes .shy files.)"
323
+ end
324
+ end
325
+
326
+ stack :margin => 20 do
327
+ @est = para "Estimated size of each app: ", strong("0k"), :margin => 0, :margin_bottom => 4
328
+ def est_recount
329
+ base =
330
+ case @inc.text
331
+ when Shoes::I_NET; 98
332
+ when Shoes::I_YES; 11600
333
+ when Shoes::I_NOV; 7000
334
+ end
335
+ base += ((File.directory?(@path) ? Shy.du(@path) : File.size(@path)) rescue 0) / 1024
336
+ @est.replace "Estimated size of each app: ", strong(base > 1024 ?
337
+ "%0.1fM" % [base / 1024.0] : "#{base}K")
338
+ end
339
+ def build_thread
340
+ @shy_path = nil
341
+ if File.directory? @path
342
+ @shy_path = @path.gsub(%r![\\/]+$!, '') + ".shy"
343
+ elsif @shy.style[:checked]
344
+ @shy_path = @path.gsub(/\.\w+$/, '') + ".shy"
345
+ end
346
+ if @shy_path and not @shy_meta
347
+ @page_shy.show
348
+ @shy_para.text = File.basename(@shy_path)
349
+ @shy_launch.items = Shy.launchable(@path)
350
+ return
351
+ end
352
+ @page2.show
353
+ @path2.replace File.basename(@path)
354
+ inc_text = @inc.text
355
+ Thread.start do
356
+ begin
357
+ sofar, stage = 0.0, 1.0 / [@shy.style[:checked], @exe.style[:checked], @dmg.style[:checked], @run.style[:checked]].
358
+ select { |x| x }.size
359
+ blk = proc do |frac|
360
+ @prog.style(:width => sofar + (frac * stage))
361
+ end
362
+
363
+ if @shy_path
364
+ @status.replace "Compressing the script's folder."
365
+ pblk = Shy.progress(Shy.du(@path)) do |name, perc, left|
366
+ blk[perc]
367
+ end
368
+ Shy.c(@shy_path, @shy_meta, @path, &pblk)
369
+ @path = @shy_path
370
+ @prog.style(:width => sofar += stage)
371
+ end
372
+ if @exe.style[:checked]
373
+ @status.replace "Working on an .exe for Windows."
374
+ Shoes::Pack.exe(@path, inc_text, &blk)
375
+ @prog.style(:width => sofar += stage)
376
+ end
377
+ if @dmg.style[:checked]
378
+ @status.replace "Working on a .dmg for Mac OS X."
379
+ Shoes::Pack.dmg(@path, inc_text, &blk)
380
+ @prog.style(:width => sofar += stage)
381
+ end
382
+ if @run.style[:checked]
383
+ @status.replace "Working on a .run for Linux."
384
+ Shoes::Pack.linux(@path, inc_text, &blk)
385
+ @prog.style(:width => sofar += stage)
386
+ end
387
+ if @shy_path and not @shy.style[:checked]
388
+ FileUtils.rm_rf(@shy_path)
389
+ end
390
+
391
+ every do
392
+ if @prog.style[:width] == 1.0
393
+ @page2.hide
394
+ @page3.show
395
+ @path3.replace File.basename(@path)
396
+ end
397
+ end
398
+ rescue => e
399
+ error(e)
400
+ end
401
+ end
402
+ end
403
+
404
+ inscription "Using the latest Shoes build (0.r#{Shoes::REVISION})", :margin => 0
405
+ flow :margin_top => 10, :margin_left => 310 do
406
+ button "OK", :margin_right => 4 do
407
+ @page1.hide; @bb.hide; @bf.hide
408
+ build_thread
409
+ end
410
+ button "Cancel" do
411
+ close
412
+ end
413
+ end
414
+ end
415
+ end
416
+
417
+ @page_shy = stack :hidden => true do
418
+ stack do
419
+ background white
420
+ border "#DDD", :height => 2, :bottom => 0
421
+ stack :margin => 20 do
422
+ para "Details for:", :margin => 4
423
+ @shy_para = para "", :size => 20, :margin => 4
424
+ flow do
425
+ stack :margin => 10, :width => 0.4 do
426
+ para "Name of app:"
427
+ @shy_name = edit_line :width => 1.0
428
+ end
429
+ stack :margin => 10, :width => 0.4 do
430
+ para "Version:"
431
+ @shy_version = edit_line :width => 120
432
+ end
433
+ stack :margin => 10, :width => 0.4 do
434
+ para "Creator"
435
+ @shy_creator = edit_line :width => 1.0
436
+ end
437
+ stack :margin => 10, :width => 0.5 do
438
+ para "Launch"
439
+ @shy_launch = list_box :height => 30
440
+ end
441
+ end
442
+ end
443
+ end
444
+
445
+ stack :margin => 20 do
446
+ flow :margin_top => 10, :margin_left => 310 do
447
+ button "OK", :margin_right => 4 do
448
+ @shy_meta = Shy.new
449
+ @shy_meta.name = @shy_name.text
450
+ @shy_meta.creator = @shy_creator.text
451
+ @shy_meta.version = @shy_version.text
452
+ @shy_meta.launch = @shy_launch.text
453
+ @page_shy.hide
454
+ build_thread
455
+ end
456
+ button "Cancel" do
457
+ close
458
+ end
459
+ end
460
+ end
461
+ end
462
+
463
+ @page2 = stack :hidden => true do
464
+ stack do
465
+ background white
466
+ border "#DDD", :height => 2, :bottom => 0
467
+ stack :margin => 20 do
468
+ para "Packaging:", :margin => 4
469
+ @path2 = para "", :size => 20, :margin => 4
470
+ @status = para "", :margin => 4
471
+ end
472
+ end
473
+
474
+ stack :margin => 20 do
475
+ stack :width => -20, :height => 24 do
476
+ @prog = background "#{DIR}/static/stripe.png", :curve => 7
477
+ background "rgb(0, 0, 0, 100)".."rgb(120, 120, 120, 0)", :curve => 6, :height => 16
478
+ background "rgb(120, 120, 120, 0)".."rgb(0, 0, 0, 100)", :curve => 6,
479
+ :height => 16, :top => 8
480
+ border "rgb(60, 60, 60, 80)", :curve => 7, :strokewidth => 2
481
+ end
482
+ end
483
+ end
484
+
485
+ @page3 = stack :hidden => true do
486
+ stack do
487
+ background white
488
+ border "#DDD", :height => 2, :bottom => 0
489
+ stack :margin => 20 do
490
+ para "Completed:", :margin => 4
491
+ @path3 = para "", :size => 20, :margin => 4
492
+ para "Your files are done, you may close this window.", :margin => 4
493
+ end
494
+ end
495
+ end
496
+
497
+ start do
498
+ @exe.checked = false
499
+ @dmg.checked = false
500
+ @run.checked = false
501
+ @shy.checked = true
502
+ @inc.choose( ::RUBY_PLATFORM =~ /mswin|mingw/ ? Shoes::I_NET : Shoes::I_NOV )
503
+ end
504
+ end
505
+ end