shoesgem 0.1424.0 → 0.1426.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (320) hide show
  1. data/README.rdoc +3 -0
  2. data/shoes/CHANGELOG.txt +21 -21
  3. data/shoes/COPYING.txt +30 -30
  4. data/shoes/VERSION.txt +1 -1
  5. data/shoes/freetype6.dll +0 -0
  6. data/shoes/lib/shoes/cache.rb +54 -54
  7. data/shoes/lib/shoes/data.rb +39 -39
  8. data/shoes/lib/shoes/help.rb +421 -421
  9. data/shoes/lib/shoes/image.rb +25 -25
  10. data/shoes/lib/shoes/inspect.rb +128 -128
  11. data/shoes/lib/shoes/log.rb +48 -48
  12. data/shoes/lib/shoes/minitar.rb +986 -986
  13. data/shoes/lib/shoes/override.rb +38 -38
  14. data/shoes/lib/shoes/pack.rb +503 -503
  15. data/shoes/lib/shoes/search.rb +46 -46
  16. data/shoes/lib/shoes/setup.rb +329 -329
  17. data/shoes/lib/shoes/shy.rb +131 -131
  18. data/shoes/lib/shoes/shybuilder.rb +44 -44
  19. data/shoes/lib/shoes.rb +522 -522
  20. data/shoes/libcairo-2.dll +0 -0
  21. data/shoes/libeay32.dll +0 -0
  22. data/shoes/libexpat-1.dll +0 -0
  23. data/shoes/libfontconfig-1.dll +0 -0
  24. data/shoes/libgio-2.0-0.dll +0 -0
  25. data/shoes/libglib-2.0-0.dll +0 -0
  26. data/shoes/libgmodule-2.0-0.dll +0 -0
  27. data/shoes/libgobject-2.0-0.dll +0 -0
  28. data/shoes/libgthread-2.0-0.dll +0 -0
  29. data/shoes/libiconv2.dll +0 -0
  30. data/shoes/libjpeg-8.dll +0 -0
  31. data/shoes/libpango-1.0-0.dll +0 -0
  32. data/shoes/libpangocairo-1.0-0.dll +0 -0
  33. data/shoes/libpangoft2-1.0-0.dll +0 -0
  34. data/shoes/libpangowin32-1.0-0.dll +0 -0
  35. data/shoes/libpng14-14.dll +0 -0
  36. data/shoes/libportaudio-2.dll +0 -0
  37. data/shoes/libshoes.dll +0 -0
  38. data/shoes/libssl32.dll +0 -0
  39. data/shoes/libungif4.dll +0 -0
  40. data/shoes/msvcrt-ruby191.dll +0 -0
  41. data/shoes/nsis/base.nsi +644 -0
  42. data/shoes/nsis/installer-1.bmp +0 -0
  43. data/shoes/nsis/installer-2.bmp +0 -0
  44. data/shoes/nsis/setup.ico +0 -0
  45. data/shoes/nsis/shoes.exe.manifest +17 -0
  46. data/shoes/nsis/shoes.ico +0 -0
  47. data/shoes/nsis/shoes.nsi +644 -0
  48. data/shoes/nsis/stub-inject.c +59 -0
  49. data/shoes/nsis/stub.c +271 -0
  50. data/shoes/nsis/stub32.h +14 -0
  51. data/shoes/nsis/stub32.rc +16 -0
  52. data/shoes/readline5.dll +0 -0
  53. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/fast_xs.so +0 -0
  54. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/blankslate.rb +63 -63
  55. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/builder.rb +216 -216
  56. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/elements.rb +510 -510
  57. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/htmlinfo.rb +691 -691
  58. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/inspect.rb +103 -103
  59. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/modules.rb +40 -40
  60. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/parse.rb +38 -38
  61. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tag.rb +202 -202
  62. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/tags.rb +164 -164
  63. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/traverse.rb +838 -838
  64. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot/xchar.rb +94 -94
  65. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot.rb +26 -26
  66. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot_scan.so +0 -0
  67. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/core.rb +135 -135
  68. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/add/rails.rb +58 -58
  69. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/common.rb +354 -354
  70. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/generator.so +0 -0
  71. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/parser.so +0 -0
  72. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext.rb +13 -13
  73. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/version.rb +9 -9
  74. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json.rb +8 -8
  75. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/constants.rb +49 -49
  76. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/database.rb +721 -721
  77. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/api.rb +152 -152
  78. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/driver.rb +307 -307
  79. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/native/driver.rb +219 -219
  80. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/errors.rb +68 -68
  81. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/pragmas.rb +271 -271
  82. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/resultset.rb +180 -180
  83. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/statement.rb +231 -231
  84. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/translator.rb +109 -109
  85. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/value.rb +57 -57
  86. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/version.rb +16 -16
  87. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3.rb +1 -1
  88. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3_api.so +0 -0
  89. data/shoes/ruby/gems/1.9.1/specifications/hpricot-0.8.1.gemspec +32 -32
  90. data/shoes/ruby/gems/1.9.1/specifications/json-shoes-1.1.3.gemspec +34 -34
  91. data/shoes/ruby/gems/1.9.1/specifications/sqlite3-ruby-1.2.5-x86-mswin32.gemspec +46 -46
  92. data/shoes/ruby/lib/ftsearch/analysis/analyzer.rb +16 -16
  93. data/shoes/ruby/lib/ftsearch/analysis/simple_identifier_analyzer.rb +23 -23
  94. data/shoes/ruby/lib/ftsearch/analysis/whitespace_analyzer.rb +22 -22
  95. data/shoes/ruby/lib/ftsearch/document_map_reader.rb +106 -106
  96. data/shoes/ruby/lib/ftsearch/document_map_writer.rb +46 -46
  97. data/shoes/ruby/lib/ftsearch/field_infos.rb +46 -46
  98. data/shoes/ruby/lib/ftsearch/fragment_writer.rb +114 -114
  99. data/shoes/ruby/lib/ftsearch/fulltext_reader.rb +52 -52
  100. data/shoes/ruby/lib/ftsearch/fulltext_writer.rb +75 -75
  101. data/shoes/ruby/lib/ftsearch/suffix_array_reader.rb +275 -275
  102. data/shoes/ruby/lib/ftsearch/suffix_array_writer.rb +99 -99
  103. data/shoes/ruby/lib/ftsearch/util.rb +21 -21
  104. data/shoes/ruby/lib/i386-mingw32/bigdecimal.so +0 -0
  105. data/shoes/ruby/lib/i386-mingw32/binject.so +0 -0
  106. data/shoes/ruby/lib/i386-mingw32/bloops.so +0 -0
  107. data/shoes/ruby/lib/i386-mingw32/continuation.so +0 -0
  108. data/shoes/ruby/lib/i386-mingw32/coverage.so +0 -0
  109. data/shoes/ruby/lib/i386-mingw32/curses.so +0 -0
  110. data/shoes/ruby/lib/i386-mingw32/digest/bubblebabble.so +0 -0
  111. data/shoes/ruby/lib/i386-mingw32/digest/md5.so +0 -0
  112. data/shoes/ruby/lib/i386-mingw32/digest/rmd160.so +0 -0
  113. data/shoes/ruby/lib/i386-mingw32/digest/sha1.so +0 -0
  114. data/shoes/ruby/lib/i386-mingw32/digest/sha2.so +0 -0
  115. data/shoes/ruby/lib/i386-mingw32/digest.so +0 -0
  116. data/shoes/ruby/lib/i386-mingw32/dl.so +0 -0
  117. data/shoes/ruby/lib/i386-mingw32/enc/big5.so +0 -0
  118. data/shoes/ruby/lib/i386-mingw32/enc/cp949.so +0 -0
  119. data/shoes/ruby/lib/i386-mingw32/enc/emacs_mule.so +0 -0
  120. data/shoes/ruby/lib/i386-mingw32/enc/encdb.so +0 -0
  121. data/shoes/ruby/lib/i386-mingw32/enc/euc_jp.so +0 -0
  122. data/shoes/ruby/lib/i386-mingw32/enc/euc_kr.so +0 -0
  123. data/shoes/ruby/lib/i386-mingw32/enc/euc_tw.so +0 -0
  124. data/shoes/ruby/lib/i386-mingw32/enc/gb18030.so +0 -0
  125. data/shoes/ruby/lib/i386-mingw32/enc/gb2312.so +0 -0
  126. data/shoes/ruby/lib/i386-mingw32/enc/gbk.so +0 -0
  127. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_1.so +0 -0
  128. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_10.so +0 -0
  129. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_11.so +0 -0
  130. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_13.so +0 -0
  131. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_14.so +0 -0
  132. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_15.so +0 -0
  133. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_16.so +0 -0
  134. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_2.so +0 -0
  135. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_3.so +0 -0
  136. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_4.so +0 -0
  137. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_5.so +0 -0
  138. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_6.so +0 -0
  139. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_7.so +0 -0
  140. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_8.so +0 -0
  141. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_9.so +0 -0
  142. data/shoes/ruby/lib/i386-mingw32/enc/koi8_r.so +0 -0
  143. data/shoes/ruby/lib/i386-mingw32/enc/koi8_u.so +0 -0
  144. data/shoes/ruby/lib/i386-mingw32/enc/shift_jis.so +0 -0
  145. data/shoes/ruby/lib/i386-mingw32/enc/trans/big5.so +0 -0
  146. data/shoes/ruby/lib/i386-mingw32/enc/trans/chinese.so +0 -0
  147. data/shoes/ruby/lib/i386-mingw32/enc/trans/escape.so +0 -0
  148. data/shoes/ruby/lib/i386-mingw32/enc/trans/gb18030.so +0 -0
  149. data/shoes/ruby/lib/i386-mingw32/enc/trans/gbk.so +0 -0
  150. data/shoes/ruby/lib/i386-mingw32/enc/trans/iso2022.so +0 -0
  151. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese.so +0 -0
  152. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_euc.so +0 -0
  153. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_sjis.so +0 -0
  154. data/shoes/ruby/lib/i386-mingw32/enc/trans/korean.so +0 -0
  155. data/shoes/ruby/lib/i386-mingw32/enc/trans/single_byte.so +0 -0
  156. data/shoes/ruby/lib/i386-mingw32/enc/trans/transdb.so +0 -0
  157. data/shoes/ruby/lib/i386-mingw32/enc/trans/utf_16_32.so +0 -0
  158. data/shoes/ruby/lib/i386-mingw32/enc/utf_16be.so +0 -0
  159. data/shoes/ruby/lib/i386-mingw32/enc/utf_16le.so +0 -0
  160. data/shoes/ruby/lib/i386-mingw32/enc/utf_32be.so +0 -0
  161. data/shoes/ruby/lib/i386-mingw32/enc/utf_32le.so +0 -0
  162. data/shoes/ruby/lib/i386-mingw32/enc/windows_1251.so +0 -0
  163. data/shoes/ruby/lib/i386-mingw32/etc.so +0 -0
  164. data/shoes/ruby/lib/i386-mingw32/fcntl.so +0 -0
  165. data/shoes/ruby/lib/i386-mingw32/fiber.so +0 -0
  166. data/shoes/ruby/lib/i386-mingw32/ftsearchrt.so +0 -0
  167. data/shoes/ruby/lib/i386-mingw32/gdbm.so +0 -0
  168. data/shoes/ruby/lib/i386-mingw32/iconv.so +0 -0
  169. data/shoes/ruby/lib/i386-mingw32/io/wait.so +0 -0
  170. data/shoes/ruby/lib/i386-mingw32/json/ext/generator.so +0 -0
  171. data/shoes/ruby/lib/i386-mingw32/json/ext/parser.so +0 -0
  172. data/shoes/ruby/lib/i386-mingw32/mathn/complex.so +0 -0
  173. data/shoes/ruby/lib/i386-mingw32/mathn/rational.so +0 -0
  174. data/shoes/ruby/lib/i386-mingw32/nkf.so +0 -0
  175. data/shoes/ruby/lib/i386-mingw32/openssl.so +0 -0
  176. data/shoes/ruby/lib/i386-mingw32/racc/cparse.so +0 -0
  177. data/shoes/ruby/lib/i386-mingw32/rbconfig.rb +2 -2
  178. data/shoes/ruby/lib/i386-mingw32/readline.so +0 -0
  179. data/shoes/ruby/lib/i386-mingw32/ripper.so +0 -0
  180. data/shoes/ruby/lib/i386-mingw32/sdbm.so +0 -0
  181. data/shoes/ruby/lib/i386-mingw32/socket.so +0 -0
  182. data/shoes/ruby/lib/i386-mingw32/stringio.so +0 -0
  183. data/shoes/ruby/lib/i386-mingw32/strscan.so +0 -0
  184. data/shoes/ruby/lib/i386-mingw32/syck.so +0 -0
  185. data/shoes/ruby/lib/i386-mingw32/win32ole.so +0 -0
  186. data/shoes/ruby/lib/i386-mingw32/zlib.so +0 -0
  187. data/shoes/ruby/lib/rbconfig/datadir.rb +24 -24
  188. data/shoes/ruby/lib/rubygems/builder.rb +88 -88
  189. data/shoes/ruby/lib/rubygems/command.rb +406 -406
  190. data/shoes/ruby/lib/rubygems/command_manager.rb +146 -146
  191. data/shoes/ruby/lib/rubygems/commands/build_command.rb +53 -53
  192. data/shoes/ruby/lib/rubygems/commands/cert_command.rb +86 -86
  193. data/shoes/ruby/lib/rubygems/commands/check_command.rb +75 -75
  194. data/shoes/ruby/lib/rubygems/commands/cleanup_command.rb +91 -91
  195. data/shoes/ruby/lib/rubygems/commands/contents_command.rb +74 -74
  196. data/shoes/ruby/lib/rubygems/commands/dependency_command.rb +188 -188
  197. data/shoes/ruby/lib/rubygems/commands/environment_command.rb +128 -128
  198. data/shoes/ruby/lib/rubygems/commands/fetch_command.rb +62 -62
  199. data/shoes/ruby/lib/rubygems/commands/generate_index_command.rb +57 -57
  200. data/shoes/ruby/lib/rubygems/commands/help_command.rb +172 -172
  201. data/shoes/ruby/lib/rubygems/commands/install_command.rb +148 -148
  202. data/shoes/ruby/lib/rubygems/commands/list_command.rb +35 -35
  203. data/shoes/ruby/lib/rubygems/commands/lock_command.rb +110 -110
  204. data/shoes/ruby/lib/rubygems/commands/mirror_command.rb +111 -111
  205. data/shoes/ruby/lib/rubygems/commands/outdated_command.rb +33 -33
  206. data/shoes/ruby/lib/rubygems/commands/pristine_command.rb +93 -93
  207. data/shoes/ruby/lib/rubygems/commands/query_command.rb +233 -233
  208. data/shoes/ruby/lib/rubygems/commands/rdoc_command.rb +82 -82
  209. data/shoes/ruby/lib/rubygems/commands/search_command.rb +37 -37
  210. data/shoes/ruby/lib/rubygems/commands/server_command.rb +48 -48
  211. data/shoes/ruby/lib/rubygems/commands/sources_command.rb +152 -152
  212. data/shoes/ruby/lib/rubygems/commands/specification_command.rb +77 -77
  213. data/shoes/ruby/lib/rubygems/commands/stale_command.rb +27 -27
  214. data/shoes/ruby/lib/rubygems/commands/uninstall_command.rb +73 -73
  215. data/shoes/ruby/lib/rubygems/commands/unpack_command.rb +95 -95
  216. data/shoes/ruby/lib/rubygems/commands/update_command.rb +181 -181
  217. data/shoes/ruby/lib/rubygems/commands/which_command.rb +87 -87
  218. data/shoes/ruby/lib/rubygems/config_file.rb +266 -266
  219. data/shoes/ruby/lib/rubygems/custom_require.rb +46 -46
  220. data/shoes/ruby/lib/rubygems/defaults.rb +89 -89
  221. data/shoes/ruby/lib/rubygems/dependency.rb +119 -119
  222. data/shoes/ruby/lib/rubygems/dependency_installer.rb +258 -258
  223. data/shoes/ruby/lib/rubygems/dependency_list.rb +165 -165
  224. data/shoes/ruby/lib/rubygems/digest/digest_adapter.rb +39 -39
  225. data/shoes/ruby/lib/rubygems/digest/md5.rb +23 -23
  226. data/shoes/ruby/lib/rubygems/digest/sha1.rb +16 -16
  227. data/shoes/ruby/lib/rubygems/digest/sha2.rb +17 -17
  228. data/shoes/ruby/lib/rubygems/doc_manager.rb +214 -214
  229. data/shoes/ruby/lib/rubygems/exceptions.rb +84 -84
  230. data/shoes/ruby/lib/rubygems/ext/builder.rb +56 -56
  231. data/shoes/ruby/lib/rubygems/ext/configure_builder.rb +24 -24
  232. data/shoes/ruby/lib/rubygems/ext/ext_conf_builder.rb +23 -23
  233. data/shoes/ruby/lib/rubygems/ext/rake_builder.rb +27 -27
  234. data/shoes/ruby/lib/rubygems/ext.rb +18 -18
  235. data/shoes/ruby/lib/rubygems/format.rb +87 -87
  236. data/shoes/ruby/lib/rubygems/gem_openssl.rb +83 -83
  237. data/shoes/ruby/lib/rubygems/gem_path_searcher.rb +100 -100
  238. data/shoes/ruby/lib/rubygems/gem_runner.rb +58 -58
  239. data/shoes/ruby/lib/rubygems/indexer.rb +370 -370
  240. data/shoes/ruby/lib/rubygems/install_update_options.rb +113 -113
  241. data/shoes/ruby/lib/rubygems/installer.rb +578 -578
  242. data/shoes/ruby/lib/rubygems/local_remote_options.rb +134 -134
  243. data/shoes/ruby/lib/rubygems/old_format.rb +148 -148
  244. data/shoes/ruby/lib/rubygems/package/f_sync_dir.rb +24 -24
  245. data/shoes/ruby/lib/rubygems/package/tar_header.rb +245 -245
  246. data/shoes/ruby/lib/rubygems/package/tar_input.rb +219 -219
  247. data/shoes/ruby/lib/rubygems/package/tar_output.rb +143 -143
  248. data/shoes/ruby/lib/rubygems/package/tar_reader/entry.rb +99 -99
  249. data/shoes/ruby/lib/rubygems/package/tar_reader.rb +86 -86
  250. data/shoes/ruby/lib/rubygems/package/tar_writer.rb +180 -180
  251. data/shoes/ruby/lib/rubygems/package.rb +95 -95
  252. data/shoes/ruby/lib/rubygems/platform.rb +178 -178
  253. data/shoes/ruby/lib/rubygems/remote_fetcher.rb +344 -344
  254. data/shoes/ruby/lib/rubygems/require_paths_builder.rb +14 -14
  255. data/shoes/ruby/lib/rubygems/requirement.rb +163 -163
  256. data/shoes/ruby/lib/rubygems/rubygems_version.rb +6 -6
  257. data/shoes/ruby/lib/rubygems/security.rb +786 -786
  258. data/shoes/ruby/lib/rubygems/server.rb +629 -629
  259. data/shoes/ruby/lib/rubygems/source_index.rb +559 -559
  260. data/shoes/ruby/lib/rubygems/source_info_cache.rb +393 -393
  261. data/shoes/ruby/lib/rubygems/source_info_cache_entry.rb +56 -56
  262. data/shoes/ruby/lib/rubygems/spec_fetcher.rb +249 -249
  263. data/shoes/ruby/lib/rubygems/specification.rb +1262 -1262
  264. data/shoes/ruby/lib/rubygems/test_utilities.rb +131 -131
  265. data/shoes/ruby/lib/rubygems/timer.rb +25 -25
  266. data/shoes/ruby/lib/rubygems/uninstaller.rb +242 -242
  267. data/shoes/ruby/lib/rubygems/user_interaction.rb +360 -360
  268. data/shoes/ruby/lib/rubygems/validator.rb +208 -208
  269. data/shoes/ruby/lib/rubygems/version.rb +167 -167
  270. data/shoes/ruby/lib/rubygems/version_option.rb +48 -48
  271. data/shoes/ruby/lib/rubygems.rb +888 -888
  272. data/shoes/ruby/lib/ubygems.rb +10 -10
  273. data/shoes/samples/class-book.rb +43 -43
  274. data/shoes/samples/class-book.yaml +387 -387
  275. data/shoes/samples/expert-definr.rb +23 -23
  276. data/shoes/samples/expert-funnies.rb +51 -51
  277. data/shoes/samples/expert-irb.rb +112 -112
  278. data/shoes/samples/expert-minesweeper.rb +267 -267
  279. data/shoes/samples/expert-othello.rb +319 -319
  280. data/shoes/samples/expert-pong.rb +62 -62
  281. data/shoes/samples/expert-tankspank.rb +385 -385
  282. data/shoes/samples/good-arc.rb +37 -37
  283. data/shoes/samples/good-clock.rb +51 -51
  284. data/shoes/samples/good-follow.rb +26 -26
  285. data/shoes/samples/good-reminder.rb +174 -174
  286. data/shoes/samples/good-vjot.rb +56 -56
  287. data/shoes/samples/simple-accordion.rb +75 -75
  288. data/shoes/samples/simple-anim-shapes.rb +17 -17
  289. data/shoes/samples/simple-anim-text.rb +13 -13
  290. data/shoes/samples/simple-arc.rb +23 -23
  291. data/shoes/samples/simple-bounce.rb +24 -24
  292. data/shoes/samples/simple-calc.rb +70 -70
  293. data/shoes/samples/simple-control-sizes.rb +24 -24
  294. data/shoes/samples/simple-curve.rb +26 -26
  295. data/shoes/samples/simple-dialogs.rb +29 -29
  296. data/shoes/samples/simple-downloader.rb +27 -27
  297. data/shoes/samples/simple-draw.rb +13 -13
  298. data/shoes/samples/simple-editor.rb +28 -28
  299. data/shoes/samples/simple-form.rb +28 -28
  300. data/shoes/samples/simple-mask.rb +21 -21
  301. data/shoes/samples/simple-menu.rb +31 -31
  302. data/shoes/samples/simple-menu1.rb +35 -35
  303. data/shoes/samples/simple-rubygems.rb +29 -29
  304. data/shoes/samples/simple-slide.rb +45 -45
  305. data/shoes/samples/simple-sphere.rb +28 -28
  306. data/shoes/samples/simple-timer.rb +13 -13
  307. data/shoes/samples/simple-video.rb +13 -13
  308. data/shoes/shoes.exe +0 -0
  309. data/shoes/sqlite3.dll +0 -0
  310. data/shoes/static/code_highlighter.js +188 -188
  311. data/shoes/static/code_highlighter_ruby.js +26 -26
  312. data/shoes/static/manual-en.txt +2783 -2783
  313. data/shoes/static/manual-ja.txt +2780 -2780
  314. data/shoes/static/manual.css +167 -167
  315. data/shoes/static/stubs/blank.run +375 -375
  316. data/shoes/static/stubs/sh-install +48 -48
  317. data/shoes/zlib.dll +0 -0
  318. data/shoes/zlib1.dll +0 -0
  319. metadata +15 -5
  320. data/shoes/static/Thumbs.db +0 -0
