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 +1 @@
1
- shoes policeman (0.r1480) [i386-mingw32 Ruby1.9.1]
1
+ shoes policeman (0.r1514) [i386-mingw32 Ruby1.9.1] +video
Binary file
@@ -1,524 +1,547 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # lib/shoes.rb
4
- # The Shoes base app, both a demonstration and the learning tool for
5
- # using Shoes.
6
- #
7
- ARGV.delete_if { |x| x =~ /-psn_/ }
8
-
9
- require 'open-uri'
10
- require 'optparse'
11
- require 'resolv-replace' if RUBY_PLATFORM =~ /win/
12
- require 'shoes/inspect'
13
- require 'shoes/cache'
14
- if Object.const_defined? :Shoes
15
- require 'shoes/image'
16
- end
17
- require 'shoes/shybuilder'
18
-
19
- def Shoes.hook; end
20
-
21
- class Encoding
22
- %w[ASCII_8BIT UTF_16BE UTF_16LE UTF_32BE UTF_32LE].each do |ec|
23
- eval "#{ec} = '#{ec.sub '_', '-'}'"
24
- end unless RUBY_PLATFORM =~ /linux/
25
- end
26
-
27
- class Range
28
- def rand
29
- conv = (Integer === self.end && Integer === self.begin ? :to_i : :to_f)
30
- ((Kernel.rand * (self.end - self.begin)) + self.begin).send(conv)
31
- end
32
- end
33
-
34
- unless Time.respond_to? :today
35
- def Time.today
36
- t = Time.now
37
- t - (t.to_i % 86400)
38
- end
39
- end
40
-
41
- class Shoes
42
- RELEASES = %w[Curious Raisins Policeman]
43
-
44
- NotFound = proc do
45
- para "404 NOT FOUND, GUYS!"
46
- end
47
-
48
- class << self; attr_accessor :locale, :language end
49
- @locale = ENV["SHOES_LANG"] || ENV["LC_MESSAGES"] || ENV["LC_ALL"] || ENV["LANG"] || "C"
50
- @language = @locale[/^(\w{2})_/, 1] || "en"
51
-
52
- @mounts = []
53
-
54
- OPTS = OptionParser.new do |opts|
55
- opts.banner = "Usage: shoes [options] (app.rb or app.shy)"
56
-
57
- opts.on("-m", "--manual",
58
- "Open the built-in manual.") do
59
- show_manual
60
- end
61
-
62
- opts.on("-p", "--package",
63
- "Package a Shoes app for Windows, OS X and Linux.") do |s|
64
- make_pack
65
- end
66
-
67
- opts.on("-g", "--gem",
68
- "Passes commands to RubyGems.") do
69
- require 'shoes/setup'
70
- require 'rubygems/gem_runner'
71
- Gem::GemRunner.new.run(ARGV)
72
- raise SystemExit, ""
73
- end
74
-
75
- opts.on("--manual-html DIRECTORY", "Saves the manual to a directory as HTML.") do |dir|
76
- manual_as :html, dir
77
- raise SystemExit, "HTML manual in: #{dir}"
78
- end
79
-
80
- opts.on("--install MODE SRC DEST", "Installs a file.") do |mode|
81
- src, dest = ARGV
82
- FileUtils.install src, dest, :mode => mode.to_i(8), :preserve => true
83
- raise SystemExit, ""
84
- end
85
-
86
- opts.on_tail("-v", "--version", "Display the version info.") do
87
- raise SystemExit, File.read("#{DIR}/VERSION.txt").strip
88
- end
89
-
90
- opts.on_tail("-h", "--help", "Show this message") do
91
- raise SystemExit, opts.to_s
92
- end
93
- end
94
-
95
- class SettingUp < StandardError; end
96
-
97
- @setups = {}
98
-
99
- def self.setup &blk
100
- require 'shoes/setup'
101
- line = caller[0]
102
- return if @setups[line]
103
- script = line[/^(.+?):/, 1]
104
- set = Shoes::Setup.new(script, &blk)
105
- @setups[line] = true
106
- unless set.no_steps?
107
- raise SettingUp
108
- end
109
- end
110
-
111
- def self.show_selector
112
- fname = ask_open_file
113
- Shoes.visit(fname) if fname
114
- end
115
-
116
- def self.package_app
117
- fname = ask_open_file
118
- return false unless fname
119
- start_shy_builder fname
120
- end
121
-
122
- def self.splash
123
- font "#{DIR}/fonts/Lacuna.ttf"
124
- Shoes.app :width => 400, :height => 300, :resizable => false do
125
- style(Para, :align => "center", :weight => "bold", :font => "Lacuna Regular", :size => 13)
126
- style(Link, :stroke => yellow, :underline => nil)
127
- style(LinkHover, :stroke => yellow, :fill => nil)
128
-
129
- x1 = 77; y1 = 122
130
- x2 = 148; y2 = -122
131
- x3 = 245; y3 = 0
132
-
133
- nofill
134
- strokewidth 40.0
135
-
136
- @waves = stack :top => 0, :left => 0
137
-
138
- require 'shoes/search'
139
- require 'shoes/help'
140
-
141
- stack :margin => 18 do
142
- para "Welcome to", :stroke => "#DFA", :margin => 0
143
- para "SHOES", :size => 48, :stroke => "#DFA", :margin_top => 0
144
- stack do
145
- background black(0.2), :curve => 8
146
- para link("Open an App.") { Shoes.show_selector and close }, :margin => 10, :margin_bottom => 4
147
- para link("Package an App.") { Shoes.package_app and close }, :margin => 10, :margin_bottom => 4
148
- para link("Read the Manual.") { Shoes.show_manual and close }, :margin => 10
149
- end
150
- inscription "Alt-Slash opens the console.", :stroke => "#DFA", :align => "center"
151
- end
152
-
153
- animate(10) do |ani|
154
- a = Math.sin(ani * 0.02) * 20
155
- @waves.clear do
156
- background white
157
- y = -30
158
- 16.times do |i|
159
- shape do
160
- move_to x = (-300 - (i*(a*0.8))), y
161
- c = (a + 14) * 0.01
162
- stroke rgb(i * 0.06, c + 0.1, 0.1, 1.0 - (ani * 0.0003))
163
- 4.times do
164
- curve_to x1 + x, (y1-(i*a)) + y, x2 + x, (y2+(i*a)) + y, x3 + x, y3 + y
165
- x += x3
166
- end
167
- end
168
- y += 30
169
- end
170
- end
171
- end
172
- end
173
- end
174
-
175
- def self.make_pack
176
- require 'shoes/pack'
177
- Shoes.app(:width => 500, :height => 380, :resizable => false, &PackMake)
178
- end
179
-
180
- def self.manual_p(str, path)
181
- str.gsub(/\n+\s*/, " ").
182
- gsub(/&/, '&amp;').gsub(/>/, '&gt;').gsub(/>/, '&lt;').gsub(/"/, '&quot;').
183
- gsub(/`(.+?)`/m, '<code>\1</code>').gsub(/\[\[BR\]\]/i, "<br />\n").
184
- gsub(/\^(.+?)\^/m, '\1').
185
- gsub(/'''(.+?)'''/m, '<strong>\1</strong>').gsub(/''(.+?)''/m, '<em>\1</em>').
186
- gsub(/\[\[(http:\/\/\S+?)\]\]/m, '<a href="\1" target="_new">\1</a>').
187
- gsub(/\[\[(http:\/\/\S+?) (.+?)\]\]/m, '<a href="\1" target="_new">\2</a>').
188
- gsub(/\[\[(\S+?)\]\]/m) do
189
- ms, mn = $1.split(".", 2)
190
- if mn
191
- '<a href="' + ms + '.html#' + mn + '">' + mn + '</a>'
192
- else
193
- '<a href="' + ms + '.html">' + ms + '</a>'
194
- end
195
- end.
196
- gsub(/\[\[(\S+?) (.+?)\]\]/m, '<a href="\1.html">\2</a>').
197
- gsub(/\!(\{[^}\n]+\})?([^!\n]+\.\w+)\!/) do
198
- x = "static/#$2"
199
- FileUtils.cp("#{DIR}/#{x}", "#{path}/#{x}") if File.exists? "#{DIR}/#{x}"
200
- '<img src="' + x + '" />'
201
- end
202
- end
203
-
204
- def self.manual_link(sect)
205
- end
206
-
207
- TITLES = {:title => :h1, :subtitle => :h2, :tagline => :h3, :caption => :h4}
208
-
209
- def self.manual_as format, *args
210
- require 'shoes/search'
211
- require 'shoes/help'
212
-
213
- case format
214
- when :shoes
215
- Shoes.app(:width => 720, :height => 640, &Shoes::Help)
216
- else
217
- extend Shoes::Manual
218
- man = self
219
- dir, = args
220
- FileUtils.mkdir_p File.join(dir, 'static')
221
- FileUtils.cp "static/shoes-icon.png", "#{dir}/static"
222
- %w[manual.css code_highlighter.js code_highlighter_ruby.js].
223
- each { |x| FileUtils.cp "static/#{x}", "#{dir}/static" }
224
- html_bits = proc do
225
- proc do |sym, text|
226
- case sym when :intro
227
- div.intro { p { self << man.manual_p(text, dir) } }
228
- when :code
229
- pre { code.rb text.gsub(/^\s*?\n/, '') }
230
- when :colors
231
- color_names = (Shoes::COLORS.keys*"\n").split("\n").sort
232
- color_names.each do |color|
233
- c = Shoes::COLORS[color.intern]
234
- f = c.dark? ? "white" : "black"
235
- div.color(:style => "background: #{c}; color: #{f}") { h3 color; p c }
236
- end
237
- when :index
238
- tree = man.class_tree
239
- shown = []
240
- i = 0
241
- index_p = proc do |k, subs|
242
- unless shown.include? k
243
- i += 1
244
- p "▸ #{k}", :style => "margin-left: #{20*i}px"
245
- subs.uniq.sort.each do |s|
246
- index_p[s, tree[s]]
247
- end if subs
248
- i -= 1
249
- shown << k
250
- end
251
- end
252
- tree.sort.each &index_p
253
- # index_page
254
- when :list
255
- ul { text.each { |x| li { self << man.manual_p(x, dir) } } }
256
- else
257
- send(TITLES[sym] || :p) { self << man.manual_p(text, dir) }
258
- end
259
- end
260
- end
261
-
262
- docs = load_docs(Shoes::Manual::path)
263
- sections = docs.map { |x,| x }
264
-
265
- docn = 1
266
- docs.each do |title1, opt1|
267
- subsect = opt1['sections'].map { |x,| x }
268
- menu = sections.map do |x|
269
- [x, (subsect if x == title1)]
270
- end
271
-
272
- path1 = File.join(dir, title1.gsub(/\W/, ''))
273
- make_html("#{path1}.html", title1, menu) do
274
- h2 "The Shoes Manual"
275
- h1 title1
276
- man.wiki_tokens opt1['description'], true, &instance_eval(&html_bits)
277
- p.next { text "Next: "
278
- a opt1['sections'].first[1]['title'], :href => "#{opt1['sections'].first[0]}.html" }
279
- end
280
-
281
- optn = 1
282
- opt1['sections'].each do |title2, opt2|
283
- path2 = File.join(dir, title2)
284
- make_html("#{path2}.html", opt2['title'], menu) do
285
- h2 "The Shoes Manual"
286
- h1 opt2['title']
287
- man.wiki_tokens opt2['description'], true, &instance_eval(&html_bits)
288
- opt2['methods'].each do |title3, desc3|
289
- sig, val = title3.split(/\s+»\s+/, 2)
290
- aname = sig[/^[^(=]+=?/].gsub(/\s/, '').downcase
291
- a :name => aname
292
- div.method do
293
- a sig, :href => "##{aname}"
294
- text " » #{val}" if val
295
- end
296
- div.sample do
297
- man.wiki_tokens desc3, &instance_eval(&html_bits)
298
- end
299
- end
300
- if opt1['sections'][optn]
301
- p.next { text "Next: "
302
- a opt1['sections'][optn][1]['title'], :href => "#{opt1['sections'][optn][0]}.html" }
303
- elsif docs[docn]
304
- p.next { text "Next: "
305
- a docs[docn][0], :href => "#{docs[docn][0].gsub(/\W/, '')}.html" }
306
- end
307
- optn += 1
308
- end
309
- end
310
-
311
- docn += 1
312
- end
313
- end
314
- end
315
-
316
- def self.show_manual
317
- manual_as :shoes
318
- end
319
-
320
- def self.show_log
321
- require 'shoes/log'
322
- return if @log_app and Shoes.APPS.include? @log_app
323
- @log_app =
324
- Shoes.app do
325
- extend Shoes::LogWindow
326
- setup
327
- end
328
- end
329
-
330
- def self.mount(path, meth, &blk)
331
- @mounts << [path, meth || blk]
332
- end
333
-
334
- SHOES_URL_RE = %r!^@([^/]+)(.*)$!
335
-
336
- def self.run(path)
337
- uri = URI(path)
338
- @mounts.each do |mpath, rout|
339
- m, *args = *path.match(/^#{mpath}$/)
340
- if m
341
- unless rout.is_a? Proc
342
- rout = rout[0].instance_method(rout[1])
343
- end
344
- return [rout, args]
345
- end
346
- end
347
- case uri.path when "/"
348
- [nil]
349
- when SHOES_URL_RE
350
- [proc { eval(URI("http://#$1:53045#$2").read) }]
351
- else
352
- [NotFound]
353
- end
354
- end
355
-
356
- def self.args!
357
- if RUBY_PLATFORM !~ /darwin/ and ARGV.empty?
358
- Shoes.splash
359
- end
360
- OPTS.parse! ARGV
361
- ARGV[0] or true
362
- end
363
-
364
- def self.uri(str)
365
- if str =~ SHOES_URL_RE
366
- URI("http://#$1:53045#$2")
367
- else
368
- URI(str) rescue nil
369
- end
370
- end
371
-
372
- def self.visit(path)
373
- uri = Shoes.uri(path)
374
-
375
- case uri
376
- when URI::HTTP
377
- str = uri.read
378
- if str !~ /Shoes\.app/
379
- Shoes.app do
380
- eval(uri.read)
381
- end
382
- else
383
- eval(uri.read)
384
- end
385
- else
386
- path = File.expand_path(path.gsub(/\\/, "/"))
387
- if path =~ /\.shy$/
388
- @shy = true
389
- require 'shoes/shy'
390
- base = File.basename(path, ".shy")
391
- tmpdir = "%s/shoes-%s.%d" % [Dir.tmpdir, base, $$]
392
- shy = Shy.x(path, tmpdir)
393
- Dir.chdir(tmpdir)
394
- Shoes.debug "Loaded SHY: #{shy.name} #{shy.version} by #{shy.creator}"
395
- path = shy.launch
396
- else
397
- @shy = false
398
- Dir.chdir(File.dirname(path))
399
- path = File.basename(path)
400
- end
401
-
402
- $0.replace path
403
-
404
- code = read_file(path)
405
- eval(code, TOPLEVEL_BINDING, path)
406
- end
407
- rescue SettingUp
408
- rescue Object => e
409
- error(e)
410
- show_log
411
- end
412
-
413
- def self.read_file path
414
- if RUBY_VERSION =~ /^1\.9/ and !@shy
415
- #File.open(path, 'r:utf-8') { |f| f.read }
416
- IO.read(path).force_encoding("UTF-8")
417
- else
418
- File.read(path)
419
- end
420
- end
421
-
422
- def self.url(path, meth)
423
- Shoes.mount(path, [self, meth])
424
- end
425
-
426
- module Basic
427
- def tween opts, &blk
428
- opts = opts.dup
429
-
430
- if opts[:upward]
431
- opts[:top] = self.top - opts.delete(:upward)
432
- elsif opts[:downward]
433
- opts[:top] = self.top + opts.delete(:downward)
434
- end
435
-
436
- if opts[:sideways]
437
- opts[:left] = self.left + opts.delete(:sideways)
438
- end
439
-
440
- @TWEEN.remove if @TWEEN
441
- @TWEEN = parent.animate(opts[:speed] || 20) do
442
-
443
- # figure out a coordinate halfway between here and there
444
- cont = opts.select do |k, v|
445
- if self.respond_to? k
446
- n, o = v, self.send(k)
447
- if n != o
448
- n = o + ((n - o) / 2)
449
- n = v if o == n
450
- self.send("#{k}=", n)
451
- end
452
- self.style[k] != v
453
- end
454
- end
455
-
456
- # if we're there, get rid of the animation
457
- if cont.empty?
458
- @TWEEN.remove
459
- @TWEEN = nil
460
- blk.call if blk
461
- end
462
- end
463
- end
464
- end
465
-
466
- # complete list of styles
467
- BASIC_S = [:left, :top, :right, :bottom, :width, :height, :attach, :hidden,
468
- :displace_left, :displace_top, :margin, :margin_left, :margin_top,
469
- :margin_right, :margin_bottom]
470
- TEXT_S = [:strikecolor, :undercolor, :font, :size, :family, :weight,
471
- :rise, :kerning, :emphasis, :strikethrough, :stretch, :underline,
472
- :variant]
473
- MOUSE_S = [:click, :motion, :release, :hover, :leave]
474
- KEY_S = [:keydown, :keypress, :keyup]
475
- COLOR_S = [:stroke, :fill]
476
-
477
- {Background => [:angle, :radius, :curve, *BASIC_S],
478
- Border => [:angle, :radius, :curve, :strokewidth, *BASIC_S],
479
- Canvas => [:scroll, :start, :finish, *(KEY_S|MOUSE_S|BASIC_S)],
480
- Check => [:click, :checked, *BASIC_S],
481
- Radio => [:click, :checked, :group, *BASIC_S],
482
- EditLine => [:change, :secret, :text, *BASIC_S],
483
- EditBox => [:change, :text, *BASIC_S],
484
- Effect => [:radius, :distance, :inner, *(COLOR_S|BASIC_S)],
485
- Image => MOUSE_S|BASIC_S,
486
- ListBox => [:change, :items, :choose, *BASIC_S],
487
- # Pattern => [:angle, :radius, *BASIC_S],
488
- Progress => BASIC_S,
489
- Shape => COLOR_S|MOUSE_S|BASIC_S,
490
- TextBlock => [:justify, :align, :leading, *(COLOR_S|MOUSE_S|TEXT_S|BASIC_S)],
491
- Text => COLOR_S|MOUSE_S|TEXT_S|BASIC_S}.
492
- each do |klass, styles|
493
- klass.class_eval do
494
- include Basic
495
- styles.each do |m|
496
- case m when *MOUSE_S
497
- else
498
- define_method(m) { style[m] } unless klass.method_defined? m
499
- define_method("#{m}=") { |v| style(m => v) } unless klass.method_defined? "#{m}="
500
- end
501
- end
502
- end
503
- end
504
-
505
- class Types::Widget
506
- @types = {}
507
- def self.inherited subc
508
- methc = subc.to_s[/(^|::)(\w+)$/, 2].
509
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
510
- gsub(/([a-z\d])([A-Z])/,'\1_\2').downcase
511
- @types[methc] = subc
512
- Shoes.class_eval %{
513
- def #{methc}(*a, &b)
514
- a.unshift Widget.instance_variable_get("@types")[#{methc.dump}]
515
- widget(*a, &b)
516
- end
517
- }
518
- end
519
- end
520
- end
521
-
522
- def window(*a, &b)
523
- Shoes.app(*a, &b)
524
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # lib/shoes.rb
4
+ # The Shoes base app, both a demonstration and the learning tool for
5
+ # using Shoes.
6
+ #
7
+ ARGV.delete_if { |x| x =~ /-psn_/ }
8
+
9
+ require 'open-uri'
10
+ require 'optparse'
11
+ require 'resolv-replace' if RUBY_PLATFORM =~ /win/
12
+ require 'shoes/inspect'
13
+ require 'shoes/cache'
14
+ if Object.const_defined? :Shoes
15
+ require 'shoes/image'
16
+ end
17
+ require 'shoes/shybuilder'
18
+
19
+ def Shoes.hook; end
20
+
21
+ class Encoding
22
+ %w[ASCII_8BIT UTF_16BE UTF_16LE UTF_32BE UTF_32LE].each do |ec|
23
+ eval "#{ec} = '#{ec.sub '_', '-'}'"
24
+ end unless RUBY_PLATFORM =~ /linux/
25
+ end
26
+
27
+ class Range
28
+ def rand
29
+ conv = (Integer === self.end && Integer === self.begin ? :to_i : :to_f)
30
+ ((Kernel.rand * (self.end - self.begin)) + self.begin).send(conv)
31
+ end
32
+ end
33
+
34
+ unless Time.respond_to? :today
35
+ def Time.today
36
+ t = Time.now
37
+ t - (t.to_i % 86400)
38
+ end
39
+ end
40
+
41
+ class Shoes
42
+ RELEASES = %w[Curious Raisins Policeman]
43
+
44
+ NotFound = proc do
45
+ para "404 NOT FOUND, GUYS!"
46
+ end
47
+
48
+ class << self; attr_accessor :locale, :language end
49
+ @locale = ENV["SHOES_LANG"] || ENV["LC_MESSAGES"] || ENV["LC_ALL"] || ENV["LANG"] || "C"
50
+ @language = @locale[/^(\w{2})_/, 1] || "en"
51
+
52
+ @mounts = []
53
+
54
+ OPTS = OptionParser.new do |opts|
55
+ opts.banner = "Usage: shoes [options] (app.rb or app.shy)"
56
+
57
+ opts.on("-m", "--manual",
58
+ "Open the built-in manual.") do
59
+ show_manual
60
+ end
61
+
62
+ opts.on("-p", "--package",
63
+ "Package a Shoes app for Windows, OS X and Linux.") do |s|
64
+ make_pack
65
+ end
66
+
67
+ opts.on("-g", "--gem",
68
+ "Passes commands to RubyGems.") do
69
+ require 'shoes/setup'
70
+ require 'rubygems/gem_runner'
71
+ Gem::GemRunner.new.run(ARGV)
72
+ raise SystemExit, ""
73
+ end
74
+
75
+ opts.on("--manual-html DIRECTORY", "Saves the manual to a directory as HTML.") do |dir|
76
+ manual_as :html, dir
77
+ raise SystemExit, "HTML manual in: #{dir}"
78
+ end
79
+
80
+ opts.on("--install MODE SRC DEST", "Installs a file.") do |mode|
81
+ src, dest = ARGV
82
+ FileUtils.install src, dest, :mode => mode.to_i(8), :preserve => true
83
+ raise SystemExit, ""
84
+ end
85
+
86
+ opts.on("--nolayered", "No WS_EX_LAYERED style option.") do
87
+ $NOLAYERED = 1
88
+ Shoes.args!
89
+ end
90
+
91
+ opts.on_tail("-v", "--version", "Display the version info.") do
92
+ raise SystemExit, File.read("#{DIR}/VERSION.txt").strip
93
+ end
94
+
95
+ opts.on_tail("-h", "--help", "Show this message") do
96
+ raise SystemExit, opts.to_s
97
+ end
98
+ end
99
+
100
+ class SettingUp < StandardError; end
101
+
102
+ @setups = {}
103
+
104
+ def self.setup &blk
105
+ require 'shoes/setup'
106
+ line = caller[0]
107
+ return if @setups[line]
108
+ script = line[/^(.+?):/, 1]
109
+ set = Shoes::Setup.new(script, &blk)
110
+ @setups[line] = true
111
+ unless set.no_steps?
112
+ raise SettingUp
113
+ end
114
+ end
115
+
116
+ def self.show_selector
117
+ fname = ask_open_file
118
+ Shoes.visit(fname) if fname
119
+ end
120
+
121
+ def self.package_app
122
+ fname = ask_open_file
123
+ return false unless fname
124
+ start_shy_builder fname
125
+ end
126
+
127
+ def self.splash
128
+ font "#{DIR}/fonts/Lacuna.ttf"
129
+ Shoes.app :width => 400, :height => 300, :resizable => false do
130
+ style(Para, :align => "center", :weight => "bold", :font => "Lacuna Regular", :size => 13)
131
+ style(Link, :stroke => yellow, :underline => nil)
132
+ style(LinkHover, :stroke => yellow, :fill => nil)
133
+
134
+ x1 = 77; y1 = 122
135
+ x2 = 148; y2 = -122
136
+ x3 = 245; y3 = 0
137
+
138
+ nofill
139
+ strokewidth 40.0
140
+
141
+ @waves = stack :top => 0, :left => 0
142
+
143
+ require 'shoes/search'
144
+ require 'shoes/help'
145
+
146
+ stack :margin => 18 do
147
+ para "Welcome to", :stroke => "#DFA", :margin => 0
148
+ para "SHOES", :size => 48, :stroke => "#DFA", :margin_top => 0
149
+ stack do
150
+ background black(0.2), :curve => 8
151
+ para link("Open an App.") { Shoes.show_selector and close }, :margin => 10, :margin_bottom => 4
152
+ para link("Package an App.") { Shoes.package_app and close }, :margin => 10, :margin_bottom => 4
153
+ para link("Read the Manual.") { Shoes.show_manual and close }, :margin => 10
154
+ end
155
+ inscription "Alt-Slash opens the console.", :stroke => "#DFA", :align => "center"
156
+ end
157
+
158
+ animate(10) do |ani|
159
+ a = Math.sin(ani * 0.02) * 20
160
+ @waves.clear do
161
+ background white
162
+ y = -30
163
+ 16.times do |i|
164
+ shape do
165
+ move_to x = (-300 - (i*(a*0.8))), y
166
+ c = (a + 14) * 0.01
167
+ stroke rgb(i * 0.06, c + 0.1, 0.1, 1.0 - (ani * 0.0003))
168
+ 4.times do
169
+ curve_to x1 + x, (y1-(i*a)) + y, x2 + x, (y2+(i*a)) + y, x3 + x, y3 + y
170
+ x += x3
171
+ end
172
+ end
173
+ y += 30
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+
180
+ def self.make_pack
181
+ require 'shoes/pack'
182
+ Shoes.app(:width => 500, :height => 380, :resizable => false, &PackMake)
183
+ end
184
+
185
+ def self.manual_p(str, path)
186
+ str.gsub(/\n+\s*/, " ").
187
+ gsub(/&/, '&amp;').gsub(/>/, '&gt;').gsub(/>/, '&lt;').gsub(/"/, '&quot;').
188
+ gsub(/`(.+?)`/m, '<code>\1</code>').gsub(/\[\[BR\]\]/i, "<br />\n").
189
+ gsub(/\^(.+?)\^/m, '\1').
190
+ gsub(/'''(.+?)'''/m, '<strong>\1</strong>').gsub(/''(.+?)''/m, '<em>\1</em>').
191
+ gsub(/\[\[(http:\/\/\S+?)\]\]/m, '<a href="\1" target="_new">\1</a>').
192
+ gsub(/\[\[(http:\/\/\S+?) (.+?)\]\]/m, '<a href="\1" target="_new">\2</a>').
193
+ gsub(/\[\[(\S+?)\]\]/m) do
194
+ ms, mn = $1.split(".", 2)
195
+ if mn
196
+ '<a href="' + ms + '.html#' + mn + '">' + mn + '</a>'
197
+ else
198
+ '<a href="' + ms + '.html">' + ms + '</a>'
199
+ end
200
+ end.
201
+ gsub(/\[\[(\S+?) (.+?)\]\]/m, '<a href="\1.html">\2</a>').
202
+ gsub(/\!(\{[^}\n]+\})?([^!\n]+\.\w+)\!/) do
203
+ x = "static/#$2"
204
+ FileUtils.cp("#{DIR}/#{x}", "#{path}/#{x}") if File.exists? "#{DIR}/#{x}"
205
+ '<img src="' + x + '" />'
206
+ end
207
+ end
208
+
209
+ def self.manual_link(sect)
210
+ end
211
+
212
+ TITLES = {:title => :h1, :subtitle => :h2, :tagline => :h3, :caption => :h4}
213
+
214
+ def self.manual_as format, *args
215
+ require 'shoes/search'
216
+ require 'shoes/help'
217
+
218
+ case format
219
+ when :shoes
220
+ Shoes.app(:width => 720, :height => 640, &Shoes::Help)
221
+ else
222
+ extend Shoes::Manual
223
+ man = self
224
+ dir, = args
225
+ FileUtils.mkdir_p File.join(dir, 'static')
226
+ FileUtils.cp "#{DIR}/static/shoes-icon.png", "#{dir}/static"
227
+ %w[manual.css code_highlighter.js code_highlighter_ruby.js].
228
+ each { |x| FileUtils.cp "#{DIR}/static/#{x}", "#{dir}/static" }
229
+ html_bits = proc do
230
+ proc do |sym, text|
231
+ case sym when :intro
232
+ div.intro { p { self << man.manual_p(text, dir) } }
233
+ when :code
234
+ pre { code.rb text.gsub(/^\s*?\n/, '') }
235
+ when :colors
236
+ color_names = (Shoes::COLORS.keys*"\n").split("\n").sort
237
+ color_names.each do |color|
238
+ c = Shoes::COLORS[color.intern]
239
+ f = c.dark? ? "white" : "black"
240
+ div.color(:style => "background: #{c}; color: #{f}") { h3 color; p c }
241
+ end
242
+ when :index
243
+ tree = man.class_tree
244
+ shown = []
245
+ i = 0
246
+ index_p = proc do |k, subs|
247
+ unless shown.include? k
248
+ i += 1
249
+ p "▸ #{k}", :style => "margin-left: #{20*i}px"
250
+ subs.uniq.sort.each do |s|
251
+ index_p[s, tree[s]]
252
+ end if subs
253
+ i -= 1
254
+ shown << k
255
+ end
256
+ end
257
+ tree.sort.each &index_p
258
+ # index_page
259
+ when :list
260
+ ul { text.each { |x| li { self << man.manual_p(x, dir) } } }
261
+ when :samples
262
+ folder = File.join DIR, 'samples'
263
+ h = {}
264
+ Dir.glob(File.join folder, '*').each do |file|
265
+ if File.extname(file) == '.rb'
266
+ key = File.basename(file).split('-')[0]
267
+ h[key] ? h[key].push(file) : h[key] = [file]
268
+ end
269
+ end
270
+ h.each do |k, v|
271
+ p "<h4>#{k}</h4>"
272
+ samples = []
273
+ v.each do |file|
274
+ sample = File.basename(file).split('-')[1..-1].join('-')[0..-4]
275
+ samples << "<a href=\"http://github.com/shoes/shoes/raw/master/manual-snapshots/#{k}-#{sample}.png\">#{sample}</a>"
276
+ end
277
+ p samples.join ' '
278
+ end
279
+ else
280
+ send(TITLES[sym] || :p) { self << man.manual_p(text, dir) }
281
+ end
282
+ end
283
+ end
284
+
285
+ docs = load_docs(Shoes::Manual::path)
286
+ sections = docs.map { |x,| x }
287
+
288
+ docn = 1
289
+ docs.each do |title1, opt1|
290
+ subsect = opt1['sections'].map { |x,| x }
291
+ menu = sections.map do |x|
292
+ [x, (subsect if x == title1)]
293
+ end
294
+
295
+ path1 = File.join(dir, title1.gsub(/\W/, ''))
296
+ make_html("#{path1}.html", title1, menu) do
297
+ h2 "The Shoes Manual"
298
+ h1 title1
299
+ man.wiki_tokens opt1['description'], true, &instance_eval(&html_bits)
300
+ p.next { text "Next: "
301
+ a opt1['sections'].first[1]['title'], :href => "#{opt1['sections'].first[0]}.html" }
302
+ end
303
+
304
+ optn = 1
305
+ opt1['sections'].each do |title2, opt2|
306
+ path2 = File.join(dir, title2)
307
+ make_html("#{path2}.html", opt2['title'], menu) do
308
+ h2 "The Shoes Manual"
309
+ h1 opt2['title']
310
+ man.wiki_tokens opt2['description'], true, &instance_eval(&html_bits)
311
+ opt2['methods'].each do |title3, desc3|
312
+ sig, val = title3.split(/\s+»\s+/, 2)
313
+ aname = sig[/^[^(=]+=?/].gsub(/\s/, '').downcase
314
+ a :name => aname
315
+ div.method do
316
+ a sig, :href => "##{aname}"
317
+ text " » #{val}" if val
318
+ end
319
+ div.sample do
320
+ man.wiki_tokens desc3, &instance_eval(&html_bits)
321
+ end
322
+ end
323
+ if opt1['sections'][optn]
324
+ p.next { text "Next: "
325
+ a opt1['sections'][optn][1]['title'], :href => "#{opt1['sections'][optn][0]}.html" }
326
+ elsif docs[docn]
327
+ p.next { text "Next: "
328
+ a docs[docn][0], :href => "#{docs[docn][0].gsub(/\W/, '')}.html" }
329
+ end
330
+ optn += 1
331
+ end
332
+ end
333
+
334
+ docn += 1
335
+ end
336
+ end
337
+ end
338
+
339
+ def self.show_manual
340
+ manual_as :shoes
341
+ end
342
+
343
+ def self.show_log
344
+ require 'shoes/log'
345
+ return if @log_app and Shoes.APPS.include? @log_app
346
+ @log_app =
347
+ Shoes.app do
348
+ extend Shoes::LogWindow
349
+ setup
350
+ end
351
+ end
352
+
353
+ def self.mount(path, meth, &blk)
354
+ @mounts << [path, meth || blk]
355
+ end
356
+
357
+ SHOES_URL_RE = %r!^@([^/]+)(.*)$!
358
+
359
+ def self.run(path)
360
+ uri = URI(path)
361
+ @mounts.each do |mpath, rout|
362
+ m, *args = *path.match(/^#{mpath}$/)
363
+ if m
364
+ unless rout.is_a? Proc
365
+ rout = rout[0].instance_method(rout[1])
366
+ end
367
+ return [rout, args]
368
+ end
369
+ end
370
+ case uri.path when "/"
371
+ [nil]
372
+ when SHOES_URL_RE
373
+ [proc { eval(URI("http://#$1:53045#$2").read) }]
374
+ else
375
+ [NotFound]
376
+ end
377
+ end
378
+
379
+ def self.args!
380
+ if RUBY_PLATFORM !~ /darwin/ and ARGV.empty?
381
+ Shoes.splash
382
+ end
383
+ OPTS.parse! ARGV
384
+ ARGV[0] or true
385
+ end
386
+
387
+ def self.uri(str)
388
+ if str =~ SHOES_URL_RE
389
+ URI("http://#$1:53045#$2")
390
+ else
391
+ URI(str) rescue nil
392
+ end
393
+ end
394
+
395
+ def self.visit(path)
396
+ uri = Shoes.uri(path)
397
+
398
+ case uri
399
+ when URI::HTTP
400
+ str = uri.read
401
+ if str !~ /Shoes\.app/
402
+ Shoes.app do
403
+ eval(uri.read)
404
+ end
405
+ else
406
+ eval(uri.read)
407
+ end
408
+ else
409
+ path = File.expand_path(path.gsub(/\\/, "/"))
410
+ if path =~ /\.shy$/
411
+ @shy = true
412
+ require 'shoes/shy'
413
+ base = File.basename(path, ".shy")
414
+ tmpdir = "%s/shoes-%s.%d" % [Dir.tmpdir, base, $$]
415
+ shy = Shy.x(path, tmpdir)
416
+ Dir.chdir(tmpdir)
417
+ Shoes.debug "Loaded SHY: #{shy.name} #{shy.version} by #{shy.creator}"
418
+ path = shy.launch
419
+ else
420
+ @shy = false
421
+ Dir.chdir(File.dirname(path))
422
+ path = File.basename(path)
423
+ end
424
+
425
+ $0.replace path
426
+
427
+ code = read_file(path)
428
+ eval(code, TOPLEVEL_BINDING, path)
429
+ end
430
+ rescue SettingUp
431
+ rescue Object => e
432
+ error(e)
433
+ show_log
434
+ end
435
+
436
+ def self.read_file path
437
+ if RUBY_VERSION =~ /^1\.9/ and !@shy
438
+ #File.open(path, 'r:utf-8') { |f| f.read }
439
+ IO.read(path).force_encoding("UTF-8")
440
+ else
441
+ File.read(path)
442
+ end
443
+ end
444
+
445
+ def self.url(path, meth)
446
+ Shoes.mount(path, [self, meth])
447
+ end
448
+
449
+ module Basic
450
+ def tween opts, &blk
451
+ opts = opts.dup
452
+
453
+ if opts[:upward]
454
+ opts[:top] = self.top - opts.delete(:upward)
455
+ elsif opts[:downward]
456
+ opts[:top] = self.top + opts.delete(:downward)
457
+ end
458
+
459
+ if opts[:sideways]
460
+ opts[:left] = self.left + opts.delete(:sideways)
461
+ end
462
+
463
+ @TWEEN.remove if @TWEEN
464
+ @TWEEN = parent.animate(opts[:speed] || 20) do
465
+
466
+ # figure out a coordinate halfway between here and there
467
+ cont = opts.select do |k, v|
468
+ if self.respond_to? k
469
+ n, o = v, self.send(k)
470
+ if n != o
471
+ n = o + ((n - o) / 2)
472
+ n = v if o == n
473
+ self.send("#{k}=", n)
474
+ end
475
+ self.style[k] != v
476
+ end
477
+ end
478
+
479
+ # if we're there, get rid of the animation
480
+ if cont.empty?
481
+ @TWEEN.remove
482
+ @TWEEN = nil
483
+ blk.call if blk
484
+ end
485
+ end
486
+ end
487
+ end
488
+
489
+ # complete list of styles
490
+ BASIC_S = [:left, :top, :right, :bottom, :width, :height, :attach, :hidden,
491
+ :displace_left, :displace_top, :margin, :margin_left, :margin_top,
492
+ :margin_right, :margin_bottom]
493
+ TEXT_S = [:strikecolor, :undercolor, :font, :size, :family, :weight,
494
+ :rise, :kerning, :emphasis, :strikethrough, :stretch, :underline,
495
+ :variant]
496
+ MOUSE_S = [:click, :motion, :release, :hover, :leave]
497
+ KEY_S = [:keydown, :keypress, :keyup]
498
+ COLOR_S = [:stroke, :fill]
499
+
500
+ {Background => [:angle, :radius, :curve, *BASIC_S],
501
+ Border => [:angle, :radius, :curve, :strokewidth, *BASIC_S],
502
+ Canvas => [:scroll, :start, :finish, *(KEY_S|MOUSE_S|BASIC_S)],
503
+ Check => [:click, :checked, *BASIC_S],
504
+ Radio => [:click, :checked, :group, *BASIC_S],
505
+ EditLine => [:change, :secret, :text, *BASIC_S],
506
+ EditBox => [:change, :text, *BASIC_S],
507
+ Effect => [:radius, :distance, :inner, *(COLOR_S|BASIC_S)],
508
+ Image => MOUSE_S|BASIC_S,
509
+ ListBox => [:change, :items, :choose, *BASIC_S],
510
+ # Pattern => [:angle, :radius, *BASIC_S],
511
+ Progress => BASIC_S,
512
+ Shape => COLOR_S|MOUSE_S|BASIC_S,
513
+ TextBlock => [:justify, :align, :leading, *(COLOR_S|MOUSE_S|TEXT_S|BASIC_S)],
514
+ Text => COLOR_S|MOUSE_S|TEXT_S|BASIC_S}.
515
+ each do |klass, styles|
516
+ klass.class_eval do
517
+ include Basic
518
+ styles.each do |m|
519
+ case m when *MOUSE_S
520
+ else
521
+ define_method(m) { style[m] } unless klass.method_defined? m
522
+ define_method("#{m}=") { |v| style(m => v) } unless klass.method_defined? "#{m}="
523
+ end
524
+ end
525
+ end
526
+ end
527
+
528
+ class Types::Widget
529
+ @types = {}
530
+ def self.inherited subc
531
+ methc = subc.to_s[/(^|::)(\w+)$/, 2].
532
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
533
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').downcase
534
+ @types[methc] = subc
535
+ Shoes.class_eval %{
536
+ def #{methc}(*a, &b)
537
+ a.unshift Widget.instance_variable_get("@types")[#{methc.dump}]
538
+ widget(*a, &b)
539
+ end
540
+ }
541
+ end
542
+ end
543
+ end
544
+
545
+ def window(*a, &b)
546
+ Shoes.app(*a, &b)
547
+ end