shoes 4.0.0.pre2 → 4.0.0.pre3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (311) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -21
  3. metadata +18 -337
  4. data/CHANGELOG +0 -84
  5. data/Gemfile +0 -24
  6. data/Guardfile +0 -11
  7. data/Rakefile +0 -14
  8. data/app.yaml +0 -60
  9. data/benchmark/app_clear.rb +0 -21
  10. data/benchmark/clear.rb +0 -69
  11. data/benchmark/memory/text_dispose.rb +0 -9
  12. data/benchmark/para_creator.rb +0 -9
  13. data/benchmark/paras.rb +0 -52
  14. data/benchmark/urls.rb +0 -40
  15. data/bin/ruby-shoes +0 -6
  16. data/bin/shoes-guard +0 -8
  17. data/bin/shoes-stub +0 -59
  18. data/ext/install/Rakefile +0 -29
  19. data/ext/install/shoes.bat +0 -9
  20. data/lib/shoes.rb +0 -5
  21. data/lib/shoes/ui/cli.rb +0 -102
  22. data/lib/shoes/ui/help.rb +0 -535
  23. data/lib/shoes/ui/manual.rb +0 -6
  24. data/lib/shoes/version.rb +0 -3
  25. data/manifests/common.rb +0 -34
  26. data/manifests/shoes.rb +0 -44
  27. data/samples/Gemfile +0 -3
  28. data/samples/Gemfile.lock +0 -35
  29. data/samples/README +0 -97
  30. data/samples/boom.rb +0 -239
  31. data/samples/class-book-adjusted.rb +0 -45
  32. data/samples/class-book.rb +0 -43
  33. data/samples/class-book.yaml +0 -387
  34. data/samples/clicky.rb +0 -24
  35. data/samples/cy.png +0 -0
  36. data/samples/expert-definr.rb +0 -23
  37. data/samples/expert-funnies.rb +0 -60
  38. data/samples/expert-game-of-life-adjusted.rb +0 -249
  39. data/samples/expert-game-of-life.rb +0 -243
  40. data/samples/expert-irb-adjusted.rb +0 -110
  41. data/samples/expert-irb.rb +0 -112
  42. data/samples/expert-minesweeper-adjusted.rb +0 -272
  43. data/samples/expert-minesweeper.rb +0 -267
  44. data/samples/expert-othello-adjusted.rb +0 -325
  45. data/samples/expert-othello.rb +0 -318
  46. data/samples/expert-pong.rb +0 -62
  47. data/samples/expert-snake.rb +0 -78
  48. data/samples/expert-tankspank.rb +0 -385
  49. data/samples/flow.rb +0 -63
  50. data/samples/good-arc.rb +0 -45
  51. data/samples/good-clock.rb +0 -51
  52. data/samples/good-displace.rb +0 -98
  53. data/samples/good-follow.rb +0 -26
  54. data/samples/good-potato-chopping.rb +0 -22
  55. data/samples/good-reminder.rb +0 -174
  56. data/samples/good-vjot.rb +0 -58
  57. data/samples/gray.rb +0 -11
  58. data/samples/loogink.png +0 -0
  59. data/samples/nks_booklist.rb +0 -24
  60. data/samples/nks_breadsticks.rb +0 -7
  61. data/samples/nks_dancing_circle.rb +0 -13
  62. data/samples/nks_dictionary.rb +0 -23
  63. data/samples/nks_edit_box.rb +0 -4
  64. data/samples/nks_edit_line.rb +0 -6
  65. data/samples/nks_notes.rb +0 -16
  66. data/samples/nks_poem.rb +0 -22
  67. data/samples/nks_self.rb +0 -6
  68. data/samples/nks_text_sizes.rb +0 -10
  69. data/samples/nks_trurl.rb +0 -5
  70. data/samples/original-manual-adjusted.rb +0 -475
  71. data/samples/original-manual.rb +0 -472
  72. data/samples/packaging/package_me.rb +0 -6
  73. data/samples/potato_chopping/1258_s001.gif +0 -0
  74. data/samples/potato_chopping/1258_s002.gif +0 -0
  75. data/samples/potato_chopping/1258_s003.gif +0 -0
  76. data/samples/potato_chopping/1258_s004.gif +0 -0
  77. data/samples/potato_chopping/1258_s005.gif +0 -0
  78. data/samples/potato_chopping/1258_s006.gif +0 -0
  79. data/samples/potato_chopping/1258_s007.gif +0 -0
  80. data/samples/potato_chopping/1258_s008.gif +0 -0
  81. data/samples/potato_chopping/1258_s009.gif +0 -0
  82. data/samples/potato_chopping/1258_s010.gif +0 -0
  83. data/samples/potato_chopping/1258_s011.gif +0 -0
  84. data/samples/potato_chopping/1258_s012.gif +0 -0
  85. data/samples/potato_chopping/1258_s013.gif +0 -0
  86. data/samples/potato_chopping/1258_s014.gif +0 -0
  87. data/samples/potato_chopping/1258_s015.gif +0 -0
  88. data/samples/potato_chopping/1258_s016.gif +0 -0
  89. data/samples/potato_chopping/1258_s017.gif +0 -0
  90. data/samples/potato_chopping/1258_s018.gif +0 -0
  91. data/samples/potato_chopping/1258_s019.gif +0 -0
  92. data/samples/potato_chopping/1258_s020.gif +0 -0
  93. data/samples/potato_chopping/1258_s021.gif +0 -0
  94. data/samples/potato_chopping/1258_s022.gif +0 -0
  95. data/samples/potato_chopping/1258_s023.gif +0 -0
  96. data/samples/potato_chopping/1258_s024.gif +0 -0
  97. data/samples/potato_chopping/1258_s025.gif +0 -0
  98. data/samples/potato_chopping/1258_s026.gif +0 -0
  99. data/samples/potato_chopping/1258_s027.gif +0 -0
  100. data/samples/potato_chopping/1258_s028.gif +0 -0
  101. data/samples/potato_chopping/1258_s029.gif +0 -0
  102. data/samples/potato_chopping/1258_s030.gif +0 -0
  103. data/samples/potato_chopping/1258_s031.gif +0 -0
  104. data/samples/potato_chopping/1258_s032.gif +0 -0
  105. data/samples/potato_chopping/1258_s033.gif +0 -0
  106. data/samples/potato_chopping/1258_s034.gif +0 -0
  107. data/samples/potato_chopping/1258_s035.gif +0 -0
  108. data/samples/potato_chopping/1258_s036.gif +0 -0
  109. data/samples/potato_chopping/1258_s037.gif +0 -0
  110. data/samples/potato_chopping/1258_s038.gif +0 -0
  111. data/samples/potato_chopping/1258_s039.gif +0 -0
  112. data/samples/potato_chopping/1258_s040.gif +0 -0
  113. data/samples/potato_chopping/1258_s041.gif +0 -0
  114. data/samples/potato_chopping/1258_s042.gif +0 -0
  115. data/samples/potato_chopping/1258_s043.gif +0 -0
  116. data/samples/potato_chopping/1258_s044.gif +0 -0
  117. data/samples/potato_chopping/1258_s045.gif +0 -0
  118. data/samples/potato_chopping/1258_s046.gif +0 -0
  119. data/samples/potato_chopping/1258_s047.gif +0 -0
  120. data/samples/potato_chopping/1258_s048.gif +0 -0
  121. data/samples/potato_chopping/1258_s049.gif +0 -0
  122. data/samples/potato_chopping/1258_s050.gif +0 -0
  123. data/samples/potato_chopping/1258_s051.gif +0 -0
  124. data/samples/potato_chopping/1258_s052.gif +0 -0
  125. data/samples/potato_chopping/1258_s053.gif +0 -0
  126. data/samples/potato_chopping/1258_s054.gif +0 -0
  127. data/samples/potato_chopping/1258_s055.gif +0 -0
  128. data/samples/potato_chopping/1258_s056.gif +0 -0
  129. data/samples/potato_chopping/1258_s057.gif +0 -0
  130. data/samples/potato_chopping/1258_s058.gif +0 -0
  131. data/samples/potato_chopping/1258_s059.gif +0 -0
  132. data/samples/present.rb +0 -27
  133. data/samples/progress.rb +0 -10
  134. data/samples/sample1.rb +0 -30
  135. data/samples/sample12.rb +0 -21
  136. data/samples/sample13.rb +0 -13
  137. data/samples/sample14.rb +0 -64
  138. data/samples/sample15.rb +0 -18
  139. data/samples/sample16.rb +0 -10
  140. data/samples/sample17.rb +0 -10
  141. data/samples/sample2.rb +0 -14
  142. data/samples/sample21.rb +0 -5
  143. data/samples/sample23.rb +0 -8
  144. data/samples/sample24.rb +0 -21
  145. data/samples/sample27.rb +0 -18
  146. data/samples/sample3.rb +0 -14
  147. data/samples/sample31.rb +0 -22
  148. data/samples/sample34.rb +0 -27
  149. data/samples/sample35.rb +0 -32
  150. data/samples/sample37.rb +0 -8
  151. data/samples/sample4.rb +0 -7
  152. data/samples/sample42.rb +0 -14
  153. data/samples/sample45.rb +0 -11
  154. data/samples/sample56.rb +0 -10
  155. data/samples/sample6.rb +0 -9
  156. data/samples/sample7.rb +0 -3
  157. data/samples/sample8.rb +0 -7
  158. data/samples/sample9.rb +0 -10
  159. data/samples/simple-accordion.rb +0 -75
  160. data/samples/simple-anim-shapes.rb +0 -17
  161. data/samples/simple-anim-text.rb +0 -13
  162. data/samples/simple-animate.rb +0 -12
  163. data/samples/simple-arc.rb +0 -23
  164. data/samples/simple-bounce.rb +0 -24
  165. data/samples/simple-brightness-transitions.rb +0 -8
  166. data/samples/simple-button-animate.rb +0 -16
  167. data/samples/simple-calc-2.rb +0 -34
  168. data/samples/simple-calc.rb +0 -70
  169. data/samples/simple-color-selector.rb +0 -10
  170. data/samples/simple-color-transitions.rb +0 -11
  171. data/samples/simple-control-sizes.rb +0 -24
  172. data/samples/simple-curve.rb +0 -26
  173. data/samples/simple-dialogs-outside.rb +0 -12
  174. data/samples/simple-dialogs.rb +0 -32
  175. data/samples/simple-displace.rb +0 -15
  176. data/samples/simple-downloader.rb +0 -27
  177. data/samples/simple-draw.rb +0 -13
  178. data/samples/simple-editor.rb +0 -28
  179. data/samples/simple-face.rb +0 -14
  180. data/samples/simple-flow-wrap.rb +0 -11
  181. data/samples/simple-font.rb +0 -17
  182. data/samples/simple-form.rb +0 -29
  183. data/samples/simple-form.shy +0 -0
  184. data/samples/simple-fullscreen.rb +0 -4
  185. data/samples/simple-guess-game.rb +0 -28
  186. data/samples/simple-keypress.rb +0 -14
  187. data/samples/simple-manual.rb +0 -2
  188. data/samples/simple-mask.rb +0 -21
  189. data/samples/simple-menu.rb +0 -47
  190. data/samples/simple-mouse-follow.rb +0 -8
  191. data/samples/simple-move.rb +0 -13
  192. data/samples/simple-oval.rb +0 -3
  193. data/samples/simple-sample-executor.rb +0 -6
  194. data/samples/simple-shoes-intro.rb +0 -22
  195. data/samples/simple-slide.rb +0 -56
  196. data/samples/simple-sound.rb +0 -30
  197. data/samples/simple-sphere.rb +0 -28
  198. data/samples/simple-stripes.rb +0 -8
  199. data/samples/simple-tictactoe.rb +0 -238
  200. data/samples/simple-timer.rb +0 -15
  201. data/samples/simple-video.rb +0 -13
  202. data/samples/simple-visibility.rb +0 -11
  203. data/samples/simple-widget.rb +0 -9
  204. data/samples/sounds/102719__sarge4267__explosion.mp3 +0 -0
  205. data/samples/sounds/145622__andybrannan__train-fog-horn-long-wyomming.aiff +0 -0
  206. data/samples/sounds/46492__phreaksaccount__shields1.ogg +0 -0
  207. data/samples/sounds/61847__simon-rue__boink-v3.wav +0 -0
  208. data/samples/swt-raw.rb +0 -20
  209. data/samples/troll.rb +0 -22
  210. data/shoes.gemspec +0 -29
  211. data/snapshots/sample1.png +0 -0
  212. data/snapshots/sample10.png +0 -0
  213. data/snapshots/sample11.png +0 -0
  214. data/snapshots/sample12.png +0 -0
  215. data/snapshots/sample13.png +0 -0
  216. data/snapshots/sample14.png +0 -0
  217. data/snapshots/sample15.png +0 -0
  218. data/snapshots/sample16.png +0 -0
  219. data/snapshots/sample17.png +0 -0
  220. data/snapshots/sample18.png +0 -0
  221. data/snapshots/sample19.png +0 -0
  222. data/snapshots/sample2.png +0 -0
  223. data/snapshots/sample20.png +0 -0
  224. data/snapshots/sample21.png +0 -0
  225. data/snapshots/sample22.png +0 -0
  226. data/snapshots/sample23.png +0 -0
  227. data/snapshots/sample24.png +0 -0
  228. data/snapshots/sample27.png +0 -0
  229. data/snapshots/sample28.png +0 -0
  230. data/snapshots/sample29.png +0 -0
  231. data/snapshots/sample3.png +0 -0
  232. data/snapshots/sample30.png +0 -0
  233. data/snapshots/sample31.png +0 -0
  234. data/snapshots/sample34.png +0 -0
  235. data/snapshots/sample35.png +0 -0
  236. data/snapshots/sample36.png +0 -0
  237. data/snapshots/sample37.png +0 -0
  238. data/snapshots/sample4.png +0 -0
  239. data/snapshots/sample42.png +0 -0
  240. data/snapshots/sample44.png +0 -0
  241. data/snapshots/sample45.png +0 -0
  242. data/snapshots/sample46.png +0 -0
  243. data/snapshots/sample5.png +0 -0
  244. data/snapshots/sample56.png +0 -0
  245. data/snapshots/sample6.png +0 -0
  246. data/snapshots/sample7.png +0 -0
  247. data/snapshots/sample8.png +0 -0
  248. data/snapshots/sample9.png +0 -0
  249. data/snapshots/sample99.png +0 -0
  250. data/static/PKGBUILD +0 -47
  251. data/static/Shoes.icns +0 -0
  252. data/static/avatar.png +0 -0
  253. data/static/code_highlighter.js +0 -188
  254. data/static/code_highlighter_ruby.js +0 -26
  255. data/static/downloading.png +0 -0
  256. data/static/icon-debug.png +0 -0
  257. data/static/icon-error.png +0 -0
  258. data/static/icon-info.png +0 -0
  259. data/static/icon-warn.png +0 -0
  260. data/static/listbox_button1.png +0 -0
  261. data/static/listbox_button2.png +0 -0
  262. data/static/man-app.png +0 -0
  263. data/static/man-builds.png +0 -0
  264. data/static/man-builds1.png +0 -0
  265. data/static/man-editor-notepad.png +0 -0
  266. data/static/man-editor-osx.png +0 -0
  267. data/static/man-ele-background.png +0 -0
  268. data/static/man-ele-border.png +0 -0
  269. data/static/man-ele-button.png +0 -0
  270. data/static/man-ele-check.png +0 -0
  271. data/static/man-ele-editbox.png +0 -0
  272. data/static/man-ele-editline.png +0 -0
  273. data/static/man-ele-image.png +0 -0
  274. data/static/man-ele-listbox.png +0 -0
  275. data/static/man-ele-progress.png +0 -0
  276. data/static/man-ele-radio.png +0 -0
  277. data/static/man-ele-shape.png +0 -0
  278. data/static/man-ele-textblock.png +0 -0
  279. data/static/man-ele-video.png +0 -0
  280. data/static/man-intro-dmg.png +0 -0
  281. data/static/man-intro-exe.png +0 -0
  282. data/static/man-look-tiger.png +0 -0
  283. data/static/man-look-ubuntu.png +0 -0
  284. data/static/man-look-vista.png +0 -0
  285. data/static/man-run-osx.png +0 -0
  286. data/static/man-run-vista.png +0 -0
  287. data/static/man-run-xp.png +0 -0
  288. data/static/man-shot1.png +0 -0
  289. data/static/manual-en.txt +0 -3531
  290. data/static/manual-ja.txt +0 -2829
  291. data/static/manual.css +0 -184
  292. data/static/menu-corner1.png +0 -0
  293. data/static/menu-corner2.png +0 -0
  294. data/static/menu-gray.png +0 -0
  295. data/static/menu-left.png +0 -0
  296. data/static/menu-right.png +0 -0
  297. data/static/menu-top.png +0 -0
  298. data/static/shoes-dmg.jpg +0 -0
  299. data/static/shoes-icon-blue.png +0 -0
  300. data/static/shoes-icon-brown.png +0 -0
  301. data/static/shoes-icon.png +0 -0
  302. data/static/shoes-manual-apps.gif +0 -0
  303. data/static/shoes-manual-apps.png +0 -0
  304. data/static/shoes_main_window.png +0 -0
  305. data/static/stripe.png +0 -0
  306. data/static/tutor-back.png +0 -0
  307. data/tasks/changelog.rb +0 -92
  308. data/tasks/gem.rb +0 -38
  309. data/tasks/rspec.rb +0 -106
  310. data/tasks/sample.rb +0 -66
  311. data/tasks/yard.rb +0 -13
@@ -1,472 +0,0 @@
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
-
469
- Shoes::Help = Shoes.make_help_page
470
-
471
- # added to start the app, was Shoes.manual_as :shoes
472
- Shoes.app(:width => 720, :height => 640, &Shoes::Help)