data/shoes/lib/shoes.rb CHANGED
@@ -1,522 +1,522 @@
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
- ASCII_8BIT = 'ASCII-8BIT'
23
- end
24
-
25
- class Range
26
- def rand
27
- conv = (Integer === self.end && Integer === self.begin ? :to_i : :to_f)
28
- ((Kernel.rand * (self.end - self.begin)) + self.begin).send(conv)
29
- end
30
- end
31
-
32
- unless Time.respond_to? :today
33
- def Time.today
34
- t = Time.now
35
- t - (t.to_i % 86400)
36
- end
37
- end
38
-
39
- class Shoes
40
- RELEASES = %w[Curious Raisins Policeman]
41
-
42
- NotFound = proc do
43
- para "404 NOT FOUND, GUYS!"
44
- end
45
-
46
- class << self; attr_accessor :locale, :language end
47
- @locale = ENV["SHOES_LANG"] || ENV["LC_MESSAGES"] || ENV["LC_ALL"] || ENV["LANG"] || "C"
48
- @language = @locale[/^(\w{2})_/, 1] || "en"
49
-
50
- @mounts = []
51
-
52
- OPTS = OptionParser.new do |opts|
53
- opts.banner = "Usage: shoes [options] (app.rb or app.shy)"
54
-
55
- opts.on("-m", "--manual",
56
- "Open the built-in manual.") do
57
- show_manual
58
- end
59
-
60
- opts.on("-p", "--package",
61
- "Package a Shoes app for Windows, OS X and Linux.") do |s|
62
- make_pack
63
- end
64
-
65
- opts.on("-g", "--gem",
66
- "Passes commands to RubyGems.") do
67
- require 'shoes/setup'
68
- require 'rubygems/gem_runner'
69
- Gem::GemRunner.new.run(ARGV)
70
- raise SystemExit, ""
71
- end
72
-
73
- opts.on("--manual-html DIRECTORY", "Saves the manual to a directory as HTML.") do |dir|
74
- manual_as :html, dir
75
- raise SystemExit, "HTML manual in: #{dir}"
76
- end
77
-
78
- opts.on("--install MODE SRC DEST", "Installs a file.") do |mode|
79
- src, dest = ARGV
80
- FileUtils.install src, dest, :mode => mode.to_i(8), :preserve => true
81
- raise SystemExit, ""
82
- end
83
-
84
- opts.on_tail("-v", "--version", "Display the version info.") do
85
- raise SystemExit, File.read("#{DIR}/VERSION.txt").strip
86
- end
87
-
88
- opts.on_tail("-h", "--help", "Show this message") do
89
- raise SystemExit, opts.to_s
90
- end
91
- end
92
-
93
- class SettingUp < StandardError; end
94
-
95
- @setups = {}
96
-
97
- def self.setup &blk
98
- require 'shoes/setup'
99
- line = caller[0]
100
- return if @setups[line]
101
- script = line[/^(.+?):/, 1]
102
- set = Shoes::Setup.new(script, &blk)
103
- @setups[line] = true
104
- unless set.no_steps?
105
- raise SettingUp
106
- end
107
- end
108
-
109
- def self.show_selector
110
- fname = ask_open_file
111
- Shoes.visit(fname) if fname
112
- end
113
-
114
- def self.package_app
115
- fname = ask_open_file
116
- return false unless fname
117
- start_shy_builder fname
118
- end
119
-
120
- def self.splash
121
- font "#{DIR}/fonts/Lacuna.ttf"
122
- Shoes.app :width => 400, :height => 300, :resizable => false do
123
- style(Para, :align => "center", :weight => "bold", :font => "Lacuna Regular", :size => 13)
124
- style(Link, :stroke => yellow, :underline => nil)
125
- style(LinkHover, :stroke => yellow, :fill => nil)
126
-
127
- x1 = 77; y1 = 122
128
- x2 = 148; y2 = -122
129
- x3 = 245; y3 = 0
130
-
131
- nofill
132
- strokewidth 40.0
133
-
134
- @waves = stack :top => 0, :left => 0
135
-
136
- require 'shoes/search'
137
- require 'shoes/help'
138
-
139
- stack :margin => 18 do
140
- para "Welcome to", :stroke => "#DFA", :margin => 0
141
- para "SHOES", :size => 48, :stroke => "#DFA", :margin_top => 0
142
- stack do
143
- background black(0.2), :curve => 8
144
- para link("Open an App.") { Shoes.show_selector and close }, :margin => 10, :margin_bottom => 4
145
- para link("Package an App.") { Shoes.package_app and close }, :margin => 10, :margin_bottom => 4
146
- para link("Read the Manual.") { Shoes.show_manual and close }, :margin => 10
147
- end
148
- inscription "Alt-Slash opens the console.", :stroke => "#DFA", :align => "center"
149
- end
150
-
151
- animate(10) do |ani|
152
- a = Math.sin(ani * 0.02) * 20
153
- @waves.clear do
154
- background white
155
- y = -30
156
- 16.times do |i|
157
- shape do
158
- move_to x = (-300 - (i*(a*0.8))), y
159
- c = (a + 14) * 0.01
160
- stroke rgb(i * 0.06, c + 0.1, 0.1, 1.0 - (ani * 0.0003))
161
- 4.times do
162
- curve_to x1 + x, (y1-(i*a)) + y, x2 + x, (y2+(i*a)) + y, x3 + x, y3 + y
163
- x += x3
164
- end
165
- end
166
- y += 30
167
- end
168
- end
169
- end
170
- end
171
- end
172
-
173
- def self.make_pack
174
- require 'shoes/pack'
175
- Shoes.app(:width => 500, :height => 380, :resizable => false, &PackMake)
176
- end
177
-
178
- def self.manual_p(str, path)
179
- str.gsub(/\n+\s*/, " ").
180
- gsub(/&/, '&amp;').gsub(/>/, '&gt;').gsub(/>/, '&lt;').gsub(/"/, '&quot;').
181
- gsub(/`(.+?)`/m, '<code>\1</code>').gsub(/\[\[BR\]\]/i, "<br />\n").
182
- gsub(/\^(.+?)\^/m, '\1').
183
- gsub(/'''(.+?)'''/m, '<strong>\1</strong>').gsub(/''(.+?)''/m, '<em>\1</em>').
184
- gsub(/\[\[(http:\/\/\S+?)\]\]/m, '<a href="\1" target="_new">\1</a>').
185
- gsub(/\[\[(http:\/\/\S+?) (.+?)\]\]/m, '<a href="\1" target="_new">\2</a>').
186
- gsub(/\[\[(\S+?)\]\]/m) do
187
- ms, mn = $1.split(".", 2)
188
- if mn
189
- '<a href="' + ms + '.html#' + mn + '">' + mn + '</a>'
190
- else
191
- '<a href="' + ms + '.html">' + ms + '</a>'
192
- end
193
- end.
194
- gsub(/\[\[(\S+?) (.+?)\]\]/m, '<a href="\1.html">\2</a>').
195
- gsub(/\!(\{[^}\n]+\})?([^!\n]+\.\w+)\!/) do
196
- x = "static/#$2"
197
- FileUtils.cp("#{DIR}/#{x}", "#{path}/#{x}") if File.exists? "#{DIR}/#{x}"
198
- '<img src="' + x + '" />'
199
- end
200
- end
201
-
202
- def self.manual_link(sect)
203
- end
204
-
205
- TITLES = {:title => :h1, :subtitle => :h2, :tagline => :h3, :caption => :h4}
206
-
207
- def self.manual_as format, *args
208
- require 'shoes/search'
209
- require 'shoes/help'
210
-
211
- case format
212
- when :shoes
213
- Shoes.app(:width => 720, :height => 640, &Shoes::Help)
214
- else
215
- extend Shoes::Manual
216
- man = self
217
- dir, = args
218
- FileUtils.mkdir_p File.join(dir, 'static')
219
- FileUtils.cp "static/shoes-icon.png", "#{dir}/static"
220
- %w[manual.css code_highlighter.js code_highlighter_ruby.js].
221
- each { |x| FileUtils.cp "static/#{x}", "#{dir}/static" }
222
- html_bits = proc do
223
- proc do |sym, text|
224
- case sym when :intro
225
- div.intro { p { self << man.manual_p(text, dir) } }
226
- when :code
227
- pre { code.rb text.gsub(/^\s*?\n/, '') }
228
- when :colors
229
- color_names = (Shoes::COLORS.keys*"\n").split("\n").sort
230
- color_names.each do |color|
231
- c = Shoes::COLORS[color.intern]
232
- f = c.dark? ? "white" : "black"
233
- div.color(:style => "background: #{c}; color: #{f}") { h3 color; p c }
234
- end
235
- when :index
236
- tree = man.class_tree
237
- shown = []
238
- i = 0
239
- index_p = proc do |k, subs|
240
- unless shown.include? k
241
- i += 1
242
- p "▸ #{k}", :style => "margin-left: #{20*i}px"
243
- subs.uniq.sort.each do |s|
244
- index_p[s, tree[s]]
245
- end if subs
246
- i -= 1
247
- shown << k
248
- end
249
- end
250
- tree.sort.each &index_p
251
- # index_page
252
- when :list
253
- ul { text.each { |x| li { self << man.manual_p(x, dir) } } }
254
- else
255
- send(TITLES[sym] || :p) { self << man.manual_p(text, dir) }
256
- end
257
- end
258
- end
259
-
260
- docs = load_docs(Shoes::Manual::path)
261
- sections = docs.map { |x,| x }
262
-
263
- docn = 1
264
- docs.each do |title1, opt1|
265
- subsect = opt1['sections'].map { |x,| x }
266
- menu = sections.map do |x|
267
- [x, (subsect if x == title1)]
268
- end
269
-
270
- path1 = File.join(dir, title1.gsub(/\W/, ''))
271
- make_html("#{path1}.html", title1, menu) do
272
- h2 "The Shoes Manual"
273
- h1 title1
274
- man.wiki_tokens opt1['description'], true, &instance_eval(&html_bits)
275
- p.next { text "Next: "
276
- a opt1['sections'].first[1]['title'], :href => "#{opt1['sections'].first[0]}.html" }
277
- end
278
-
279
- optn = 1
280
- opt1['sections'].each do |title2, opt2|
281
- path2 = File.join(dir, title2)
282
- make_html("#{path2}.html", opt2['title'], menu) do
283
- h2 "The Shoes Manual"
284
- h1 opt2['title']
285
- man.wiki_tokens opt2['description'], true, &instance_eval(&html_bits)
286
- opt2['methods'].each do |title3, desc3|
287
- sig, val = title3.split(/\s+»\s+/, 2)
288
- aname = sig[/^[^(=]+=?/].gsub(/\s/, '').downcase
289
- a :name => aname
290
- div.method do
291
- a sig, :href => "##{aname}"
292
- text " » #{val}" if val
293
- end
294
- div.sample do
295
- man.wiki_tokens desc3, &instance_eval(&html_bits)
296
- end
297
- end
298
- if opt1['sections'][optn]
299
- p.next { text "Next: "
300
- a opt1['sections'][optn][1]['title'], :href => "#{opt1['sections'][optn][0]}.html" }
301
- elsif docs[docn]
302
- p.next { text "Next: "
303
- a docs[docn][0], :href => "#{docs[docn][0].gsub(/\W/, '')}.html" }
304
- end
305
- optn += 1
306
- end
307
- end
308
-
309
- docn += 1
310
- end
311
- end
312
- end
313
-
314
- def self.show_manual
315
- manual_as :shoes
316
- end
317
-
318
- def self.show_log
319
- require 'shoes/log'
320
- return if @log_app and Shoes.APPS.include? @log_app
321
- @log_app =
322
- Shoes.app do
323
- extend Shoes::LogWindow
324
- setup
325
- end
326
- end
327
-
328
- def self.mount(path, meth, &blk)
329
- @mounts << [path, meth || blk]
330
- end
331
-
332
- SHOES_URL_RE = %r!^@([^/]+)(.*)$!
333
-
334
- def self.run(path)
335
- uri = URI(path)
336
- @mounts.each do |mpath, rout|
337
- m, *args = *path.match(/^#{mpath}$/)
338
- if m
339
- unless rout.is_a? Proc
340
- rout = rout[0].instance_method(rout[1])
341
- end
342
- return [rout, args]
343
- end
344
- end
345
- case uri.path when "/"
346
- [nil]
347
- when SHOES_URL_RE
348
- [proc { eval(URI("http://#$1:53045#$2").read) }]
349
- else
350
- [NotFound]
351
- end
352
- end
353
-
354
- def self.args!
355
- if RUBY_PLATFORM !~ /darwin/ and ARGV.empty?
356
- Shoes.splash
357
- end
358
- OPTS.parse! ARGV
359
- ARGV[0] or true
360
- end
361
-
362
- def self.uri(str)
363
- if str =~ SHOES_URL_RE
364
- URI("http://#$1:53045#$2")
365
- else
366
- URI(str) rescue nil
367
- end
368
- end
369
-
370
- def self.visit(path)
371
- uri = Shoes.uri(path)
372
-
373
- case uri
374
- when URI::HTTP
375
- str = uri.read
376
- if str !~ /Shoes\.app/
377
- Shoes.app do
378
- eval(uri.read)
379
- end
380
- else
381
- eval(uri.read)
382
- end
383
- else
384
- path = File.expand_path(path.gsub(/\\/, "/"))
385
- if path =~ /\.shy$/
386
- @shy = true
387
- require 'shoes/shy'
388
- base = File.basename(path, ".shy")
389
- tmpdir = "%s/shoes-%s.%d" % [Dir.tmpdir, base, $$]
390
- shy = Shy.x(path, tmpdir)
391
- Dir.chdir(tmpdir)
392
- Shoes.debug "Loaded SHY: #{shy.name} #{shy.version} by #{shy.creator}"
393
- path = shy.launch
394
- else
395
- @shy = false
396
- Dir.chdir(File.dirname(path))
397
- path = File.basename(path)
398
- end
399
-
400
- $0.replace path
401
-
402
- code = read_file(path)
403
- eval(code, TOPLEVEL_BINDING, path)
404
- end
405
- rescue SettingUp
406
- rescue Object => e
407
- error(e)
408
- show_log
409
- end
410
-
411
- def self.read_file path
412
- if RUBY_VERSION =~ /^1\.9/ and !@shy
413
- #File.open(path, 'r:utf-8') { |f| f.read }
414
- IO.read(path).force_encoding("UTF-8")
415
- else
416
- File.read(path)
417
- end
418
- end
419
-
420
- def self.url(path, meth)
421
- Shoes.mount(path, [self, meth])
422
- end
423
-
424
- module Basic
425
- def tween opts, &blk
426
- opts = opts.dup
427
-
428
- if opts[:upward]
429
- opts[:top] = self.top - opts.delete(:upward)
430
- elsif opts[:downward]
431
- opts[:top] = self.top + opts.delete(:downward)
432
- end
433
-
434
- if opts[:sideways]
435
- opts[:left] = self.left + opts.delete(:sideways)
436
- end
437
-
438
- @TWEEN.remove if @TWEEN
439
- @TWEEN = parent.animate(opts[:speed] || 20) do
440
-
441
- # figure out a coordinate halfway between here and there
442
- cont = opts.select do |k, v|
443
- if self.respond_to? k
444
- n, o = v, self.send(k)
445
- if n != o
446
- n = o + ((n - o) / 2)
447
- n = v if o == n
448
- self.send("#{k}=", n)
449
- end
450
- self.style[k] != v
451
- end
452
- end
453
-
454
- # if we're there, get rid of the animation
455
- if cont.empty?
456
- @TWEEN.remove
457
- @TWEEN = nil
458
- blk.call if blk
459
- end
460
- end
461
- end
462
- end
463
-
464
- # complete list of styles
465
- BASIC_S = [:left, :top, :right, :bottom, :width, :height, :attach, :hidden,
466
- :displace_left, :displace_top, :margin, :margin_left, :margin_top,
467
- :margin_right, :margin_bottom]
468
- TEXT_S = [:strikecolor, :undercolor, :font, :size, :family, :weight,
469
- :rise, :kerning, :emphasis, :strikethrough, :stretch, :underline,
470
- :variant]
471
- MOUSE_S = [:click, :motion, :release, :hover, :leave]
472
- KEY_S = [:keydown, :keypress, :keyup]
473
- COLOR_S = [:stroke, :fill]
474
-
475
- {Background => [:angle, :radius, :curve, *BASIC_S],
476
- Border => [:angle, :radius, :curve, :strokewidth, *BASIC_S],
477
- Canvas => [:scroll, :start, :finish, *(KEY_S|MOUSE_S|BASIC_S)],
478
- Check => [:click, :checked, *BASIC_S],
479
- Radio => [:click, :checked, :group, *BASIC_S],
480
- EditLine => [:change, :secret, :text, *BASIC_S],
481
- EditBox => [:change, :text, *BASIC_S],
482
- Effect => [:radius, :distance, :inner, *(COLOR_S|BASIC_S)],
483
- Image => MOUSE_S|BASIC_S,
484
- ListBox => [:change, :items, :choose, *BASIC_S],
485
- # Pattern => [:angle, :radius, *BASIC_S],
486
- Progress => BASIC_S,
487
- Shape => COLOR_S|MOUSE_S|BASIC_S,
488
- TextBlock => [:justify, :align, :leading, *(COLOR_S|MOUSE_S|TEXT_S|BASIC_S)],
489
- Text => COLOR_S|MOUSE_S|TEXT_S|BASIC_S}.
490
- each do |klass, styles|
491
- klass.class_eval do
492
- include Basic
493
- styles.each do |m|
494
- case m when *MOUSE_S
495
- else
496
- define_method(m) { style[m] } unless klass.method_defined? m
497
- define_method("#{m}=") { |v| style(m => v) } unless klass.method_defined? "#{m}="
498
- end
499
- end
500
- end
501
- end
502
-
503
- class Types::Widget
504
- @types = {}
505
- def self.inherited subc
506
- methc = subc.to_s[/(^|::)(\w+)$/, 2].
507
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
508
- gsub(/([a-z\d])([A-Z])/,'\1_\2').downcase
509
- @types[methc] = subc
510
- Shoes.class_eval %{
511
- def #{methc}(*a, &b)
512
- a.unshift Widget.instance_variable_get("@types")[#{methc.dump}]
513
- widget(*a, &b)
514
- end
515
- }
516
- end
517
- end
518
- end
519
-
520
- def window(*a, &b)
521
- Shoes.app(*a, &b)
522
- 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
+ ASCII_8BIT = 'ASCII-8BIT'
23
+ end
24
+
25
+ class Range
26
+ def rand
27
+ conv = (Integer === self.end && Integer === self.begin ? :to_i : :to_f)
28
+ ((Kernel.rand * (self.end - self.begin)) + self.begin).send(conv)
29
+ end
30
+ end
31
+
32
+ unless Time.respond_to? :today
33
+ def Time.today
34
+ t = Time.now
35
+ t - (t.to_i % 86400)
36
+ end
37
+ end
38
+
39
+ class Shoes
40
+ RELEASES = %w[Curious Raisins Policeman]
41
+
42
+ NotFound = proc do
43
+ para "404 NOT FOUND, GUYS!"
44
+ end
45
+
46
+ class << self; attr_accessor :locale, :language end
47
+ @locale = ENV["SHOES_LANG"] || ENV["LC_MESSAGES"] || ENV["LC_ALL"] || ENV["LANG"] || "C"
48
+ @language = @locale[/^(\w{2})_/, 1] || "en"
49
+
50
+ @mounts = []
51
+
52
+ OPTS = OptionParser.new do |opts|
53
+ opts.banner = "Usage: shoes [options] (app.rb or app.shy)"
54
+
55
+ opts.on("-m", "--manual",
56
+ "Open the built-in manual.") do
57
+ show_manual
58
+ end
59
+
60
+ opts.on("-p", "--package",
61
+ "Package a Shoes app for Windows, OS X and Linux.") do |s|
62
+ make_pack
63
+ end
64
+
65
+ opts.on("-g", "--gem",
66
+ "Passes commands to RubyGems.") do
67
+ require 'shoes/setup'
68
+ require 'rubygems/gem_runner'
69
+ Gem::GemRunner.new.run(ARGV)
70
+ raise SystemExit, ""
71
+ end
72
+
73
+ opts.on("--manual-html DIRECTORY", "Saves the manual to a directory as HTML.") do |dir|
74
+ manual_as :html, dir
75
+ raise SystemExit, "HTML manual in: #{dir}"
76
+ end
77
+
78
+ opts.on("--install MODE SRC DEST", "Installs a file.") do |mode|
79
+ src, dest = ARGV
80
+ FileUtils.install src, dest, :mode => mode.to_i(8), :preserve => true
81
+ raise SystemExit, ""
82
+ end
83
+
84
+ opts.on_tail("-v", "--version", "Display the version info.") do
85
+ raise SystemExit, File.read("#{DIR}/VERSION.txt").strip
86
+ end
87
+
88
+ opts.on_tail("-h", "--help", "Show this message") do
89
+ raise SystemExit, opts.to_s
90
+ end
91
+ end
92
+
93
+ class SettingUp < StandardError; end
94
+
95
+ @setups = {}
96
+
97
+ def self.setup &blk
98
+ require 'shoes/setup'
99
+ line = caller[0]
100
+ return if @setups[line]
101
+ script = line[/^(.+?):/, 1]
102
+ set = Shoes::Setup.new(script, &blk)
103
+ @setups[line] = true
104
+ unless set.no_steps?
105
+ raise SettingUp
106
+ end
107
+ end
108
+
109
+ def self.show_selector
110
+ fname = ask_open_file
111
+ Shoes.visit(fname) if fname
112
+ end
113
+
114
+ def self.package_app
115
+ fname = ask_open_file
116
+ return false unless fname
117
+ start_shy_builder fname
118
+ end
119
+
120
+ def self.splash
121
+ font "#{DIR}/fonts/Lacuna.ttf"
122
+ Shoes.app :width => 400, :height => 300, :resizable => false do
123
+ style(Para, :align => "center", :weight => "bold", :font => "Lacuna Regular", :size => 13)
124
+ style(Link, :stroke => yellow, :underline => nil)
125
+ style(LinkHover, :stroke => yellow, :fill => nil)
126
+
127
+ x1 = 77; y1 = 122
128
+ x2 = 148; y2 = -122
129
+ x3 = 245; y3 = 0
130
+
131
+ nofill
132
+ strokewidth 40.0
133
+
134
+ @waves = stack :top => 0, :left => 0
135
+
136
+ require 'shoes/search'
137
+ require 'shoes/help'
138
+
139
+ stack :margin => 18 do
140
+ para "Welcome to", :stroke => "#DFA", :margin => 0
141
+ para "SHOES", :size => 48, :stroke => "#DFA", :margin_top => 0
142
+ stack do
143
+ background black(0.2), :curve => 8
144
+ para link("Open an App.") { Shoes.show_selector and close }, :margin => 10, :margin_bottom => 4
145
+ para link("Package an App.") { Shoes.package_app and close }, :margin => 10, :margin_bottom => 4
146
+ para link("Read the Manual.") { Shoes.show_manual and close }, :margin => 10
147
+ end
148
+ inscription "Alt-Slash opens the console.", :stroke => "#DFA", :align => "center"
149
+ end
150
+
151
+ animate(10) do |ani|
152
+ a = Math.sin(ani * 0.02) * 20
153
+ @waves.clear do
154
+ background white
155
+ y = -30
156
+ 16.times do |i|
157
+ shape do
158
+ move_to x = (-300 - (i*(a*0.8))), y
159
+ c = (a + 14) * 0.01
160
+ stroke rgb(i * 0.06, c + 0.1, 0.1, 1.0 - (ani * 0.0003))
161
+ 4.times do
162
+ curve_to x1 + x, (y1-(i*a)) + y, x2 + x, (y2+(i*a)) + y, x3 + x, y3 + y
163
+ x += x3
164
+ end
165
+ end
166
+ y += 30
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
172
+
173
+ def self.make_pack
174
+ require 'shoes/pack'
175
+ Shoes.app(:width => 500, :height => 380, :resizable => false, &PackMake)
176
+ end
177
+
178
+ def self.manual_p(str, path)
179
+ str.gsub(/\n+\s*/, " ").
180
+ gsub(/&/, '&amp;').gsub(/>/, '&gt;').gsub(/>/, '&lt;').gsub(/"/, '&quot;').
181
+ gsub(/`(.+?)`/m, '<code>\1</code>').gsub(/\[\[BR\]\]/i, "<br />\n").
182
+ gsub(/\^(.+?)\^/m, '\1').
183
+ gsub(/'''(.+?)'''/m, '<strong>\1</strong>').gsub(/''(.+?)''/m, '<em>\1</em>').
184
+ gsub(/\[\[(http:\/\/\S+?)\]\]/m, '<a href="\1" target="_new">\1</a>').
185
+ gsub(/\[\[(http:\/\/\S+?) (.+?)\]\]/m, '<a href="\1" target="_new">\2</a>').
186
+ gsub(/\[\[(\S+?)\]\]/m) do
187
+ ms, mn = $1.split(".", 2)
188
+ if mn
189
+ '<a href="' + ms + '.html#' + mn + '">' + mn + '</a>'
190
+ else
191
+ '<a href="' + ms + '.html">' + ms + '</a>'
192
+ end
193
+ end.
194
+ gsub(/\[\[(\S+?) (.+?)\]\]/m, '<a href="\1.html">\2</a>').
195
+ gsub(/\!(\{[^}\n]+\})?([^!\n]+\.\w+)\!/) do
196
+ x = "static/#$2"
197
+ FileUtils.cp("#{DIR}/#{x}", "#{path}/#{x}") if File.exists? "#{DIR}/#{x}"
198
+ '<img src="' + x + '" />'
199
+ end
200
+ end
201
+
202
+ def self.manual_link(sect)
203
+ end
204
+
205
+ TITLES = {:title => :h1, :subtitle => :h2, :tagline => :h3, :caption => :h4}
206
+
207
+ def self.manual_as format, *args
208
+ require 'shoes/search'
209
+ require 'shoes/help'
210
+
211
+ case format
212
+ when :shoes
213
+ Shoes.app(:width => 720, :height => 640, &Shoes::Help)
214
+ else
215
+ extend Shoes::Manual
216
+ man = self
217
+ dir, = args
218
+ FileUtils.mkdir_p File.join(dir, 'static')
219
+ FileUtils.cp "static/shoes-icon.png", "#{dir}/static"
220
+ %w[manual.css code_highlighter.js code_highlighter_ruby.js].
221
+ each { |x| FileUtils.cp "static/#{x}", "#{dir}/static" }
222
+ html_bits = proc do
223
+ proc do |sym, text|
224
+ case sym when :intro
225
+ div.intro { p { self << man.manual_p(text, dir) } }
226
+ when :code
227
+ pre { code.rb text.gsub(/^\s*?\n/, '') }
228
+ when :colors
229
+ color_names = (Shoes::COLORS.keys*"\n").split("\n").sort
230
+ color_names.each do |color|
231
+ c = Shoes::COLORS[color.intern]
232
+ f = c.dark? ? "white" : "black"
233
+ div.color(:style => "background: #{c}; color: #{f}") { h3 color; p c }
234
+ end
235
+ when :index
236
+ tree = man.class_tree
237
+ shown = []
238
+ i = 0
239
+ index_p = proc do |k, subs|
240
+ unless shown.include? k
241
+ i += 1
242
+ p "▸ #{k}", :style => "margin-left: #{20*i}px"
243
+ subs.uniq.sort.each do |s|
244
+ index_p[s, tree[s]]
245
+ end if subs
246
+ i -= 1
247
+ shown << k
248
+ end
249
+ end
250
+ tree.sort.each &index_p
251
+ # index_page
252
+ when :list
253
+ ul { text.each { |x| li { self << man.manual_p(x, dir) } } }
254
+ else
255
+ send(TITLES[sym] || :p) { self << man.manual_p(text, dir) }
256
+ end
257
+ end
258
+ end
259
+
260
+ docs = load_docs(Shoes::Manual::path)
261
+ sections = docs.map { |x,| x }
262
+
263
+ docn = 1
264
+ docs.each do |title1, opt1|
265
+ subsect = opt1['sections'].map { |x,| x }
266
+ menu = sections.map do |x|
267
+ [x, (subsect if x == title1)]
268
+ end
269
+
270
+ path1 = File.join(dir, title1.gsub(/\W/, ''))
271
+ make_html("#{path1}.html", title1, menu) do
272
+ h2 "The Shoes Manual"
273
+ h1 title1
274
+ man.wiki_tokens opt1['description'], true, &instance_eval(&html_bits)
275
+ p.next { text "Next: "
276
+ a opt1['sections'].first[1]['title'], :href => "#{opt1['sections'].first[0]}.html" }
277
+ end
278
+
279
+ optn = 1
280
+ opt1['sections'].each do |title2, opt2|
281
+ path2 = File.join(dir, title2)
282
+ make_html("#{path2}.html", opt2['title'], menu) do
283
+ h2 "The Shoes Manual"
284
+ h1 opt2['title']
285
+ man.wiki_tokens opt2['description'], true, &instance_eval(&html_bits)
286
+ opt2['methods'].each do |title3, desc3|
287
+ sig, val = title3.split(/\s+»\s+/, 2)
288
+ aname = sig[/^[^(=]+=?/].gsub(/\s/, '').downcase
289
+ a :name => aname
290
+ div.method do
291
+ a sig, :href => "##{aname}"
292
+ text " » #{val}" if val
293
+ end
294
+ div.sample do
295
+ man.wiki_tokens desc3, &instance_eval(&html_bits)
296
+ end
297
+ end
298
+ if opt1['sections'][optn]
299
+ p.next { text "Next: "
300
+ a opt1['sections'][optn][1]['title'], :href => "#{opt1['sections'][optn][0]}.html" }
301
+ elsif docs[docn]
302
+ p.next { text "Next: "
303
+ a docs[docn][0], :href => "#{docs[docn][0].gsub(/\W/, '')}.html" }
304
+ end
305
+ optn += 1
306
+ end
307
+ end
308
+
309
+ docn += 1
310
+ end
311
+ end
312
+ end
313
+
314
+ def self.show_manual
315
+ manual_as :shoes
316
+ end
317
+
318
+ def self.show_log
319
+ require 'shoes/log'
320
+ return if @log_app and Shoes.APPS.include? @log_app
321
+ @log_app =
322
+ Shoes.app do
323
+ extend Shoes::LogWindow
324
+ setup
325
+ end
326
+ end
327
+
328
+ def self.mount(path, meth, &blk)
329
+ @mounts << [path, meth || blk]
330
+ end
331
+
332
+ SHOES_URL_RE = %r!^@([^/]+)(.*)$!
333
+
334
+ def self.run(path)
335
+ uri = URI(path)
336
+ @mounts.each do |mpath, rout|
337
+ m, *args = *path.match(/^#{mpath}$/)
338
+ if m
339
+ unless rout.is_a? Proc
340
+ rout = rout[0].instance_method(rout[1])
341
+ end
342
+ return [rout, args]
343
+ end
344
+ end
345
+ case uri.path when "/"
346
+ [nil]
347
+ when SHOES_URL_RE
348
+ [proc { eval(URI("http://#$1:53045#$2").read) }]
349
+ else
350
+ [NotFound]
351
+ end
352
+ end
353
+
354
+ def self.args!
355
+ if RUBY_PLATFORM !~ /darwin/ and ARGV.empty?
356
+ Shoes.splash
357
+ end
358
+ OPTS.parse! ARGV
359
+ ARGV[0] or true
360
+ end
361
+
362
+ def self.uri(str)
363
+ if str =~ SHOES_URL_RE
364
+ URI("http://#$1:53045#$2")
365
+ else
366
+ URI(str) rescue nil
367
+ end
368
+ end
369
+
370
+ def self.visit(path)
371
+ uri = Shoes.uri(path)
372
+
373
+ case uri
374
+ when URI::HTTP
375
+ str = uri.read
376
+ if str !~ /Shoes\.app/
377
+ Shoes.app do
378
+ eval(uri.read)
379
+ end
380
+ else
381
+ eval(uri.read)
382
+ end
383
+ else
384
+ path = File.expand_path(path.gsub(/\\/, "/"))
385
+ if path =~ /\.shy$/
386
+ @shy = true
387
+ require 'shoes/shy'
388
+ base = File.basename(path, ".shy")
389
+ tmpdir = "%s/shoes-%s.%d" % [Dir.tmpdir, base, $$]
390
+ shy = Shy.x(path, tmpdir)
391
+ Dir.chdir(tmpdir)
392
+ Shoes.debug "Loaded SHY: #{shy.name} #{shy.version} by #{shy.creator}"
393
+ path = shy.launch
394
+ else
395
+ @shy = false
396
+ Dir.chdir(File.dirname(path))
397
+ path = File.basename(path)
398
+ end
399
+
400
+ $0.replace path
401
+
402
+ code = read_file(path)
403
+ eval(code, TOPLEVEL_BINDING, path)
404
+ end
405
+ rescue SettingUp
406
+ rescue Object => e
407
+ error(e)
408
+ show_log
409
+ end
410
+
411
+ def self.read_file path
412
+ if RUBY_VERSION =~ /^1\.9/ and !@shy
413
+ #File.open(path, 'r:utf-8') { |f| f.read }
414
+ IO.read(path).force_encoding("UTF-8")
415
+ else
416
+ File.read(path)
417
+ end
418
+ end
419
+
420
+ def self.url(path, meth)
421
+ Shoes.mount(path, [self, meth])
422
+ end
423
+
424
+ module Basic
425
+ def tween opts, &blk
426
+ opts = opts.dup
427
+
428
+ if opts[:upward]
429
+ opts[:top] = self.top - opts.delete(:upward)
430
+ elsif opts[:downward]
431
+ opts[:top] = self.top + opts.delete(:downward)
432
+ end
433
+
434
+ if opts[:sideways]
435
+ opts[:left] = self.left + opts.delete(:sideways)
436
+ end
437
+
438
+ @TWEEN.remove if @TWEEN
439
+ @TWEEN = parent.animate(opts[:speed] || 20) do
440
+
441
+ # figure out a coordinate halfway between here and there
442
+ cont = opts.select do |k, v|
443
+ if self.respond_to? k
444
+ n, o = v, self.send(k)
445
+ if n != o
446
+ n = o + ((n - o) / 2)
447
+ n = v if o == n
448
+ self.send("#{k}=", n)
449
+ end
450
+ self.style[k] != v
451
+ end
452
+ end
453
+
454
+ # if we're there, get rid of the animation
455
+ if cont.empty?
456
+ @TWEEN.remove
457
+ @TWEEN = nil
458
+ blk.call if blk
459
+ end
460
+ end
461
+ end
462
+ end
463
+
464
+ # complete list of styles
465
+ BASIC_S = [:left, :top, :right, :bottom, :width, :height, :attach, :hidden,
466
+ :displace_left, :displace_top, :margin, :margin_left, :margin_top,
467
+ :margin_right, :margin_bottom]
468
+ TEXT_S = [:strikecolor, :undercolor, :font, :size, :family, :weight,
469
+ :rise, :kerning, :emphasis, :strikethrough, :stretch, :underline,
470
+ :variant]
471
+ MOUSE_S = [:click, :motion, :release, :hover, :leave]
472
+ KEY_S = [:keydown, :keypress, :keyup]
473
+ COLOR_S = [:stroke, :fill]
474
+
475
+ {Background => [:angle, :radius, :curve, *BASIC_S],
476
+ Border => [:angle, :radius, :curve, :strokewidth, *BASIC_S],
477
+ Canvas => [:scroll, :start, :finish, *(KEY_S|MOUSE_S|BASIC_S)],
478
+ Check => [:click, :checked, *BASIC_S],
479
+ Radio => [:click, :checked, :group, *BASIC_S],
480
+ EditLine => [:change, :secret, :text, *BASIC_S],
481
+ EditBox => [:change, :text, *BASIC_S],
482
+ Effect => [:radius, :distance, :inner, *(COLOR_S|BASIC_S)],
483
+ Image => MOUSE_S|BASIC_S,
484
+ ListBox => [:change, :items, :choose, *BASIC_S],
485
+ # Pattern => [:angle, :radius, *BASIC_S],
486
+ Progress => BASIC_S,
487
+ Shape => COLOR_S|MOUSE_S|BASIC_S,
488
+ TextBlock => [:justify, :align, :leading, *(COLOR_S|MOUSE_S|TEXT_S|BASIC_S)],
489
+ Text => COLOR_S|MOUSE_S|TEXT_S|BASIC_S}.
490
+ each do |klass, styles|
491
+ klass.class_eval do
492
+ include Basic
493
+ styles.each do |m|
494
+ case m when *MOUSE_S
495
+ else
496
+ define_method(m) { style[m] } unless klass.method_defined? m
497
+ define_method("#{m}=") { |v| style(m => v) } unless klass.method_defined? "#{m}="
498
+ end
499
+ end
500
+ end
501
+ end
502
+
503
+ class Types::Widget
504
+ @types = {}
505
+ def self.inherited subc
506
+ methc = subc.to_s[/(^|::)(\w+)$/, 2].
507
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
508
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').downcase
509
+ @types[methc] = subc
510
+ Shoes.class_eval %{
511
+ def #{methc}(*a, &b)
512
+ a.unshift Widget.instance_variable_get("@types")[#{methc.dump}]
513
+ widget(*a, &b)
514
+ end
515
+ }
516
+ end
517
+ end
518
+ end
519
+
520
+ def window(*a, &b)
521
+ Shoes.app(*a, &b)
522
+ end