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,54 +1,54 @@
1
- require 'fileutils'
2
- include FileUtils
3
-
4
- # locate ~/.shoes
5
- require 'tmpdir'
6
-
7
- lib_dir = nil
8
- homes = []
9
- homes << [ENV['HOME'], File.join( ENV['HOME'], '.shoes' )] if ENV['HOME']
10
- homes << [ENV['APPDATA'], File.join( ENV['APPDATA'], 'Shoes' )] if ENV['APPDATA']
11
- homes.each do |home_top, home_dir|
12
- next unless home_top
13
- if File.exists? home_top
14
- lib_dir = home_dir
15
- break
16
- end
17
- end
18
- LIB_DIR = lib_dir || File.join(Dir::tmpdir, "shoes")
19
- LIB_DIR.gsub! /\\/, '/'
20
- SITE_LIB_DIR = File.join(LIB_DIR, '+lib')
21
- GEM_DIR = File.join(LIB_DIR, '+gem')
22
- CACHE_DIR = File.join(LIB_DIR, '+cache')
23
-
24
- mkdir_p(CACHE_DIR)
25
- $:.unshift SITE_LIB_DIR
26
- $:.unshift GEM_DIR
27
- ENV['GEM_HOME'] = GEM_DIR
28
-
29
- require 'rbconfig'
30
- config = {
31
- 'ruby_install_name' => "shoes --ruby",
32
- 'RUBY_INSTALL_NAME' => "shoes --ruby",
33
- 'prefix' => "#{DIR}",
34
- 'bindir' => "#{DIR}",
35
- 'rubylibdir' => "#{DIR}/ruby/lib",
36
- 'datarootdir' => "#{DIR}/share",
37
- 'dvidir' => "#{DIR}/doc/${PACKAGE}",
38
- 'psdir' => "#{DIR}/doc/${PACKAGE}",
39
- 'htmldir' => "#{DIR}/doc/${PACKAGE}",
40
- 'docdir' => "#{DIR}/doc/${PACKAGE}",
41
- 'archdir' => "#{DIR}/ruby/lib/#{RUBY_PLATFORM}",
42
- 'sitedir' => SITE_LIB_DIR,
43
- 'sitelibdir' => SITE_LIB_DIR,
44
- 'sitearchdir' => "#{SITE_LIB_DIR}/#{RUBY_PLATFORM}",
45
- 'LIBRUBYARG_STATIC' => "",
46
- 'libdir' => "#{DIR}",
47
- 'LDFLAGS' => "-L. -L#{DIR}"
48
- }
49
- Config::CONFIG.merge! config
50
- Config::MAKEFILE_CONFIG.merge! config
51
- GEM_CENTRAL_DIR = File.join(DIR, 'ruby/gems/' + Config::CONFIG['ruby_version'])
52
- Dir[GEM_CENTRAL_DIR + "/gems/*"].each do |gdir|
53
- $: << "#{gdir}/lib"
54
- end
1
+ require 'fileutils'
2
+ include FileUtils
3
+
4
+ # locate ~/.shoes
5
+ require 'tmpdir'
6
+
7
+ lib_dir = nil
8
+ homes = []
9
+ homes << [ENV['HOME'], File.join( ENV['HOME'], '.shoes' )] if ENV['HOME']
10
+ homes << [ENV['APPDATA'], File.join( ENV['APPDATA'], 'Shoes' )] if ENV['APPDATA']
11
+ homes.each do |home_top, home_dir|
12
+ next unless home_top
13
+ if File.exists? home_top
14
+ lib_dir = home_dir
15
+ break
16
+ end
17
+ end
18
+ LIB_DIR = lib_dir || File.join(Dir::tmpdir, "shoes")
19
+ LIB_DIR.gsub! /\\/, '/'
20
+ SITE_LIB_DIR = File.join(LIB_DIR, '+lib')
21
+ GEM_DIR = File.join(LIB_DIR, '+gem')
22
+ CACHE_DIR = File.join(LIB_DIR, '+cache')
23
+
24
+ mkdir_p(CACHE_DIR)
25
+ $:.unshift SITE_LIB_DIR
26
+ $:.unshift GEM_DIR
27
+ ENV['GEM_HOME'] = GEM_DIR
28
+
29
+ require 'rbconfig'
30
+ config = {
31
+ 'ruby_install_name' => "shoes --ruby",
32
+ 'RUBY_INSTALL_NAME' => "shoes --ruby",
33
+ 'prefix' => "#{DIR}",
34
+ 'bindir' => "#{DIR}",
35
+ 'rubylibdir' => "#{DIR}/ruby/lib",
36
+ 'datarootdir' => "#{DIR}/share",
37
+ 'dvidir' => "#{DIR}/doc/${PACKAGE}",
38
+ 'psdir' => "#{DIR}/doc/${PACKAGE}",
39
+ 'htmldir' => "#{DIR}/doc/${PACKAGE}",
40
+ 'docdir' => "#{DIR}/doc/${PACKAGE}",
41
+ 'archdir' => "#{DIR}/ruby/lib/#{RUBY_PLATFORM}",
42
+ 'sitedir' => SITE_LIB_DIR,
43
+ 'sitelibdir' => SITE_LIB_DIR,
44
+ 'sitearchdir' => "#{SITE_LIB_DIR}/#{RUBY_PLATFORM}",
45
+ 'LIBRUBYARG_STATIC' => "",
46
+ 'libdir' => "#{DIR}",
47
+ 'LDFLAGS' => "-L. -L#{DIR}"
48
+ }
49
+ Config::CONFIG.merge! config
50
+ Config::MAKEFILE_CONFIG.merge! config
51
+ GEM_CENTRAL_DIR = File.join(DIR, 'ruby/gems/' + Config::CONFIG['ruby_version'])
52
+ Dir[GEM_CENTRAL_DIR + "/gems/*"].each do |gdir|
53
+ $: << "#{gdir}/lib"
54
+ end
@@ -1,35 +1,35 @@
1
- require 'chipmunk'
2
-
3
- module ChipMunk
4
- def cp_space
5
- @space = CP::Space.new
6
- @space.damping = 0.8
7
- @space.gravity = vec2 0, 25
8
- @space
9
- end
10
-
11
- def cp_oval l, t, r, opts = {}
12
- b = CP::Body.new 1,1
13
- b.p = vec2 l, t
14
- @space.add_body b
15
- @space.add_shape CP::Shape::Circle.new(b, r, vec2(0, 0))
16
-
17
- img = image left: l-r-1, top: t-r-1, width: 2*r+2, height: 2*r+2, body: b, inflate: r-2 do
18
- oval 1, 1, 2*r, opts
19
- end
20
- end
21
-
22
- def cp_line x0, y0, x1, y1, opts = {}
23
- opts[:strokewidth] = 5 unless opts[:strokewidth]
24
- sb = CP::Body.new 1.0/0.0, 1.0/0.0
25
- seg = CP::Shape::Segment.new sb, vec2(x0, y0), vec2(x1, y1), opts[:strokewidth]
26
- @space.add_shape seg
27
- line x0, y0, x1, y1, opts
28
- end
29
- end
30
-
31
- Shoes::Image.class_eval do
32
- def cp_move
33
- move style[:body].p.x.to_i - style[:inflate], style[:body].p.y.to_i - style[:inflate]
34
- end
35
- end
1
+ require 'chipmunk'
2
+
3
+ module ChipMunk
4
+ def cp_space
5
+ @space = CP::Space.new
6
+ @space.damping = 0.8
7
+ @space.gravity = vec2 0, 25
8
+ @space
9
+ end
10
+
11
+ def cp_oval l, t, r, opts = {}
12
+ b = CP::Body.new 1,1
13
+ b.p = vec2 l, t
14
+ @space.add_body b
15
+ @space.add_shape CP::Shape::Circle.new(b, r, vec2(0, 0))
16
+
17
+ img = image left: l-r-1, top: t-r-1, width: 2*r+2, height: 2*r+2, body: b, inflate: r-2 do
18
+ oval 1, 1, 2*r, opts
19
+ end
20
+ end
21
+
22
+ def cp_line x0, y0, x1, y1, opts = {}
23
+ opts[:strokewidth] = 5 unless opts[:strokewidth]
24
+ sb = CP::Body.new 1.0/0.0, 1.0/0.0
25
+ seg = CP::Shape::Segment.new sb, vec2(x0, y0), vec2(x1, y1), opts[:strokewidth]
26
+ @space.add_shape seg
27
+ line x0, y0, x1, y1, opts
28
+ end
29
+ end
30
+
31
+ Shoes::Image.class_eval do
32
+ def cp_move
33
+ move style[:body].p.x.to_i - style[:inflate], style[:body].p.y.to_i - style[:inflate]
34
+ end
35
+ end
@@ -1,39 +1,39 @@
1
- require 'sqlite3'
2
-
3
- data_file = File.join(LIB_DIR, "+data")
4
- data_init = !File.exists?(data_file)
5
-
6
- DATABASE = SQLite3::Database.new data_file
7
- DATABASE.type_translation = true
8
-
9
- class << DATABASE
10
- DATABASE_VERSION = 1
11
- def setup
12
- DATABASE.execute_batch %{
13
- CREATE TABLE cache (
14
- url text primary key,
15
- etag text,
16
- hash varchar(40),
17
- saved datetime
18
- );
19
- CREATE TABLE upgrades (
20
- version int primary key
21
- );
22
- INSERT INTO upgrades VALUES (?);
23
- }, DATABASE_VERSION
24
- end
25
- def check_cache_for url
26
- etag, hash, saved =
27
- DATABASE.get_first_row("SELECT etag, hash, saved FROM cache WHERE url = ?", url)
28
- {:etag => etag, :hash => hash, :saved => saved.nil? ? 0 : Time.parse(saved.to_s).to_i}
29
- end
30
- def notify_cache_of url, etag, hash
31
- DATABASE.query %{
32
- REPLACE INTO cache (url, etag, hash, saved)
33
- VALUES (?, ?, ?, datetime("now", "localtime"));
34
- }, url, etag, hash
35
- nil
36
- end
37
- end
38
-
39
- DATABASE.setup if data_init
1
+ require 'sqlite3'
2
+
3
+ data_file = File.join(LIB_DIR, "+data")
4
+ data_init = !File.exists?(data_file)
5
+
6
+ DATABASE = SQLite3::Database.new data_file
7
+ DATABASE.type_translation = true
8
+
9
+ class << DATABASE
10
+ DATABASE_VERSION = 1
11
+ def setup
12
+ DATABASE.execute_batch %{
13
+ CREATE TABLE cache (
14
+ url text primary key,
15
+ etag text,
16
+ hash varchar(40),
17
+ saved datetime
18
+ );
19
+ CREATE TABLE upgrades (
20
+ version int primary key
21
+ );
22
+ INSERT INTO upgrades VALUES (?);
23
+ }, DATABASE_VERSION
24
+ end
25
+ def check_cache_for url
26
+ etag, hash, saved =
27
+ DATABASE.get_first_row("SELECT etag, hash, saved FROM cache WHERE url = ?", url)
28
+ {:etag => etag, :hash => hash, :saved => saved.nil? ? 0 : Time.parse(saved.to_s).to_i}
29
+ end
30
+ def notify_cache_of url, etag, hash
31
+ DATABASE.query %{
32
+ REPLACE INTO cache (url, etag, hash, saved)
33
+ VALUES (?, ?, ?, datetime("now", "localtime"));
34
+ }, url, etag, hash
35
+ nil
36
+ end
37
+ end
38
+
39
+ DATABASE.setup if data_init
@@ -1,468 +1,468 @@
1
- # -*- encoding: utf-8 -*-
2
- module Shoes::Manual
3
- PARA_RE = /\s*?(\{{3}(?:.+?)\}{3})|\n\n/m
4
- CODE_RE = /\{{3}(?:\s*\#![^\n]+)?(.+?)\}{3}/m
5
- IMAGE_RE = /\!(\{([^}\n]+)\})?([^!\n]+\.\w+)\!/
6
- CODE_STYLE = {:size => 9, :margin => 12}
7
- INTRO_STYLE = {:size => 16, :margin_bottom => 20, :stroke => "#000"}
8
- SUB_STYLE = {:stroke => "#CCC", :margin_top => 10}
9
- IMAGE_STYLE = {:margin => 8, :margin_left => 100}
10
- COLON = ": "
11
-
12
- [INTRO_STYLE, SUB_STYLE].each do |h|
13
- h[:font] = "MS UI Gothic"
14
- end if Shoes.language == 'ja'
15
-
16
- def self.path
17
- path = "#{DIR}/static/manual-#{Shoes.language}.txt"
18
- unless File.exists? path
19
- path = "#{DIR}/static/manual-en.txt"
20
- end
21
- path
22
- end
23
-
24
- def dewikify_hi(str, terms, intro = false)
25
- if terms
26
- code = []
27
- str = str.
28
- gsub(CODE_RE) { |x| code << x; "CODE#[#{code.length-1}]" }.
29
- gsub(/#{Regexp::quote(terms)}/i, '@\0@').
30
- gsub(/CODE#\[(\d+)\]/) { code[$1.to_i] }
31
- end
32
- dewikify(str, intro)
33
- end
34
-
35
- def dewikify_p(ele, str, *args)
36
- str = str.gsub(/\n+\s*/, " ").dump.
37
- gsub(/`(.+?)`/m, '", code("\1"), "').gsub(/\[\[BR\]\]/i, "\n").
38
- gsub(/\^(.+?)\^/m, '\1').
39
- gsub(/@(.+?)@/m, '", strong("\1", :fill => yellow), "').
40
- gsub(/'''(.+?)'''/m, '", strong("\1"), "').gsub(/''(.+?)''/m, '", em("\1"), "').
41
- gsub(/\[\[(\S+?)\]\]/m, '", link("\1".split(".", 2).last) { open_link("\1") }, "').
42
- gsub(/\[\[(\S+?) (.+?)\]\]/m, '", link("\2") { open_link("\1") }, "').
43
- gsub(IMAGE_RE, '", *args); stack(IMAGE_STYLE.merge({\2})) { image("#{DIR}/static/\3") }; #{ele}("')
44
- #debug str if str =~ /The list of special keys/
45
- a = str.split(', ", ", ')
46
- if a.size == 1
47
- eval("#{ele}(#{str}, *args)")
48
- else
49
- flow do
50
- a[0...-1].each{|s| eval("#{ele}(#{s}, ',', *args)")}
51
- eval("#{ele}(#{a[-1]}, *args)")
52
- end
53
- end
54
- end
55
-
56
- def dewikify_code(str)
57
- str = str.gsub(/\A\n+/, '').chomp
58
- stack :margin_bottom => 12 do
59
- background rgb(210, 210, 210), :curve => 4
60
- para code(str), CODE_STYLE
61
- stack :top => 0, :right => 2, :width => 70 do
62
- stack do
63
- background "#8A7", :margin => [0, 2, 0, 2], :curve => 4
64
- para link("Run this", :stroke => "#eee", :underline => "none") { run_code(str) },
65
- :margin => 4, :align => 'center', :weight => 'bold', :size => 9
66
- end
67
- end
68
- end
69
- end
70
-
71
- def wiki_tokens(str, intro = false)
72
- paras = str.split(PARA_RE).reject { |x| x.empty? }
73
- if intro
74
- yield :intro, paras.shift
75
- end
76
- paras.map do |ps|
77
- if ps =~ CODE_RE
78
- yield :code, $1
79
- else
80
- case ps
81
- when /\A\{COLORS\}/
82
- yield :colors, nil
83
- when /\A\{INDEX\}/
84
- yield :index, nil
85
- when /\A\{SAMPLES\}/
86
- yield :samples, nil
87
- when /\A \* (.+)/m
88
- yield :list, $1.split(/^ \* /)
89
- when /\A==== (.+) ====/
90
- yield :caption, $1
91
- when /\A=== (.+) ===/
92
- yield :tagline, $1
93
- when /\A== (.+) ==/
94
- yield :subtitle, $1
95
- when /\A= (.+) =/
96
- yield :title, $1
97
- else
98
- yield :para, ps
99
- end
100
- end
101
- end
102
- end
103
-
104
- def dewikify(str, intro = false)
105
- proc do
106
- wiki_tokens(str, intro) do |sym, text|
107
- case sym when :intro
108
- dewikify_p :para, text, INTRO_STYLE
109
- when :code
110
- dewikify_code(text)
111
- when :colors
112
- color_page
113
- when :index
114
- index_page
115
- when :samples
116
- sample_page
117
- when :list
118
- text.each { |t| stack(:margin_left => 30) {
119
- fill black; oval -10, 7, 6; dewikify_p :para, t } }
120
- else
121
- dewikify_p sym, text
122
- end
123
- end
124
- end
125
- end
126
-
127
- def sample_page
128
- folder = File.join DIR, 'samples'
129
- h = {}
130
- Dir.glob(File.join folder, '*').each do |file|
131
- if File.extname(file) == '.rb'
132
- key = File.basename(file).split('-')[0]
133
- h[key] ? h[key].push(file) : h[key] = [file]
134
- end
135
- end
136
- stack do
137
- h.each do |k, v|
138
- subtitle k
139
- flow do
140
- v.each do |file|
141
- para link(File.basename(file).split('-')[1..-1].join('-')[0..-4]){
142
- Dir.chdir(folder){eval IO.read(file), TOPLEVEL_BINDING}
143
- }
144
- end
145
- end
146
- end
147
- end
148
- end
149
-
150
- def color_page
151
- color_names = (Shoes::COLORS.keys*"\n").split("\n").sort
152
- flow do
153
- color_names.each do |color|
154
- flow :width => 0.33 do
155
- c = send(color)
156
- background c
157
- para strong(color), "\n", c, :stroke => (c.dark? ? white : black),
158
- :margin => 4, :align => 'center'
159
- end
160
- end
161
- end
162
- end
163
-
164
- def class_tree
165
- tree = {}
166
- Shoes.constants.each do |c|
167
- k = Shoes.const_get(c)
168
- next unless k.respond_to? :superclass
169
-
170
- c = "Shoes::#{c}"
171
- if k.superclass == Object
172
- tree[c] ||= []
173
- else
174
- k.ancestors[1..-1].each do |sk|
175
- break if [Object, Kernel].include? sk
176
- next unless sk.is_a? Class #don't show mixins
177
- (tree[sk.name] ||= []) << c
178
- c = sk.name
179
- end
180
- end
181
- end
182
- tree
183
- end
184
-
185
- def index_page
186
- tree = class_tree
187
- shown = []
188
- index_p = proc do |k, subs|
189
- unless shown.include? k
190
- stack :margin_left => 20 do
191
- flow do
192
- para "▸ ", :font => case RUBY_PLATFORM
193
- when /mingw/; "MS UI Gothic"
194
- when /darwin/; "AppleGothic, Arial"
195
- else "Arial"
196
- end
197
- para k
198
- end
199
- subs.uniq.sort.each do |s|
200
- index_p[s, tree[s]]
201
- end if subs
202
- end
203
- shown << k
204
- end
205
- end
206
- tree.sort.each &index_p
207
- end
208
-
209
- def run_code str
210
- eval(str, TOPLEVEL_BINDING)
211
- end
212
-
213
- def load_docs path
214
- return @docs if @docs
215
- str = Shoes.read_file(path)
216
- @search = Shoes::Search.new
217
- @sections, @methods, @mindex = {}, {}, {}
218
- @docs =
219
- (str.split(/^= (.+?) =/)[1..-1]/2).map do |k,v|
220
- sparts = v.split(/^== (.+?) ==/)
221
-
222
- sections = (sparts[1..-1]/2).map do |k2,v2|
223
- meth = v2.split(/^=== (.+?) ===/)
224
- k2t = k2[/^(?:The )?([\-\w]+)/, 1]
225
- meth_plain = meth[0].gsub(IMAGE_RE, '')
226
- @search.add_document :uri => "T #{k2t}", :body => "#{k2}\n#{meth_plain}".downcase
227
-
228
- hsh = {'title' => k2, 'section' => k,
229
- 'description' => meth[0],
230
- 'methods' => (meth[1..-1]/2).map { |_k,_v|
231
- @search.add_document :uri => "M #{k}#{COLON}#{k2t}#{COLON}#{_k}", :body => "#{_k}\n#{_v}".downcase
232
- @mindex["#{k2t}.#{_k[/[\w\.]+/]}"] = [k2t, _k]
233
- [_k, _v]
234
- }}
235
- @methods[k2t] = hsh
236
- [k2t, hsh]
237
- end
238
-
239
- @search.add_document :uri => "S #{k}", :body => "#{k}\n#{sparts[0]}".downcase
240
- hsh = {'description' => sparts[0], 'sections' => sections,
241
- 'class' => "toc" + k.downcase.gsub(/\W+/, '')}
242
- @sections[k] = hsh
243
- [k, hsh]
244
- end
245
- @search.finish!
246
- @docs
247
- end
248
-
249
- def show_search
250
- @toc.each { |k,v| v.hide }
251
- @title.replace "Search"
252
- @doc.clear do
253
- dewikify_p :para, "Try method names (like `button` or `arrow`) or topics (like `slots`)", :align => 'center'
254
- flow :margin_left => 60 do
255
- edit_line :width => -60 do |terms|
256
- @results.clear do
257
- termd = terms.text.downcase
258
- #found = termd.empty? ? [] : manual_search(termd)
259
- found = (termd.empty? or termd[0] == 'z' or termd[0] == 'y') ? [] : manual_search(termd)
260
- para "#{found.length} matches", :align => "center", :margin_bottom => 0
261
- found.each do |typ, head|
262
- flow :margin => 4 do
263
- case typ
264
- when "S"
265
- background "#333", :curve => 4
266
- caption strong(link(head, :stroke => white) { open_section(head, terms.text) })
267
- para "Section header", Shoes::Manual::SUB_STYLE
268
- when "T"
269
- background "#777", :curve => 4
270
- caption strong(link(head, :stroke => "#EEE") { open_methods(head, terms.text) })
271
- hsh = @methods[head]
272
- para "Sub-section under #{hsh['section']} (#{hsh['methods'].length} methods)", Shoes::Manual::SUB_STYLE
273
- when "M"
274
- background "#CCC", :curve => 4
275
- sect, subhead, head = head.split(Shoes::Manual::COLON, 3)
276
- para strong(sect, Shoes::Manual::COLON, subhead, Shoes::Manual::COLON, link(head) { open_methods(subhead, terms.text, head) })
277
- end
278
- end
279
- end
280
- end
281
- end
282
- end
283
- @results = stack
284
- end
285
- app.slot.scroll_top = 0
286
- end
287
-
288
- def open_link(head)
289
- if head == "Search"
290
- show_search
291
- elsif @sections.has_key? head
292
- open_section(head)
293
- elsif @methods.has_key? head
294
- open_methods(head)
295
- elsif @mindex.has_key? head
296
- head, sub = @mindex[head]
297
- open_methods(head, nil, sub)
298
- elsif head =~ /^http:\/\//
299
- debug head
300
- visit head
301
- end
302
- end
303
-
304
- def add_next_link(docn, optn)
305
- opt1, optn = @docs[docn][1], optn + 1
306
- if opt1['sections'][optn]
307
- @doc.para "Next: ",
308
- link(opt1['sections'][optn][1]['title']) { open_methods(opt1['sections'][optn][0]) },
309
- :align => "right"
310
- elsif @docs[docn + 1]
311
- @doc.para "Next: ",
312
- link(@docs[docn + 1][0]) { open_section(@docs[docn + 1][0].gsub(/\W/, '')) },
313
- :align => "right"
314
- end
315
- end
316
-
317
- def open_section(sect_s, terms = nil)
318
- sect_h = @sections[sect_s]
319
- sect_cls = sect_h['class']
320
- @toc.each { |k,v| v.send(k == sect_cls ? :show : :hide) }
321
- @title.replace sect_s
322
- @doc.clear(&dewikify_hi(sect_h['description'], terms, true))
323
- add_next_link(@docs.index { |x,| x == sect_s }, -1) rescue nil
324
- app.slot.scroll_top = 0
325
- end
326
-
327
- def open_methods(meth_s, terms = nil, meth_a = nil)
328
- meth_h = @methods[meth_s]
329
- @title.replace meth_h['title']
330
- @doc.clear do
331
- unless meth_a
332
- instance_eval &dewikify_hi(meth_h['description'], terms, true)
333
- end
334
- meth_h['methods'].each do |mname, expl|
335
- if meth_a.nil? or meth_a == mname
336
- sig, val = mname.split("»", 2)
337
- stack(:margin_top => 8, :margin_bottom => 8) {
338
- background "#333".."#666", :curve => 3, :angle => 90
339
- tagline sig, (span("»", val, :stroke => "#BBB") if val), :margin => 4 }
340
- instance_eval &dewikify_hi(expl, terms)
341
- end
342
- end
343
- end
344
- optn = nil
345
- docn = @docs.index { |_,h| optn = h['sections'].index { |x,| x == meth_s } } rescue nil
346
- add_next_link(docn, optn) if docn
347
- app.slot.scroll_top = 0
348
- end
349
-
350
- def manual_search(terms)
351
- terms += " " if terms.length == 1
352
- @search.find_all(terms).map do |title, count|
353
- title.split(" ", 2)
354
- end
355
- end
356
-
357
- def make_html(path, title, menu, &blk)
358
- require 'hpricot'
359
- File.open(path, 'w') do |f|
360
- f << Hpricot do
361
- xhtml_transitional do
362
- head do
363
- meta :"http-equiv" => "Content-Type", "content" => "text/html; charset=utf-8"
364
- title "The Shoes Manual // #{title}"
365
- script :type => "text/javascript", :src => "static/code_highlighter.js"
366
- script :type => "text/javascript", :src => "static/code_highlighter_ruby.js"
367
- style :type => "text/css" do
368
- text "@import 'static/manual.css';"
369
- end
370
- end
371
- body do
372
- div.main! do
373
- div.manual! &blk
374
- div.sidebar do
375
- img :src => "static/shoes-icon.png"
376
- ul do
377
- li { a.prime "HELP", :href => "./" }
378
- menu.each do |m, sm|
379
- li do
380
- a m, :href => "#{m[/^\w+/]}.html"
381
- if sm
382
- ul.sub do
383
- sm.each { |smm| li { a smm, :href => "#{smm}.html" } }
384
- end
385
- end
386
- end
387
- end
388
-
389
- end
390
- end
391
- end
392
- end
393
- end
394
- end.to_html
395
- end
396
- end
397
- end
398
-
399
- def Shoes.make_help_page
400
- font "#{DIR}/fonts/Coolvetica.ttf" unless Shoes::FONTS.include? "Coolvetica"
401
- proc do
402
- extend Shoes::Manual
403
- docs = load_docs Shoes::Manual.path
404
-
405
- style(Shoes::Image, :margin => 8, :margin_left => 100)
406
- style(Shoes::Code, :stroke => "#C30")
407
- style(Shoes::LinkHover, :stroke => green, :fill => nil)
408
- style(Shoes::Para, :size => 12, :stroke => "#332")
409
- style(Shoes::Tagline, :size => 12, :weight => "bold", :stroke => "#eee", :margin => 6)
410
- style(Shoes::Caption, :size => 24)
411
- background "#ddd".."#fff", :angle => 90
412
-
413
- [Shoes::LinkHover, Shoes::Para, Shoes::Tagline, Shoes::Caption].each do |type|
414
- style(type, :font => "MS UI Gothic")
415
- end if Shoes.language == 'ja'
416
-
417
- stack do
418
- background black
419
- stack :margin_left => 118 do
420
- para "The Shoes Manual", :stroke => "#eee", :margin_top => 8, :margin_left => 17,
421
- :margin_bottom => 0
422
- @title = title docs[0][0], :stroke => white, :margin => 4, :margin_left => 14,
423
- :margin_top => 0, :font => "Coolvetica"
424
- end
425
- background "rgb(66, 66, 66, 180)".."rgb(0, 0, 0, 0)", :height => 0.7
426
- background "rgb(66, 66, 66, 100)".."rgb(255, 255, 255, 0)", :height => 20, :bottom => 0
427
- end
428
- @doc =
429
- stack :margin_left => 130, :margin_top => 20, :margin_bottom => 50, :margin_right => 50 + gutter,
430
- &dewikify(docs[0][-1]['description'], true)
431
- add_next_link(0, -1)
432
- stack :top => 80, :left => 0, :attach => Shoes::Window do
433
- @toc = {}
434
- stack :margin => 12, :width => 130, :margin_top => 20 do
435
- docs.each do |sect_s, sect_h|
436
- sect_cls = sect_h['class']
437
- para strong(link(sect_s, :stroke => black) { open_section(sect_s) }),
438
- :size => 11, :margin => 4, :margin_top => 0
439
- @toc[sect_cls] =
440
- stack :hidden => @toc.empty? ? false : true do
441
- links = sect_h['sections'].map do |meth_s, meth_h|
442
- [link(meth_s) { open_methods(meth_s) }, "\n"]
443
- end.flatten
444
- links[-1] = {:size => 9, :margin => 4, :margin_left => 10}
445
- para *links
446
- end
447
- end
448
- end
449
- stack :margin => 12, :width => 118, :margin_top => 6 do
450
- background "#330", :curve => 4
451
- para "Not finding it? Try ", strong(link("Search", :stroke => white) { show_search }), "!", :stroke => "#ddd", :size => 9, :align => "center", :margin => 6
452
- end
453
- stack :margin => 12, :width => 118 do
454
- inscription "Shoes #{Shoes::RELEASE_NAME}\nRevision: #{Shoes::REVISION}",
455
- :size => 7, :align => "center", :stroke => "#999"
456
- end
457
- end
458
- image :width => 120, :height => 120, :top => -18, :left => 6 do
459
- image "#{DIR}/static/shoes-icon.png", :width => 100, :height => 100, :top => 10, :left => 10
460
- glow 2
461
- end
462
- end
463
- rescue => e
464
- p e.message
465
- p e.class
466
- end
467
-
468
- Shoes::Help = Shoes.make_help_page
1
+ # -*- encoding: utf-8 -*-
2
+ module Shoes::Manual
3
+ PARA_RE = /\s*?(\{{3}(?:.+?)\}{3})|\n\n/m
4
+ CODE_RE = /\{{3}(?:\s*\#![^\n]+)?(.+?)\}{3}/m
5
+ IMAGE_RE = /\!(\{([^}\n]+)\})?([^!\n]+\.\w+)\!/
6
+ CODE_STYLE = {:size => 9, :margin => 12}
7
+ INTRO_STYLE = {:size => 16, :margin_bottom => 20, :stroke => "#000"}
8
+ SUB_STYLE = {:stroke => "#CCC", :margin_top => 10}
9
+ IMAGE_STYLE = {:margin => 8, :margin_left => 100}
10
+ COLON = ": "
11
+
12
+ [INTRO_STYLE, SUB_STYLE].each do |h|
13
+ h[:font] = "MS UI Gothic"
14
+ end if Shoes.language == 'ja'
15
+
16
+ def self.path
17
+ path = "#{DIR}/static/manual-#{Shoes.language}.txt"
18
+ unless File.exists? path
19
+ path = "#{DIR}/static/manual-en.txt"
20
+ end
21
+ path
22
+ end
23
+
24
+ def dewikify_hi(str, terms, intro = false)
25
+ if terms
26
+ code = []
27
+ str = str.
28
+ gsub(CODE_RE) { |x| code << x; "CODE#[#{code.length-1}]" }.
29
+ gsub(/#{Regexp::quote(terms)}/i, '@\0@').
30
+ gsub(/CODE#\[(\d+)\]/) { code[$1.to_i] }
31
+ end
32
+ dewikify(str, intro)
33
+ end
34
+
35
+ def dewikify_p(ele, str, *args)
36
+ str = str.gsub(/\n+\s*/, " ").dump.
37
+ gsub(/`(.+?)`/m, '", code("\1"), "').gsub(/\[\[BR\]\]/i, "\n").
38
+ gsub(/\^(.+?)\^/m, '\1').
39
+ gsub(/@(.+?)@/m, '", strong("\1", :fill => yellow), "').
40
+ gsub(/'''(.+?)'''/m, '", strong("\1"), "').gsub(/''(.+?)''/m, '", em("\1"), "').
41
+ gsub(/\[\[(\S+?)\]\]/m, '", link("\1".split(".", 2).last) { open_link("\1") }, "').
42
+ gsub(/\[\[(\S+?) (.+?)\]\]/m, '", link("\2") { open_link("\1") }, "').
43
+ gsub(IMAGE_RE, '", *args); stack(IMAGE_STYLE.merge({\2})) { image("#{DIR}/static/\3") }; #{ele}("')
44
+ #debug str if str =~ /The list of special keys/
45
+ a = str.split(', ", ", ')
46
+ if a.size == 1
47
+ eval("#{ele}(#{str}, *args)")
48
+ else
49
+ flow do
50
+ a[0...-1].each{|s| eval("#{ele}(#{s}, ',', *args)")}
51
+ eval("#{ele}(#{a[-1]}, *args)")
52
+ end
53
+ end
54
+ end
55
+
56
+ def dewikify_code(str)
57
+ str = str.gsub(/\A\n+/, '').chomp
58
+ stack :margin_bottom => 12 do
59
+ background rgb(210, 210, 210), :curve => 4
60
+ para code(str), CODE_STYLE
61
+ stack :top => 0, :right => 2, :width => 70 do
62
+ stack do
63
+ background "#8A7", :margin => [0, 2, 0, 2], :curve => 4
64
+ para link("Run this", :stroke => "#eee", :underline => "none") { run_code(str) },
65
+ :margin => 4, :align => 'center', :weight => 'bold', :size => 9
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ def wiki_tokens(str, intro = false)
72
+ paras = str.split(PARA_RE).reject { |x| x.empty? }
73
+ if intro
74
+ yield :intro, paras.shift
75
+ end
76
+ paras.map do |ps|
77
+ if ps =~ CODE_RE
78
+ yield :code, $1
79
+ else
80
+ case ps
81
+ when /\A\{COLORS\}/
82
+ yield :colors, nil
83
+ when /\A\{INDEX\}/
84
+ yield :index, nil
85
+ when /\A\{SAMPLES\}/
86
+ yield :samples, nil
87
+ when /\A \* (.+)/m
88
+ yield :list, $1.split(/^ \* /)
89
+ when /\A==== (.+) ====/
90
+ yield :caption, $1
91
+ when /\A=== (.+) ===/
92
+ yield :tagline, $1
93
+ when /\A== (.+) ==/
94
+ yield :subtitle, $1
95
+ when /\A= (.+) =/
96
+ yield :title, $1
97
+ else
98
+ yield :para, ps
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ def dewikify(str, intro = false)
105
+ proc do
106
+ wiki_tokens(str, intro) do |sym, text|
107
+ case sym when :intro
108
+ dewikify_p :para, text, INTRO_STYLE
109
+ when :code
110
+ dewikify_code(text)
111
+ when :colors
112
+ color_page
113
+ when :index
114
+ index_page
115
+ when :samples
116
+ sample_page
117
+ when :list
118
+ text.each { |t| stack(:margin_left => 30) {
119
+ fill black; oval -10, 7, 6; dewikify_p :para, t } }
120
+ else
121
+ dewikify_p sym, text
122
+ end
123
+ end
124
+ end
125
+ end
126
+
127
+ def sample_page
128
+ folder = File.join DIR, 'samples'
129
+ h = {}
130
+ Dir.glob(File.join folder, '*').each do |file|
131
+ if File.extname(file) == '.rb'
132
+ key = File.basename(file).split('-')[0]
133
+ h[key] ? h[key].push(file) : h[key] = [file]
134
+ end
135
+ end
136
+ stack do
137
+ h.each do |k, v|
138
+ subtitle k
139
+ flow do
140
+ v.each do |file|
141
+ para link(File.basename(file).split('-')[1..-1].join('-')[0..-4]){
142
+ Dir.chdir(folder){eval IO.read(file).force_encoding("UTF-8"), TOPLEVEL_BINDING}
143
+ }
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ def color_page
151
+ color_names = (Shoes::COLORS.keys*"\n").split("\n").sort
152
+ flow do
153
+ color_names.each do |color|
154
+ flow :width => 0.33 do
155
+ c = send(color)
156
+ background c
157
+ para strong(color), "\n", c, :stroke => (c.dark? ? white : black),
158
+ :margin => 4, :align => 'center'
159
+ end
160
+ end
161
+ end
162
+ end
163
+
164
+ def class_tree
165
+ tree = {}
166
+ Shoes.constants.each do |c|
167
+ k = Shoes.const_get(c)
168
+ next unless k.respond_to? :superclass
169
+
170
+ c = "Shoes::#{c}"
171
+ if k.superclass == Object
172
+ tree[c] ||= []
173
+ else
174
+ k.ancestors[1..-1].each do |sk|
175
+ break if [Object, Kernel].include? sk
176
+ next unless sk.is_a? Class #don't show mixins
177
+ (tree[sk.name] ||= []) << c
178
+ c = sk.name
179
+ end
180
+ end
181
+ end
182
+ tree
183
+ end
184
+
185
+ def index_page
186
+ tree = class_tree
187
+ shown = []
188
+ index_p = proc do |k, subs|
189
+ unless shown.include? k
190
+ stack :margin_left => 20 do
191
+ flow do
192
+ para "▸ ", :font => case RUBY_PLATFORM
193
+ when /mingw/; "MS UI Gothic"
194
+ when /darwin/; "AppleGothic, Arial"
195
+ else "Arial"
196
+ end
197
+ para k
198
+ end
199
+ subs.uniq.sort.each do |s|
200
+ index_p[s, tree[s]]
201
+ end if subs
202
+ end
203
+ shown << k
204
+ end
205
+ end
206
+ tree.sort.each &index_p
207
+ end
208
+
209
+ def run_code str
210
+ eval(str, TOPLEVEL_BINDING)
211
+ end
212
+
213
+ def load_docs path
214
+ return @docs if @docs
215
+ str = Shoes.read_file(path)
216
+ @search = Shoes::Search.new
217
+ @sections, @methods, @mindex = {}, {}, {}
218
+ @docs =
219
+ (str.split(/^= (.+?) =/)[1..-1]/2).map do |k,v|
220
+ sparts = v.split(/^== (.+?) ==/)
221
+
222
+ sections = (sparts[1..-1]/2).map do |k2,v2|
223
+ meth = v2.split(/^=== (.+?) ===/)
224
+ k2t = k2[/^(?:The )?([\-\w]+)/, 1]
225
+ meth_plain = meth[0].gsub(IMAGE_RE, '')
226
+ @search.add_document :uri => "T #{k2t}", :body => "#{k2}\n#{meth_plain}".downcase
227
+
228
+ hsh = {'title' => k2, 'section' => k,
229
+ 'description' => meth[0],
230
+ 'methods' => (meth[1..-1]/2).map { |_k,_v|
231
+ @search.add_document :uri => "M #{k}#{COLON}#{k2t}#{COLON}#{_k}", :body => "#{_k}\n#{_v}".downcase
232
+ @mindex["#{k2t}.#{_k[/[\w\.]+/]}"] = [k2t, _k]
233
+ [_k, _v]
234
+ }}
235
+ @methods[k2t] = hsh
236
+ [k2t, hsh]
237
+ end
238
+
239
+ @search.add_document :uri => "S #{k}", :body => "#{k}\n#{sparts[0]}".downcase
240
+ hsh = {'description' => sparts[0], 'sections' => sections,
241
+ 'class' => "toc" + k.downcase.gsub(/\W+/, '')}
242
+ @sections[k] = hsh
243
+ [k, hsh]
244
+ end
245
+ @search.finish!
246
+ @docs
247
+ end
248
+
249
+ def show_search
250
+ @toc.each { |k,v| v.hide }
251
+ @title.replace "Search"
252
+ @doc.clear do
253
+ dewikify_p :para, "Try method names (like `button` or `arrow`) or topics (like `slots`)", :align => 'center'
254
+ flow :margin_left => 60 do
255
+ edit_line :width => -60 do |terms|
256
+ @results.clear do
257
+ termd = terms.text.downcase
258
+ #found = termd.empty? ? [] : manual_search(termd)
259
+ found = (termd.empty? or termd[0] == 'z' or termd[0] == 'y') ? [] : manual_search(termd)
260
+ para "#{found.length} matches", :align => "center", :margin_bottom => 0
261
+ found.each do |typ, head|
262
+ flow :margin => 4 do
263
+ case typ
264
+ when "S"
265
+ background "#333", :curve => 4
266
+ caption strong(link(head, :stroke => white) { open_section(head, terms.text) })
267
+ para "Section header", Shoes::Manual::SUB_STYLE
268
+ when "T"
269
+ background "#777", :curve => 4
270
+ caption strong(link(head, :stroke => "#EEE") { open_methods(head, terms.text) })
271
+ hsh = @methods[head]
272
+ para "Sub-section under #{hsh['section']} (#{hsh['methods'].length} methods)", Shoes::Manual::SUB_STYLE
273
+ when "M"
274
+ background "#CCC", :curve => 4
275
+ sect, subhead, head = head.split(Shoes::Manual::COLON, 3)
276
+ para strong(sect, Shoes::Manual::COLON, subhead, Shoes::Manual::COLON, link(head) { open_methods(subhead, terms.text, head) })
277
+ end
278
+ end
279
+ end
280
+ end
281
+ end
282
+ end
283
+ @results = stack
284
+ end
285
+ app.slot.scroll_top = 0
286
+ end
287
+
288
+ def open_link(head)
289
+ if head == "Search"
290
+ show_search
291
+ elsif @sections.has_key? head
292
+ open_section(head)
293
+ elsif @methods.has_key? head
294
+ open_methods(head)
295
+ elsif @mindex.has_key? head
296
+ head, sub = @mindex[head]
297
+ open_methods(head, nil, sub)
298
+ elsif head =~ /^http:\/\//
299
+ debug head
300
+ visit head
301
+ end
302
+ end
303
+
304
+ def add_next_link(docn, optn)
305
+ opt1, optn = @docs[docn][1], optn + 1
306
+ if opt1['sections'][optn]
307
+ @doc.para "Next: ",
308
+ link(opt1['sections'][optn][1]['title']) { open_methods(opt1['sections'][optn][0]) },
309
+ :align => "right"
310
+ elsif @docs[docn + 1]
311
+ @doc.para "Next: ",
312
+ link(@docs[docn + 1][0]) { open_section(@docs[docn + 1][0].gsub(/\W/, '')) },
313
+ :align => "right"
314
+ end
315
+ end
316
+
317
+ def open_section(sect_s, terms = nil)
318
+ sect_h = @sections[sect_s]
319
+ sect_cls = sect_h['class']
320
+ @toc.each { |k,v| v.send(k == sect_cls ? :show : :hide) }
321
+ @title.replace sect_s
322
+ @doc.clear(&dewikify_hi(sect_h['description'], terms, true))
323
+ add_next_link(@docs.index { |x,| x == sect_s }, -1) rescue nil
324
+ app.slot.scroll_top = 0
325
+ end
326
+
327
+ def open_methods(meth_s, terms = nil, meth_a = nil)
328
+ meth_h = @methods[meth_s]
329
+ @title.replace meth_h['title']
330
+ @doc.clear do
331
+ unless meth_a
332
+ instance_eval &dewikify_hi(meth_h['description'], terms, true)
333
+ end
334
+ meth_h['methods'].each do |mname, expl|
335
+ if meth_a.nil? or meth_a == mname
336
+ sig, val = mname.split("»", 2)
337
+ stack(:margin_top => 8, :margin_bottom => 8) {
338
+ background "#333".."#666", :curve => 3, :angle => 90
339
+ tagline sig, (span("»", val, :stroke => "#BBB") if val), :margin => 4 }
340
+ instance_eval &dewikify_hi(expl, terms)
341
+ end
342
+ end
343
+ end
344
+ optn = nil
345
+ docn = @docs.index { |_,h| optn = h['sections'].index { |x,| x == meth_s } } rescue nil
346
+ add_next_link(docn, optn) if docn
347
+ app.slot.scroll_top = 0
348
+ end
349
+
350
+ def manual_search(terms)
351
+ terms += " " if terms.length == 1
352
+ @search.find_all(terms).map do |title, count|
353
+ title.split(" ", 2)
354
+ end
355
+ end
356
+
357
+ def make_html(path, title, menu, &blk)
358
+ require 'hpricot'
359
+ File.open(path, 'w') do |f|
360
+ f << Hpricot do
361
+ xhtml_transitional do
362
+ head do
363
+ meta :"http-equiv" => "Content-Type", "content" => "text/html; charset=utf-8"
364
+ title "The Shoes Manual // #{title}"
365
+ script :type => "text/javascript", :src => "static/code_highlighter.js"
366
+ script :type => "text/javascript", :src => "static/code_highlighter_ruby.js"
367
+ style :type => "text/css" do
368
+ text "@import 'static/manual.css';"
369
+ end
370
+ end
371
+ body do
372
+ div.main! do
373
+ div.manual! &blk
374
+ div.sidebar do
375
+ img :src => "static/shoes-icon.png"
376
+ ul do
377
+ li { a.prime "HELP", :href => "./" }
378
+ menu.each do |m, sm|
379
+ li do
380
+ a m, :href => "#{m[/^\w+/]}.html"
381
+ if sm
382
+ ul.sub do
383
+ sm.each { |smm| li { a smm, :href => "#{smm}.html" } }
384
+ end
385
+ end
386
+ end
387
+ end
388
+
389
+ end
390
+ end
391
+ end
392
+ end
393
+ end
394
+ end.to_html
395
+ end
396
+ end
397
+ end
398
+
399
+ def Shoes.make_help_page
400
+ font "#{DIR}/fonts/Coolvetica.ttf" unless Shoes::FONTS.include? "Coolvetica"
401
+ proc do
402
+ extend Shoes::Manual
403
+ docs = load_docs Shoes::Manual.path
404
+
405
+ style(Shoes::Image, :margin => 8, :margin_left => 100)
406
+ style(Shoes::Code, :stroke => "#C30")
407
+ style(Shoes::LinkHover, :stroke => green, :fill => nil)
408
+ style(Shoes::Para, :size => 12, :stroke => "#332")
409
+ style(Shoes::Tagline, :size => 12, :weight => "bold", :stroke => "#eee", :margin => 6)
410
+ style(Shoes::Caption, :size => 24)
411
+ background "#ddd".."#fff", :angle => 90
412
+
413
+ [Shoes::LinkHover, Shoes::Para, Shoes::Tagline, Shoes::Caption].each do |type|
414
+ style(type, :font => "MS UI Gothic")
415
+ end if Shoes.language == 'ja'
416
+
417
+ stack do
418
+ background black
419
+ stack :margin_left => 118 do
420
+ para "The Shoes Manual", :stroke => "#eee", :margin_top => 8, :margin_left => 17,
421
+ :margin_bottom => 0
422
+ @title = title docs[0][0], :stroke => white, :margin => 4, :margin_left => 14,
423
+ :margin_top => 0, :font => "Coolvetica"
424
+ end
425
+ background "rgb(66, 66, 66, 180)".."rgb(0, 0, 0, 0)", :height => 0.7
426
+ background "rgb(66, 66, 66, 100)".."rgb(255, 255, 255, 0)", :height => 20, :bottom => 0
427
+ end
428
+ @doc =
429
+ stack :margin_left => 130, :margin_top => 20, :margin_bottom => 50, :margin_right => 50 + gutter,
430
+ &dewikify(docs[0][-1]['description'], true)
431
+ add_next_link(0, -1)
432
+ stack :top => 80, :left => 0, :attach => Shoes::Window do
433
+ @toc = {}
434
+ stack :margin => 12, :width => 130, :margin_top => 20 do
435
+ docs.each do |sect_s, sect_h|
436
+ sect_cls = sect_h['class']
437
+ para strong(link(sect_s, :stroke => black) { open_section(sect_s) }),
438
+ :size => 11, :margin => 4, :margin_top => 0
439
+ @toc[sect_cls] =
440
+ stack :hidden => @toc.empty? ? false : true do
441
+ links = sect_h['sections'].map do |meth_s, meth_h|
442
+ [link(meth_s) { open_methods(meth_s) }, "\n"]
443
+ end.flatten
444
+ links[-1] = {:size => 9, :margin => 4, :margin_left => 10}
445
+ para *links
446
+ end
447
+ end
448
+ end
449
+ stack :margin => 12, :width => 118, :margin_top => 6 do
450
+ background "#330", :curve => 4
451
+ para "Not finding it? Try ", strong(link("Search", :stroke => white) { show_search }), "!", :stroke => "#ddd", :size => 9, :align => "center", :margin => 6
452
+ end
453
+ stack :margin => 12, :width => 118 do
454
+ inscription "Shoes #{Shoes::RELEASE_NAME}\nRevision: #{Shoes::REVISION}",
455
+ :size => 7, :align => "center", :stroke => "#999"
456
+ end
457
+ end
458
+ image :width => 120, :height => 120, :top => -18, :left => 6 do
459
+ image "#{DIR}/static/shoes-icon.png", :width => 100, :height => 100, :top => 10, :left => 10
460
+ glow 2
461
+ end
462
+ end
463
+ rescue => e
464
+ p e.message
465
+ p e.class
466
+ end
467
+
468
+ Shoes::Help = Shoes.make_help_page