redcar-dev 0.12.17dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (655) hide show
  1. data/CHANGES +664 -0
  2. data/LICENSE +32 -0
  3. data/README.md +119 -0
  4. data/Rakefile +283 -0
  5. data/bin/redcar +29 -0
  6. data/lib/redcar.rb +307 -0
  7. data/lib/redcar/installer.rb +178 -0
  8. data/lib/redcar/instance_exec.rb +25 -0
  9. data/lib/redcar/logger.rb +64 -0
  10. data/lib/redcar/plist.rb +83 -0
  11. data/lib/redcar/ruby_extensions.rb +201 -0
  12. data/lib/redcar/runner.rb +130 -0
  13. data/lib/redcar/usage.rb +42 -0
  14. data/lib/redcar_quick_start.rb +100 -0
  15. data/lib/regex_replace.rb +221 -0
  16. data/lib/tasks/app-bundle.rake +63 -0
  17. data/plugins/application/features/main_menu.feature +9 -0
  18. data/plugins/application/features/navigation_history.feature +66 -0
  19. data/plugins/application/features/step_definitions/command_steps.rb +10 -0
  20. data/plugins/application/features/step_definitions/dialog_steps.rb +25 -0
  21. data/plugins/application/features/step_definitions/filter_list_dialog_steps.rb +42 -0
  22. data/plugins/application/features/step_definitions/key_steps.rb +18 -0
  23. data/plugins/application/features/step_definitions/menu_steps.rb +42 -0
  24. data/plugins/application/features/step_definitions/navigation_history_steps.rb +4 -0
  25. data/plugins/application/features/step_definitions/speedbar_steps.rb +88 -0
  26. data/plugins/application/features/step_definitions/tree_steps.rb +107 -0
  27. data/plugins/application/features/step_definitions/window_steps.rb +17 -0
  28. data/plugins/application/features/support/env.rb +257 -0
  29. data/plugins/application/features/support/fake_event.rb +26 -0
  30. data/plugins/application/lib/application.rb +425 -0
  31. data/plugins/application/lib/application/assets/file.png +0 -0
  32. data/plugins/application/lib/application/clipboard.rb +95 -0
  33. data/plugins/application/lib/application/command.rb +108 -0
  34. data/plugins/application/lib/application/command/executor.rb +80 -0
  35. data/plugins/application/lib/application/command/history.rb +54 -0
  36. data/plugins/application/lib/application/commands/application_commands.rb +21 -0
  37. data/plugins/application/lib/application/commands/notebook_commands.rb +73 -0
  38. data/plugins/application/lib/application/commands/tab_commands.rb +105 -0
  39. data/plugins/application/lib/application/commands/treebook_commands.rb +117 -0
  40. data/plugins/application/lib/application/commands/window_commands.rb +68 -0
  41. data/plugins/application/lib/application/dialog.rb +170 -0
  42. data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +123 -0
  43. data/plugins/application/lib/application/dialogs/modeless_list_dialog.rb +85 -0
  44. data/plugins/application/lib/application/event_spewer.rb +32 -0
  45. data/plugins/application/lib/application/keymap.rb +41 -0
  46. data/plugins/application/lib/application/keymap/builder.rb +23 -0
  47. data/plugins/application/lib/application/menu.rb +117 -0
  48. data/plugins/application/lib/application/menu/builder.rb +80 -0
  49. data/plugins/application/lib/application/menu/builder/group.rb +47 -0
  50. data/plugins/application/lib/application/menu/item.rb +79 -0
  51. data/plugins/application/lib/application/menu/lazy_menu.rb +25 -0
  52. data/plugins/application/lib/application/navigation_history.rb +71 -0
  53. data/plugins/application/lib/application/notebook.rb +163 -0
  54. data/plugins/application/lib/application/sensitive.rb +57 -0
  55. data/plugins/application/lib/application/sensitivity.rb +82 -0
  56. data/plugins/application/lib/application/speedbar.rb +100 -0
  57. data/plugins/application/lib/application/tab.rb +92 -0
  58. data/plugins/application/lib/application/tab/command.rb +5 -0
  59. data/plugins/application/lib/application/toolbar.rb +83 -0
  60. data/plugins/application/lib/application/toolbar/builder.rb +80 -0
  61. data/plugins/application/lib/application/toolbar/builder/group.rb +47 -0
  62. data/plugins/application/lib/application/toolbar/item.rb +71 -0
  63. data/plugins/application/lib/application/toolbar/lazy_toolbar.rb +25 -0
  64. data/plugins/application/lib/application/tree.rb +94 -0
  65. data/plugins/application/lib/application/tree/command.rb +5 -0
  66. data/plugins/application/lib/application/tree/controller.rb +64 -0
  67. data/plugins/application/lib/application/tree/mirror.rb +132 -0
  68. data/plugins/application/lib/application/treebook.rb +83 -0
  69. data/plugins/application/lib/application/window.rb +274 -0
  70. data/plugins/application/plugin.rb +8 -0
  71. data/plugins/application/spec/application/application_spec.rb +23 -0
  72. data/plugins/application/spec/application/clipboard_spec.rb +55 -0
  73. data/plugins/application/spec/application/command/executor_spec.rb +78 -0
  74. data/plugins/application/spec/application/command/history_spec.rb +49 -0
  75. data/plugins/application/spec/application/command_spec.rb +78 -0
  76. data/plugins/application/spec/application/controllers/application_controller.rb +4 -0
  77. data/plugins/application/spec/application/controllers/notebook_controller.rb +4 -0
  78. data/plugins/application/spec/application/controllers/window_controller.rb +5 -0
  79. data/plugins/application/spec/application/keymap/builder_spec.rb +17 -0
  80. data/plugins/application/spec/application/menu/builder_spec.rb +61 -0
  81. data/plugins/application/spec/application/menu/menu_item_spec.rb +17 -0
  82. data/plugins/application/spec/application/menu_spec.rb +171 -0
  83. data/plugins/application/spec/application/navigation_history_spec.rb +96 -0
  84. data/plugins/application/spec/application/notebook_spec.rb +31 -0
  85. data/plugins/application/spec/application/sensitive_spec.rb +156 -0
  86. data/plugins/application/spec/application/speedbar_spec.rb +77 -0
  87. data/plugins/application/spec/application/treebook_spec.rb +27 -0
  88. data/plugins/application/spec/application/window_spec.rb +24 -0
  89. data/plugins/application/spec/spec_helper.rb +18 -0
  90. data/plugins/application_swt/build.xml +74 -0
  91. data/plugins/application_swt/lib/application_swt.rb +218 -0
  92. data/plugins/application_swt/lib/application_swt/bring_to_front.rb +53 -0
  93. data/plugins/application_swt/lib/application_swt/clipboard.rb +42 -0
  94. data/plugins/application_swt/lib/application_swt/dialog_adapter.rb +180 -0
  95. data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +233 -0
  96. data/plugins/application_swt/lib/application_swt/dialogs/input_dialog.rb +46 -0
  97. data/plugins/application_swt/lib/application_swt/dialogs/modeless_dialog.rb +113 -0
  98. data/plugins/application_swt/lib/application_swt/dialogs/modeless_html_dialog.rb +85 -0
  99. data/plugins/application_swt/lib/application_swt/dialogs/modeless_list_dialog_controller.rb +143 -0
  100. data/plugins/application_swt/lib/application_swt/dialogs/no_buttons_dialog.rb +24 -0
  101. data/plugins/application_swt/lib/application_swt/dialogs/text_and_file_dialog.rb +118 -0
  102. data/plugins/application_swt/lib/application_swt/gradient.rb +61 -0
  103. data/plugins/application_swt/lib/application_swt/html_tab.rb +79 -0
  104. data/plugins/application_swt/lib/application_swt/icon.rb +35 -0
  105. data/plugins/application_swt/lib/application_swt/listener_helpers.rb +20 -0
  106. data/plugins/application_swt/lib/application_swt/menu.rb +167 -0
  107. data/plugins/application_swt/lib/application_swt/menu/binding_translator.rb +94 -0
  108. data/plugins/application_swt/lib/application_swt/notebook.rb +148 -0
  109. data/plugins/application_swt/lib/application_swt/notebook/tab_drag_and_drop_listener.rb +124 -0
  110. data/plugins/application_swt/lib/application_swt/notebook/tab_transfer.rb +83 -0
  111. data/plugins/application_swt/lib/application_swt/speedbar.rb +185 -0
  112. data/plugins/application_swt/lib/application_swt/speedbar/button_item.rb +20 -0
  113. data/plugins/application_swt/lib/application_swt/speedbar/combo_item.rb +55 -0
  114. data/plugins/application_swt/lib/application_swt/speedbar/label_item.rb +15 -0
  115. data/plugins/application_swt/lib/application_swt/speedbar/slider_item.rb +32 -0
  116. data/plugins/application_swt/lib/application_swt/speedbar/text_box_item.rb +36 -0
  117. data/plugins/application_swt/lib/application_swt/speedbar/toggle_item.rb +29 -0
  118. data/plugins/application_swt/lib/application_swt/tab.rb +84 -0
  119. data/plugins/application_swt/lib/application_swt/toolbar.rb +138 -0
  120. data/plugins/application_swt/lib/application_swt/toolbar/binding_translator.rb +94 -0
  121. data/plugins/application_swt/lib/application_swt/treebook.rb +78 -0
  122. data/plugins/application_swt/lib/application_swt/window.rb +419 -0
  123. data/plugins/application_swt/lib/dist/application_swt.jar +0 -0
  124. data/plugins/application_swt/lib/swt/graphics_utils.rb +193 -0
  125. data/plugins/application_swt/lib/swt/vtab_folder.rb +177 -0
  126. data/plugins/application_swt/lib/swt/vtab_item.rb +78 -0
  127. data/plugins/application_swt/lib/swt/vtab_label.rb +127 -0
  128. data/plugins/application_swt/plugin.rb +8 -0
  129. data/plugins/application_swt/spec/application_swt/gradient_spec.rb +133 -0
  130. data/plugins/application_swt/spec/application_swt/menu/binding_translator_spec.rb +73 -0
  131. data/plugins/application_swt/spec/application_swt/menu_spec.rb +7 -0
  132. data/plugins/application_swt/spec/spec_helper.rb +20 -0
  133. data/plugins/application_swt/src/com/redcareditor/application_swt/CocoaUIEnhancer.java +313 -0
  134. data/plugins/auto_completer/features/auto_complete.feature +65 -0
  135. data/plugins/auto_completer/features/step_definitions/auto_complete_steps.rb +4 -0
  136. data/plugins/auto_completer/features/support/env.rb +2 -0
  137. data/plugins/auto_completer/lib/auto_completer.rb +129 -0
  138. data/plugins/auto_completer/lib/auto_completer/current_document_completion_source.rb +19 -0
  139. data/plugins/auto_completer/lib/auto_completer/document_controller.rb +52 -0
  140. data/plugins/auto_completer/lib/auto_completer/list_dialog.rb +21 -0
  141. data/plugins/auto_completer/lib/auto_completer/word_iterator.rb +48 -0
  142. data/plugins/auto_completer/lib/auto_completer/word_list.rb +47 -0
  143. data/plugins/auto_completer/plugin.rb +10 -0
  144. data/plugins/auto_indenter/features/java_style_indentation.feature +36 -0
  145. data/plugins/auto_indenter/features/ruby_style_indentation.feature +42 -0
  146. data/plugins/auto_indenter/features/step_definitions/indentation_steps.rb +15 -0
  147. data/plugins/auto_indenter/features/support/env.rb +1 -0
  148. data/plugins/auto_indenter/lib/auto_indenter.rb +108 -0
  149. data/plugins/auto_indenter/lib/auto_indenter/analyzer.rb +100 -0
  150. data/plugins/auto_indenter/lib/auto_indenter/commands.rb +66 -0
  151. data/plugins/auto_indenter/lib/auto_indenter/document_controller.rb +103 -0
  152. data/plugins/auto_indenter/lib/auto_indenter/rules.rb +41 -0
  153. data/plugins/auto_indenter/plugin.rb +9 -0
  154. data/plugins/auto_indenter/spec/auto_indenter/analyzer_spec.rb +151 -0
  155. data/plugins/auto_indenter/spec/spec_helper.rb +5 -0
  156. data/plugins/auto_pairer/features/auto_pairer.feature +92 -0
  157. data/plugins/auto_pairer/features/step_definitions/auto_pairer_steps.rb +0 -0
  158. data/plugins/auto_pairer/features/support/env.rb +1 -0
  159. data/plugins/auto_pairer/lib/auto_pairer.rb +12 -0
  160. data/plugins/auto_pairer/lib/auto_pairer/document_controller.rb +168 -0
  161. data/plugins/auto_pairer/lib/auto_pairer/pairs_for_scope.rb +57 -0
  162. data/plugins/auto_pairer/plugin.rb +9 -0
  163. data/plugins/clipboard-viewer/Screenshot.png +0 -0
  164. data/plugins/clipboard-viewer/lib/clipboard_viewer.rb +50 -0
  165. data/plugins/clipboard-viewer/lib/clipboard_viewer/browser_controller.rb +27 -0
  166. data/plugins/clipboard-viewer/lib/clipboard_viewer/clipboard_bar.rb +67 -0
  167. data/plugins/clipboard-viewer/plugin.rb +9 -0
  168. data/plugins/clipboard-viewer/views/clipboard.html.erb +19 -0
  169. data/plugins/clipboard-viewer/views/default.css +43 -0
  170. data/plugins/clipboard-viewer/views/redcar_small_icon.png +0 -0
  171. data/plugins/comment/features/line_comment.feature +249 -0
  172. data/plugins/comment/features/selection_comment.feature +21 -0
  173. data/plugins/comment/features/step_definitions/comment_steps.rb +7 -0
  174. data/plugins/comment/lib/comment.rb +268 -0
  175. data/plugins/comment/plugin.rb +7 -0
  176. data/plugins/comment/vendor/comment_lib.json +47 -0
  177. data/plugins/connection_manager/lib/connection_manager.rb +57 -0
  178. data/plugins/connection_manager/lib/connection_manager/commands.rb +14 -0
  179. data/plugins/connection_manager/lib/connection_manager/connection_store.rb +87 -0
  180. data/plugins/connection_manager/lib/connection_manager/controller.rb +100 -0
  181. data/plugins/connection_manager/lib/connection_manager/filter_dialog.rb +38 -0
  182. data/plugins/connection_manager/lib/connection_manager/private_key_store.rb +93 -0
  183. data/plugins/connection_manager/plugin.rb +12 -0
  184. data/plugins/connection_manager/views/index.html.erb +284 -0
  185. data/plugins/core/lib/core.rb +41 -0
  186. data/plugins/core/lib/core/controller.rb +23 -0
  187. data/plugins/core/lib/core/gui.rb +100 -0
  188. data/plugins/core/lib/core/has_spi.rb +10 -0
  189. data/plugins/core/lib/core/interface.rb +73 -0
  190. data/plugins/core/lib/core/model.rb +11 -0
  191. data/plugins/core/lib/core/observable.rb +115 -0
  192. data/plugins/core/lib/core/observable_struct.rb +34 -0
  193. data/plugins/core/lib/core/persistent_cache.rb +57 -0
  194. data/plugins/core/lib/core/plugin.rb +12 -0
  195. data/plugins/core/lib/core/plugin/storage.rb +133 -0
  196. data/plugins/core/lib/core/reentry_helpers.rb +13 -0
  197. data/plugins/core/lib/core/resource.rb +86 -0
  198. data/plugins/core/lib/core/task.rb +62 -0
  199. data/plugins/core/lib/core/task_queue.rb +72 -0
  200. data/plugins/core/plugin.rb +7 -0
  201. data/plugins/core/spec/core/base_storage_spec.rb +81 -0
  202. data/plugins/core/spec/core/gui_spec.rb +27 -0
  203. data/plugins/core/spec/core/observable_spec.rb +104 -0
  204. data/plugins/core/spec/core/persistent_cache_spec.rb +100 -0
  205. data/plugins/core/spec/core/resource_spec.rb +125 -0
  206. data/plugins/core/spec/core/shared_storage_spec.rb +49 -0
  207. data/plugins/core/spec/core/storage_spec.rb +27 -0
  208. data/plugins/core/spec/core/task_queue_spec.rb +199 -0
  209. data/plugins/core/spec/spec_helper.rb +27 -0
  210. data/plugins/declarations/lib/declarations.rb +159 -0
  211. data/plugins/declarations/lib/declarations/completion_source.rb +22 -0
  212. data/plugins/declarations/lib/declarations/file.rb +68 -0
  213. data/plugins/declarations/lib/declarations/parser.rb +186 -0
  214. data/plugins/declarations/lib/declarations/select_tag_dialog.rb +45 -0
  215. data/plugins/declarations/plugin.rb +7 -0
  216. data/plugins/declarations/spec/declarations/file_spec.rb +62 -0
  217. data/plugins/declarations/spec/fixtures/federalist.rb +15 -0
  218. data/plugins/declarations/spec/spec_helper.rb +5 -0
  219. data/plugins/document_search/Readme.md +14 -0
  220. data/plugins/document_search/features/find.feature +541 -0
  221. data/plugins/document_search/features/incremental_search.feature +351 -0
  222. data/plugins/document_search/features/replace.feature +178 -0
  223. data/plugins/document_search/features/step_definitions/find_steps.rb +16 -0
  224. data/plugins/document_search/features/support/env.rb +14 -0
  225. data/plugins/document_search/lib/document_search.rb +191 -0
  226. data/plugins/document_search/lib/document_search/commands.rb +307 -0
  227. data/plugins/document_search/lib/document_search/find_speedbar.rb +162 -0
  228. data/plugins/document_search/lib/document_search/incremental_search_speedbar.rb +70 -0
  229. data/plugins/document_search/lib/document_search/query_options.rb +21 -0
  230. data/plugins/document_search/plugin.rb +8 -0
  231. data/plugins/edit_view/features/align_assignment.feature +106 -0
  232. data/plugins/edit_view/features/case_change.feature +67 -0
  233. data/plugins/edit_view/features/cursor_navigation.feature +36 -0
  234. data/plugins/edit_view/features/cut_and_paste.feature +45 -0
  235. data/plugins/edit_view/features/grammar.feature +11 -0
  236. data/plugins/edit_view/features/indentation_commands.feature +49 -0
  237. data/plugins/edit_view/features/line_delimiter.feature +47 -0
  238. data/plugins/edit_view/features/multiple_notebooks.feature +52 -0
  239. data/plugins/edit_view/features/multiple_windows.feature +48 -0
  240. data/plugins/edit_view/features/new_tab.feature +11 -0
  241. data/plugins/edit_view/features/soft_tabs.feature +243 -0
  242. data/plugins/edit_view/features/sort_lines.feature +15 -0
  243. data/plugins/edit_view/features/step_definitions/editing_steps.rb +350 -0
  244. data/plugins/edit_view/features/step_definitions/grammar_steps.rb +4 -0
  245. data/plugins/edit_view/features/step_definitions/key_steps.rb +48 -0
  246. data/plugins/edit_view/features/step_definitions/notebook_steps.rb +59 -0
  247. data/plugins/edit_view/features/step_definitions/tab_steps.rb +113 -0
  248. data/plugins/edit_view/features/step_definitions/window_steps.rb +86 -0
  249. data/plugins/edit_view/features/support/env.rb +59 -0
  250. data/plugins/edit_view/features/switch_tabs.feature +106 -0
  251. data/plugins/edit_view/features/tabs.feature +146 -0
  252. data/plugins/edit_view/features/undo_and_redo.feature +73 -0
  253. data/plugins/edit_view/features/word_matching.feature +67 -0
  254. data/plugins/edit_view/lib/edit_view.rb +659 -0
  255. data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +170 -0
  256. data/plugins/edit_view/lib/edit_view/actions/cmd_enter.rb +11 -0
  257. data/plugins/edit_view/lib/edit_view/actions/deletion.rb +40 -0
  258. data/plugins/edit_view/lib/edit_view/actions/esc.rb +15 -0
  259. data/plugins/edit_view/lib/edit_view/actions/tab.rb +70 -0
  260. data/plugins/edit_view/lib/edit_view/command.rb +14 -0
  261. data/plugins/edit_view/lib/edit_view/commands/align_assignment_command.rb +55 -0
  262. data/plugins/edit_view/lib/edit_view/commands/text_conversion_commands.rb +85 -0
  263. data/plugins/edit_view/lib/edit_view/document.rb +796 -0
  264. data/plugins/edit_view/lib/edit_view/document/command.rb +25 -0
  265. data/plugins/edit_view/lib/edit_view/document/controller.rb +43 -0
  266. data/plugins/edit_view/lib/edit_view/document/history.rb +41 -0
  267. data/plugins/edit_view/lib/edit_view/document/indentation.rb +40 -0
  268. data/plugins/edit_view/lib/edit_view/document/mirror.rb +42 -0
  269. data/plugins/edit_view/lib/edit_view/edit_tab.rb +59 -0
  270. data/plugins/edit_view/lib/edit_view/grammar.rb +58 -0
  271. data/plugins/edit_view/lib/edit_view/grammars/default.rb +10 -0
  272. data/plugins/edit_view/lib/edit_view/grammars/ruby.rb +10 -0
  273. data/plugins/edit_view/lib/edit_view/grammars/ruby_on_rails.rb +7 -0
  274. data/plugins/edit_view/lib/edit_view/info_speedbar.rb +98 -0
  275. data/plugins/edit_view/lib/edit_view/modified_tabs_checker.rb +35 -0
  276. data/plugins/edit_view/lib/edit_view/select_font_dialog.rb +45 -0
  277. data/plugins/edit_view/lib/edit_view/select_theme_dialog.rb +42 -0
  278. data/plugins/edit_view/lib/edit_view/tab_settings.rb +135 -0
  279. data/plugins/edit_view/plugin.rb +9 -0
  280. data/plugins/edit_view/spec/edit_view/document/indentation_spec.rb +112 -0
  281. data/plugins/edit_view/spec/edit_view/document_spec.rb +130 -0
  282. data/plugins/edit_view/spec/spec_helper.rb +5 -0
  283. data/plugins/edit_view_swt/lib/edit_view_swt.rb +621 -0
  284. data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +224 -0
  285. data/plugins/edit_view_swt/lib/edit_view_swt/edit_tab.rb +50 -0
  286. data/plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb +68 -0
  287. data/plugins/edit_view_swt/plugin.rb +9 -0
  288. data/plugins/edit_view_swt/spec/edit_view_swt/word_movement_spec.rb +29 -0
  289. data/plugins/edit_view_swt/spec/spec_helper.rb +5 -0
  290. data/plugins/encryption/encryption.rb +52 -0
  291. data/plugins/encryption/ezcrypto.rb +652 -0
  292. data/plugins/encryption/jarmor-1.1.jar +0 -0
  293. data/plugins/encryption/plugin.rb +9 -0
  294. data/plugins/execute_current_tab/lib/execute_current_tab.rb +68 -0
  295. data/plugins/execute_current_tab/plugin.rb +8 -0
  296. data/plugins/help/lib/help.rb +64 -0
  297. data/plugins/help/lib/help/help_tab.rb +11 -0
  298. data/plugins/help/lib/help/view_controller.rb +30 -0
  299. data/plugins/help/plugin.rb +9 -0
  300. data/plugins/help/views/default.css +31 -0
  301. data/plugins/help/views/index.html.erb +41 -0
  302. data/plugins/help/views/redcar_small_icon.png +0 -0
  303. data/plugins/html_view/assets/blueprint/ie.css +35 -0
  304. data/plugins/html_view/assets/blueprint/print.css +29 -0
  305. data/plugins/html_view/assets/blueprint/screen.css +257 -0
  306. data/plugins/html_view/assets/blueprint/src/forms.css +65 -0
  307. data/plugins/html_view/assets/blueprint/src/grid.css +281 -0
  308. data/plugins/html_view/assets/blueprint/src/grid.png +0 -0
  309. data/plugins/html_view/assets/blueprint/src/ie.css +76 -0
  310. data/plugins/html_view/assets/blueprint/src/print.css +85 -0
  311. data/plugins/html_view/assets/blueprint/src/reset.css +38 -0
  312. data/plugins/html_view/assets/blueprint/src/typography.css +106 -0
  313. data/plugins/html_view/assets/jquery-1.4.min.js +151 -0
  314. data/plugins/html_view/assets/json2.js +476 -0
  315. data/plugins/html_view/assets/redcar.css +44 -0
  316. data/plugins/html_view/features/browser_bar.feature +47 -0
  317. data/plugins/html_view/features/fixtures/other.html +1 -0
  318. data/plugins/html_view/features/fixtures/sample.html +1 -0
  319. data/plugins/html_view/features/step_definitions/html_view_steps.rb +64 -0
  320. data/plugins/html_view/features/step_definitions/web_view_steps.rb +12 -0
  321. data/plugins/html_view/features/support/env.rb +27 -0
  322. data/plugins/html_view/features/web_preview.feature +21 -0
  323. data/plugins/html_view/lib/html_controller.rb +50 -0
  324. data/plugins/html_view/lib/html_view.rb +170 -0
  325. data/plugins/html_view/lib/html_view/browser_bar.rb +82 -0
  326. data/plugins/html_view/lib/html_view/commands.rb +64 -0
  327. data/plugins/html_view/lib/html_view/default_controller.rb +23 -0
  328. data/plugins/html_view/lib/html_view/html_tab.rb +40 -0
  329. data/plugins/html_view/plugin.rb +13 -0
  330. data/plugins/html_view/views/default.css +117 -0
  331. data/plugins/html_view/views/index.html.erb +5 -0
  332. data/plugins/html_view/views/watermark-48.png +0 -0
  333. data/plugins/java/features/fixtures/lib/classes.jar +0 -0
  334. data/plugins/java/features/fixtures/test.java +0 -0
  335. data/plugins/java/features/support/env.rb +27 -0
  336. data/plugins/java/features/syntax_check_java.feature +86 -0
  337. data/plugins/java/lib/syntax_check/java.rb +86 -0
  338. data/plugins/java/plugin.rb +7 -0
  339. data/plugins/key_bindings/lib/key_bindings.rb +34 -0
  340. data/plugins/key_bindings/plugin.rb +8 -0
  341. data/plugins/key_bindings/spec/spec_helper.rb +5 -0
  342. data/plugins/line_tools/features/clear_line.feature +25 -0
  343. data/plugins/line_tools/features/kill_line.feature +25 -0
  344. data/plugins/line_tools/features/lower_text.feature +54 -0
  345. data/plugins/line_tools/features/raise_text.feature +50 -0
  346. data/plugins/line_tools/features/replace_line.feature +33 -0
  347. data/plugins/line_tools/features/step_definitions/line_tools_steps.rb +23 -0
  348. data/plugins/line_tools/features/support/env.rb +0 -0
  349. data/plugins/line_tools/features/trim_line.feature +73 -0
  350. data/plugins/line_tools/lib/line_tools.rb +217 -0
  351. data/plugins/line_tools/plugin.rb +9 -0
  352. data/plugins/macros/features/block_selection_in_macros.feature +48 -0
  353. data/plugins/macros/features/predictive_macros.feature +79 -0
  354. data/plugins/macros/features/record_and_run_macro.feature +87 -0
  355. data/plugins/macros/features/step_definitions/macro_steps.rb +11 -0
  356. data/plugins/macros/features/step_definitions/prediction_steps.rb +8 -0
  357. data/plugins/macros/features/support/env.rb +0 -0
  358. data/plugins/macros/lib/macros.rb +167 -0
  359. data/plugins/macros/lib/macros/action_sequence.rb +30 -0
  360. data/plugins/macros/lib/macros/commands.rb +108 -0
  361. data/plugins/macros/lib/macros/macro.rb +37 -0
  362. data/plugins/macros/lib/macros/manager_controller.rb +67 -0
  363. data/plugins/macros/lib/macros/predictive/document_controller.rb +69 -0
  364. data/plugins/macros/lib/macros/predictive/sequence_finder.rb +112 -0
  365. data/plugins/macros/plugin.rb +9 -0
  366. data/plugins/macros/spec/macros/predictive/sequence_finder_spec.rb +142 -0
  367. data/plugins/macros/spec/spec_helper.rb +6 -0
  368. data/plugins/macros/views/macro_manager.html.erb +92 -0
  369. data/plugins/my_plugin/lib/my_plugin.rb +47 -0
  370. data/plugins/my_plugin/plugin.rb +8 -0
  371. data/plugins/open_default_app/lib/open_default_app.rb +61 -0
  372. data/plugins/open_default_app/plugin.rb +8 -0
  373. data/plugins/open_default_app/screenshot.png +0 -0
  374. data/plugins/outline_view/features/outline_view.feature +79 -0
  375. data/plugins/outline_view/features/step_definitions/outline_steps.rb +45 -0
  376. data/plugins/outline_view/lib/outline_view.rb +66 -0
  377. data/plugins/outline_view/lib/outline_view/commands.rb +13 -0
  378. data/plugins/outline_view/plugin.rb +10 -0
  379. data/plugins/outline_view/spec/fixtures/some_project/javascript.js +10 -0
  380. data/plugins/outline_view/spec/fixtures/some_project/nothing_to_see.rb +0 -0
  381. data/plugins/outline_view/spec/fixtures/some_project/one_lonely_class.rb +2 -0
  382. data/plugins/outline_view/spec/fixtures/some_project/similar_names.rb +18 -0
  383. data/plugins/outline_view/spec/fixtures/some_project/something_fancy.rb +736 -0
  384. data/plugins/outline_view/spec/fixtures/some_project/trailing_space.rb +5 -0
  385. data/plugins/outline_view_swt/lib/outline_view_swt.rb +79 -0
  386. data/plugins/outline_view_swt/plugin.rb +7 -0
  387. data/plugins/pair_highlighter/lib/pair_highlighter.rb +34 -0
  388. data/plugins/pair_highlighter/lib/pair_highlighter/document_controller.rb +185 -0
  389. data/plugins/pair_highlighter/plugin.rb +9 -0
  390. data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +122 -0
  391. data/plugins/plugin_manager_ui/plugin.rb +13 -0
  392. data/plugins/plugin_manager_ui/views/index.html.erb +62 -0
  393. data/plugins/project/features/close_directory_tree.feature +28 -0
  394. data/plugins/project/features/find_file.feature +119 -0
  395. data/plugins/project/features/highlight_focussed_tab.feature +53 -0
  396. data/plugins/project/features/move_and_rename_files.feature +25 -0
  397. data/plugins/project/features/open_and_save_files.feature +85 -0
  398. data/plugins/project/features/open_directory_tree.feature +93 -0
  399. data/plugins/project/features/refresh_directory_tree.feature +44 -0
  400. data/plugins/project/features/step_definitions/directory_steps.rb +35 -0
  401. data/plugins/project/features/step_definitions/drb_steps.rb +40 -0
  402. data/plugins/project/features/step_definitions/file_steps.rb +66 -0
  403. data/plugins/project/features/step_definitions/find_file_steps.rb +7 -0
  404. data/plugins/project/features/step_definitions/project_tree_steps.rb +7 -0
  405. data/plugins/project/features/sub_project.feature +15 -0
  406. data/plugins/project/features/support/env.rb +35 -0
  407. data/plugins/project/features/watch_for_modified_files.feature +109 -0
  408. data/plugins/project/lib/project.rb +266 -0
  409. data/plugins/project/lib/project/adapters/local.rb +82 -0
  410. data/plugins/project/lib/project/adapters/remote.rb +96 -0
  411. data/plugins/project/lib/project/adapters/remote_protocols/ftp.rb +93 -0
  412. data/plugins/project/lib/project/adapters/remote_protocols/protocol.rb +94 -0
  413. data/plugins/project/lib/project/adapters/remote_protocols/sftp.rb +181 -0
  414. data/plugins/project/lib/project/commands.rb +449 -0
  415. data/plugins/project/lib/project/dir_controller.rb +275 -0
  416. data/plugins/project/lib/project/dir_mirror.rb +176 -0
  417. data/plugins/project/lib/project/drb_service.rb +86 -0
  418. data/plugins/project/lib/project/file_list.rb +164 -0
  419. data/plugins/project/lib/project/file_mirror.rb +85 -0
  420. data/plugins/project/lib/project/find_file_dialog.rb +118 -0
  421. data/plugins/project/lib/project/find_recent_dialog.rb +30 -0
  422. data/plugins/project/lib/project/manager.rb +545 -0
  423. data/plugins/project/lib/project/project_tree_controller.rb +24 -0
  424. data/plugins/project/lib/project/recent.rb +64 -0
  425. data/plugins/project/lib/project/sub_project.rb +17 -0
  426. data/plugins/project/lib/project/support/recycle.js +2 -0
  427. data/plugins/project/lib/project/support/trash.rb +73 -0
  428. data/plugins/project/plugin.rb +11 -0
  429. data/plugins/project/spec/fixture_helper.rb +30 -0
  430. data/plugins/project/spec/project/adapters/remote_protocols/ftp_spec.rb +75 -0
  431. data/plugins/project/spec/project/adapters/remote_protocols/sftp_spec.rb +121 -0
  432. data/plugins/project/spec/project/adapters/remote_spec.rb +136 -0
  433. data/plugins/project/spec/project/dir_mirror_spec.rb +65 -0
  434. data/plugins/project/spec/project/file_list_spec.rb +151 -0
  435. data/plugins/project/spec/project/file_mirror_spec.rb +97 -0
  436. data/plugins/project/spec/spec_helper.rb +26 -0
  437. data/plugins/project/views/bulk_rename.html.erb +162 -0
  438. data/plugins/project_search/features/support/env.rb +6 -0
  439. data/plugins/project_search/features/word_search.feature +34 -0
  440. data/plugins/project_search/lib/project_search.rb +82 -0
  441. data/plugins/project_search/lib/project_search/binary_data_detector.rb +46 -0
  442. data/plugins/project_search/lib/project_search/commands.rb +50 -0
  443. data/plugins/project_search/lib/project_search/hit.rb +21 -0
  444. data/plugins/project_search/lib/project_search/images/spinner.gif +0 -0
  445. data/plugins/project_search/lib/project_search/lucene_index.rb +81 -0
  446. data/plugins/project_search/lib/project_search/lucene_refresh.rb +22 -0
  447. data/plugins/project_search/lib/project_search/project.rb +14 -0
  448. data/plugins/project_search/lib/project_search/query.rb +29 -0
  449. data/plugins/project_search/lib/project_search/stylesheets/style.css +279 -0
  450. data/plugins/project_search/lib/project_search/views/_file.html.erb +58 -0
  451. data/plugins/project_search/lib/project_search/views/index.html.erb +156 -0
  452. data/plugins/project_search/lib/project_search/word_search.rb +143 -0
  453. data/plugins/project_search/lib/project_search/word_search_controller.rb +219 -0
  454. data/plugins/project_search/plugin.rb +8 -0
  455. data/plugins/project_search/spec/fixtures/project/binary_file.bin +0 -0
  456. data/plugins/project_search/spec/fixtures/project/foo.txt +43 -0
  457. data/plugins/project_search/spec/fixtures/project/qux.rb +3 -0
  458. data/plugins/project_search/spec/project_search/binary_data_detector_spec.rb +24 -0
  459. data/plugins/project_search/spec/project_search/word_search_spec.rb +157 -0
  460. data/plugins/project_search/spec/spec_helper.rb +27 -0
  461. data/plugins/redcar/features/alter_font_size.feature +26 -0
  462. data/plugins/redcar/features/goto_line_command.feature +20 -0
  463. data/plugins/redcar/features/step_definitions/env.rb +5 -0
  464. data/plugins/redcar/features/step_definitions/font_steps.rb +34 -0
  465. data/plugins/redcar/features/text_editing.feature +34 -0
  466. data/plugins/redcar/features/text_navigation.feature +30 -0
  467. data/plugins/redcar/plugin.rb +17 -0
  468. data/plugins/redcar/redcar.rb +1097 -0
  469. data/plugins/redcar_debug/lib/redcar_debug.rb +91 -0
  470. data/plugins/redcar_debug/plugin.rb +8 -0
  471. data/plugins/redcar_debug/views/history.html.erb +34 -0
  472. data/plugins/redcar_debug/views/index.html.erb +36 -0
  473. data/plugins/repl/features/command_editing.feature +55 -0
  474. data/plugins/repl/features/command_history.feature +75 -0
  475. data/plugins/repl/features/step_definitions/repl_steps.rb +19 -0
  476. data/plugins/repl/features/support/env.rb +24 -0
  477. data/plugins/repl/features/support/fake_repl.rb +16 -0
  478. data/plugins/repl/lib/repl.rb +40 -0
  479. data/plugins/repl/lib/repl/repl_command.rb +20 -0
  480. data/plugins/repl/lib/repl/repl_mirror.rb +255 -0
  481. data/plugins/repl/lib/repl/repl_tab.rb +154 -0
  482. data/plugins/repl/plugin.rb +8 -0
  483. data/plugins/repl/spec/repl/repl_mirror_spec.rb +72 -0
  484. data/plugins/repl/spec/spec_helper.rb +5 -0
  485. data/plugins/repl_swt/lib/repl_swt.rb +7 -0
  486. data/plugins/repl_swt/lib/repl_swt/key_listener.rb +43 -0
  487. data/plugins/repl_swt/plugin.rb +8 -0
  488. data/plugins/ruby/features/fixtures/test.rb +0 -0
  489. data/plugins/ruby/features/support/env.rb +4 -0
  490. data/plugins/ruby/features/syntax_check_ruby.feature +26 -0
  491. data/plugins/ruby/lib/ruby.rb +35 -0
  492. data/plugins/ruby/lib/ruby/repl_mirror.rb +46 -0
  493. data/plugins/ruby/lib/ruby/syntax_checker.rb +30 -0
  494. data/plugins/ruby/plugin.rb +8 -0
  495. data/plugins/ruby/spec/ruby/repl_mirror_spec.rb +202 -0
  496. data/plugins/ruby/spec/spec_helper.rb +5 -0
  497. data/plugins/runnables/features/command_tree.feature +63 -0
  498. data/plugins/runnables/features/file_runner_input.feature +21 -0
  499. data/plugins/runnables/features/parameter_input.feature +43 -0
  500. data/plugins/runnables/features/run_alternate_command.feature +15 -0
  501. data/plugins/runnables/features/run_command_tab.feature +47 -0
  502. data/plugins/runnables/features/step_definitions/runnable_steps.rb +28 -0
  503. data/plugins/runnables/features/support/env.rb +124 -0
  504. data/plugins/runnables/lib/runnables.rb +180 -0
  505. data/plugins/runnables/lib/runnables/command_output_controller.rb +183 -0
  506. data/plugins/runnables/lib/runnables/commands.rb +82 -0
  507. data/plugins/runnables/lib/runnables/output_processor.rb +74 -0
  508. data/plugins/runnables/lib/runnables/running_process_checker.rb +34 -0
  509. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable.rb +62 -0
  510. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_group.rb +45 -0
  511. data/plugins/runnables/lib/runnables/tree_mirror/nodes/runnable_type_group.rb +30 -0
  512. data/plugins/runnables/lib/runnables/tree_mirror/tree_controller.rb +36 -0
  513. data/plugins/runnables/lib/runnables/tree_mirror/tree_mirror.rb +66 -0
  514. data/plugins/runnables/plugin.rb +9 -0
  515. data/plugins/runnables/spec/runnables/output_processor_spec.rb +57 -0
  516. data/plugins/runnables/spec/spec_helper.rb +5 -0
  517. data/plugins/runnables/views/basic_ansi.css +34 -0
  518. data/plugins/runnables/views/color_tester.html +50 -0
  519. data/plugins/runnables/views/command_output.html.erb +32 -0
  520. data/plugins/runnables/views/default.css +79 -0
  521. data/plugins/runnables/views/indicator.gif +0 -0
  522. data/plugins/runnables/views/redcar_small_icon.png +0 -0
  523. data/plugins/runnables/views/reset.css +53 -0
  524. data/plugins/runnables/views/running_test.html +41 -0
  525. data/plugins/runnables/views/wedgeDown.png +0 -0
  526. data/plugins/runnables/views/wedgeRight.png +0 -0
  527. data/plugins/scm/lib/scm.rb +296 -0
  528. data/plugins/scm/lib/scm/commands.rb +48 -0
  529. data/plugins/scm/lib/scm/commit_mirror.rb +72 -0
  530. data/plugins/scm/lib/scm/diff_mirror.rb +31 -0
  531. data/plugins/scm/lib/scm/errors.rb +8 -0
  532. data/plugins/scm/lib/scm/model.rb +275 -0
  533. data/plugins/scm/lib/scm/scm_changes_controller.rb +107 -0
  534. data/plugins/scm/lib/scm/scm_changes_mirror.rb +51 -0
  535. data/plugins/scm/lib/scm/scm_changes_mirror/change.rb +63 -0
  536. data/plugins/scm/lib/scm/scm_changes_mirror/changes_node.rb +47 -0
  537. data/plugins/scm/lib/scm/scm_changes_mirror/drag_controller.rb +78 -0
  538. data/plugins/scm/lib/scm/scm_commits_controller.rb +49 -0
  539. data/plugins/scm/lib/scm/scm_commits_mirror.rb +36 -0
  540. data/plugins/scm/lib/scm/scm_commits_mirror/commit.rb +26 -0
  541. data/plugins/scm/lib/scm/scm_commits_mirror/commits_node.rb +38 -0
  542. data/plugins/scm/plugin.rb +8 -0
  543. data/plugins/scm/spec/spec_helper.rb +5 -0
  544. data/plugins/scm_git/lib/scm_git.rb +543 -0
  545. data/plugins/scm_git/lib/scm_git/change.rb +137 -0
  546. data/plugins/scm_git/lib/scm_git/commit.rb +18 -0
  547. data/plugins/scm_git/lib/scm_git/config_file.rb +31 -0
  548. data/plugins/scm_git/plugin.rb +7 -0
  549. data/plugins/scm_hg/lib/scm_hg.rb +30 -0
  550. data/plugins/scm_hg/plugin.rb +7 -0
  551. data/plugins/scm_svn/LICENSE +48 -0
  552. data/plugins/scm_svn/features/add_and_commit.feature +18 -0
  553. data/plugins/scm_svn/features/checkout.feature +5 -0
  554. data/plugins/scm_svn/features/edit_and_index.feature +12 -0
  555. data/plugins/scm_svn/features/ignore_files.feature +14 -0
  556. data/plugins/scm_svn/features/merge.feature +34 -0
  557. data/plugins/scm_svn/features/resolve_conflict.feature +23 -0
  558. data/plugins/scm_svn/features/revert_and_delete.feature +21 -0
  559. data/plugins/scm_svn/features/step_definitions/branch_and_merge_steps.rb +27 -0
  560. data/plugins/scm_svn/features/step_definitions/checkout_steps.rb +25 -0
  561. data/plugins/scm_svn/features/step_definitions/edit_and_index_steps.rb +50 -0
  562. data/plugins/scm_svn/features/step_definitions/scm_svn_steps.rb +57 -0
  563. data/plugins/scm_svn/features/support/env.rb +71 -0
  564. data/plugins/scm_svn/features/switch_branches.feature +53 -0
  565. data/plugins/scm_svn/features/update.feature +16 -0
  566. data/plugins/scm_svn/lib/scm_svn.rb +445 -0
  567. data/plugins/scm_svn/lib/scm_svn/change.rb +116 -0
  568. data/plugins/scm_svn/plugin.rb +7 -0
  569. data/plugins/snippets/features/snippet_indenting.feature +87 -0
  570. data/plugins/snippets/features/snippets.feature +398 -0
  571. data/plugins/snippets/features/step_definitions/snippet_steps.rb +16 -0
  572. data/plugins/snippets/features/support/env.rb +1 -0
  573. data/plugins/snippets/lib/snippets.rb +111 -0
  574. data/plugins/snippets/lib/snippets/document_controller.rb +591 -0
  575. data/plugins/snippets/lib/snippets/explorer.rb +48 -0
  576. data/plugins/snippets/lib/snippets/tab_handler.rb +117 -0
  577. data/plugins/snippets/plugin.rb +9 -0
  578. data/plugins/splash_screen/plugin.rb +8 -0
  579. data/plugins/splash_screen/splash_screen.rb +62 -0
  580. data/plugins/strip_trailing_spaces/features/fixtures/test.txt +3 -0
  581. data/plugins/strip_trailing_spaces/features/strip_trailing_spaces.feature +34 -0
  582. data/plugins/strip_trailing_spaces/lib/strip_trailing_spaces.rb +60 -0
  583. data/plugins/strip_trailing_spaces/plugin.rb +8 -0
  584. data/plugins/syntax_check/README +6 -0
  585. data/plugins/syntax_check/features/step_definitions/syntax_check_steps.rb +11 -0
  586. data/plugins/syntax_check/features/support/env.rb +3 -0
  587. data/plugins/syntax_check/lib/syntax_check.rb +100 -0
  588. data/plugins/syntax_check/lib/syntax_check/annotation.rb +61 -0
  589. data/plugins/syntax_check/lib/syntax_check/checker.rb +47 -0
  590. data/plugins/syntax_check/lib/syntax_check/error.rb +24 -0
  591. data/plugins/syntax_check/plugin.rb +7 -0
  592. data/plugins/task_manager/lib/task_manager.rb +30 -0
  593. data/plugins/task_manager/plugin.rb +11 -0
  594. data/plugins/task_manager/views/index.html.erb +70 -0
  595. data/plugins/test_runner/lib/test_runner.rb +40 -0
  596. data/plugins/test_runner/lib/test_runner/jasmine_test_runner.rb +15 -0
  597. data/plugins/test_runner/lib/test_runner/rspec_runner.rb +20 -0
  598. data/plugins/test_runner/lib/test_runner/run_test_command.rb +63 -0
  599. data/plugins/test_runner/lib/test_runner/runnable_test_runner.rb +42 -0
  600. data/plugins/test_runner/plugin.rb +8 -0
  601. data/plugins/test_runner/spec/run_test_command_spec.rb +51 -0
  602. data/plugins/test_runner/spec/spec_helper.rb +5 -0
  603. data/plugins/textmate/features/bundle_tree.feature +23 -0
  604. data/plugins/textmate/features/step_definitions/tree_steps.rb +57 -0
  605. data/plugins/textmate/features/support/env.rb +19 -0
  606. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/If.tmSnippet +18 -0
  607. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/If__Else.tmSnippet +20 -0
  608. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Include.tmSnippet +16 -0
  609. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Loop.tmSnippet +18 -0
  610. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Unless.tmSnippet +18 -0
  611. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/Var.tmSnippet +16 -0
  612. data/plugins/textmate/features/support/test_bundle.tmbundle/Snippets/next_If__Else.tmSnippet +20 -0
  613. data/plugins/textmate/features/support/test_bundle.tmbundle/info.plist +26 -0
  614. data/plugins/textmate/lib/textmate.rb +202 -0
  615. data/plugins/textmate/lib/textmate/bundle.rb +100 -0
  616. data/plugins/textmate/lib/textmate/commands.rb +79 -0
  617. data/plugins/textmate/lib/textmate/environment.rb +76 -0
  618. data/plugins/textmate/lib/textmate/plist.rb +80 -0
  619. data/plugins/textmate/lib/textmate/preference.rb +125 -0
  620. data/plugins/textmate/lib/textmate/snippet.rb +47 -0
  621. data/plugins/textmate/lib/textmate/tree_mirror.rb +206 -0
  622. data/plugins/textmate/plugin.rb +8 -0
  623. data/plugins/textmate/views/installed_bundles.html.erb +24 -0
  624. data/plugins/todo_list/README.md +22 -0
  625. data/plugins/todo_list/features/support/env.rb +8 -0
  626. data/plugins/todo_list/features/todo_list.feature +26 -0
  627. data/plugins/todo_list/lib/todo_list.rb +49 -0
  628. data/plugins/todo_list/lib/todo_list/file_parser.rb +58 -0
  629. data/plugins/todo_list/lib/todo_list/todo_controller.rb +99 -0
  630. data/plugins/todo_list/plugin.rb +11 -0
  631. data/plugins/todo_list/spec/fixtures/project/FIXME.file +3 -0
  632. data/plugins/todo_list/spec/fixtures/project/NOTE.ignored.file +1 -0
  633. data/plugins/todo_list/spec/fixtures/project/OPTIMIZE_colon.file +1 -0
  634. data/plugins/todo_list/spec/fixtures/project/XXX.ignored +1 -0
  635. data/plugins/todo_list/spec/fixtures/project/ignored_directory/TODO.file +2 -0
  636. data/plugins/todo_list/spec/fixtures/settings.rb +11 -0
  637. data/plugins/todo_list/spec/spec_helper.rb +6 -0
  638. data/plugins/todo_list/spec/todo_list/file_parser_spec.rb +35 -0
  639. data/plugins/todo_list/views/default.css +15 -0
  640. data/plugins/todo_list/views/index.html.erb +19 -0
  641. data/plugins/todo_list/views/redcar_small_icon.png +0 -0
  642. data/plugins/tree_view_swt/lib/tree_view_swt.rb +496 -0
  643. data/plugins/tree_view_swt/plugin.rb +9 -0
  644. data/plugins/web_bookmarks/Screenshot.png +0 -0
  645. data/plugins/web_bookmarks/features/bookmark.feature +37 -0
  646. data/plugins/web_bookmarks/features/fixtures/other.html +1 -0
  647. data/plugins/web_bookmarks/features/fixtures/sample.html +1 -0
  648. data/plugins/web_bookmarks/features/step_definitions/web_steps.rb +4 -0
  649. data/plugins/web_bookmarks/features/support/env.rb +26 -0
  650. data/plugins/web_bookmarks/lib/web_bookmarks.rb +49 -0
  651. data/plugins/web_bookmarks/lib/web_bookmarks/bookmark.rb +52 -0
  652. data/plugins/web_bookmarks/lib/web_bookmarks/commands.rb +65 -0
  653. data/plugins/web_bookmarks/lib/web_bookmarks/tree.rb +74 -0
  654. data/plugins/web_bookmarks/plugin.rb +10 -0
  655. metadata +937 -0
@@ -0,0 +1,449 @@
1
+ module Redcar
2
+ class ProjectCommand < Command
3
+ sensitize :open_project
4
+
5
+ def project
6
+ Project::Manager.in_window(win)
7
+ end
8
+ end
9
+
10
+ class Project
11
+ class OpenFileCommand < Command
12
+ def initialize(path = nil, adapter = Adapters::Local.new)
13
+ @path = path
14
+ @adapter = adapter
15
+ end
16
+
17
+ def execute
18
+ path = get_path
19
+ if path
20
+ if File.readable? path
21
+ Manager.open_file(path, @adapter)
22
+ else
23
+ Application::Dialog.message_box(
24
+ "Can't read #{path}, you don't have the permissions.",
25
+ :type => :error,
26
+ :buttons => :ok
27
+ )
28
+ end
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def get_path
35
+ @path || begin
36
+ if path = Application::Dialog.open_file(:filter_path => Manager.filter_path)
37
+ Manager.storage['last_dir'] = File.dirname(File.expand_path(path))
38
+ path
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ class FileReloadCommand < EditTabCommand
45
+ def initialize(path = nil, adapter = Adapters::Local.new)
46
+ @path = path
47
+ end
48
+
49
+ def execute
50
+ if tab.edit_view.document.modified?
51
+ result = Application::Dialog.message_box("This tab has unsaved changes. \n\nReload?",
52
+ :buttons => :yes_no_cancel)
53
+ case result
54
+ when :yes
55
+ tab.edit_view.document.update_from_mirror
56
+ when :no
57
+ when :cancel
58
+ end
59
+ else
60
+ tab.edit_view.document.update_from_mirror
61
+ end
62
+ end
63
+ end
64
+
65
+ class OpenRemoteSpeedbar < Redcar::Speedbar
66
+
67
+ class << self
68
+ attr_accessor :connection
69
+
70
+ def connections
71
+ ConnectionManager::ConnectionStore.new.connections
72
+ end
73
+
74
+ def connection_names
75
+ if connections && connections.any?
76
+ ['Select...', connections.map { |c| c.name }].flatten
77
+ end
78
+ end
79
+ end
80
+
81
+ def initialize
82
+ connection.items = self.class.connection_names
83
+ end
84
+
85
+ label :connection_label, 'Connect to:'
86
+ combo :connection
87
+
88
+ button :connect, "Connect", "Return" do
89
+ selected = self.class.connections.find { |c| c.name == connection.value }
90
+
91
+ Manager.connect_to_remote(selected[:protocol], selected[:host],
92
+ selected[:user], selected[:path], ConnectionManager::PrivateKeyStore.paths)
93
+ end
94
+
95
+ button :quick, "Quick Connection", "Ctrl+Q" do
96
+ @speedbar = QuickOpenRemoteSpeedbar.new
97
+ Redcar.app.focussed_window.open_speedbar(@speedbar)
98
+ end
99
+
100
+ button :manage, "Connections Manager", "Ctrl+M" do
101
+ Redcar.app.focussed_window.close_speedbar
102
+ Redcar::ConnectionManager::OpenCommand.new.run
103
+ end
104
+ end
105
+
106
+ class QuickOpenRemoteSpeedbar < Redcar::Speedbar
107
+ class << self
108
+ attr_accessor :host
109
+ attr_accessor :user
110
+ attr_accessor :password
111
+ attr_accessor :path
112
+ attr_accessor :protocol
113
+ end
114
+
115
+ combo :protocol, %w(SFTP FTP), 'SFTP'
116
+
117
+ label :host_label, "Host:"
118
+ textbox :host
119
+
120
+ label :user_label, "User:"
121
+ textbox :user
122
+
123
+ label :path_label, "Path:"
124
+ textbox :path
125
+
126
+ button :connect, "Connect", "Return" do
127
+ Manager.connect_to_remote(protocol.value, host.value, user.value,
128
+ path.value, ConnectionManager::PrivateKeyStore.paths)
129
+ end
130
+ end
131
+
132
+ #class OpenRemoteCommand < Command
133
+ # def initialize(url=nil)
134
+ # @url = url
135
+ # end
136
+ #
137
+ # def execute
138
+ # unless @url
139
+ # @speedbar = OpenRemoteSpeedbar.new
140
+ # win.open_speedbar(@speedbar)
141
+ # end
142
+ # end
143
+ #end
144
+
145
+ class SaveFileCommand < EditTabCommand
146
+ def initialize(tab=nil)
147
+ @tab = tab
148
+ end
149
+
150
+ def execute
151
+ if tab.edit_view.document.mirror
152
+ path = tab.edit_view.document.mirror.path
153
+ dir = File.dirname(path)
154
+ writable_file = File.writable?(path)
155
+ writable_dir = File.writable?(dir) # this method buggy in windows: http://redmine.ruby-lang.org/issues/4712
156
+ file_exists = File.exist?(path)
157
+ can_write = writable_file || (!file_exists && writable_dir)
158
+ if can_write
159
+ begin
160
+ tab.edit_view.document.save!
161
+ Project::Manager.refresh_modified_file(tab.edit_view.document.mirror.path)
162
+ rescue Errno::EACCES # windows
163
+ show_dialog = true
164
+ end
165
+ else
166
+ show_dialog = true
167
+ end
168
+
169
+ if show_dialog
170
+ Application::Dialog.message_box(
171
+ "Can't save #{tab.edit_view.document.mirror.path}, you don't have the permissions.",
172
+ :type => :error,
173
+ :buttons => :ok
174
+ )
175
+ result = false
176
+ end
177
+ else
178
+ result = SaveFileAsCommand.new.run
179
+ end
180
+ tab.update_for_file_changes
181
+ result ||= true
182
+ return result
183
+ end
184
+ end
185
+
186
+ class SaveFileAsCommand < EditTabCommand
187
+
188
+ def initialize(tab=nil, path=nil)
189
+ @tab = tab
190
+ @path = path
191
+ end
192
+
193
+ def execute
194
+ path = get_path
195
+ if path
196
+ if File.exists?(path) ? File.writable?(path) : File.writable?(File.dirname(path))
197
+ contents = tab.edit_view.document.to_s
198
+ new_mirror = FileMirror.new(path)
199
+ new_mirror.commit(contents)
200
+ tab.edit_view.document.mirror = new_mirror
201
+ Project::Manager.refresh_modified_file(tab.edit_view.document.mirror.path)
202
+ else
203
+ Application::Dialog.message_box(
204
+ "Can't save #{path}, you don't have the permissions.",
205
+ :type => :error,
206
+ :buttons => :ok
207
+ )
208
+ result = false
209
+ end
210
+ end
211
+ result ||= true
212
+ return result
213
+ end
214
+
215
+ private
216
+
217
+ def get_path
218
+ @path || begin
219
+ if path = Application::Dialog.save_file(:filter_path => Manager.filter_path)
220
+ Manager.storage['last_dir'] = File.dirname(File.expand_path(path))
221
+ path
222
+ end
223
+ end
224
+ end
225
+ end
226
+
227
+ class DirectoryOpenCommand < Command
228
+
229
+ def initialize(path=nil)
230
+ @path = path
231
+ end
232
+
233
+ def execute
234
+ if path = get_path
235
+ project = Manager.open_project_for_path(path)
236
+ project.refresh if project
237
+ end
238
+ end
239
+
240
+ private
241
+
242
+ def get_path
243
+ @path || begin
244
+ if path = Application::Dialog.open_directory(:filter_path => Manager.filter_path)
245
+ Manager.storage['last_dir'] = File.dirname(File.expand_path(path))
246
+ path
247
+ end
248
+ end
249
+ end
250
+ end
251
+
252
+ class RefreshDirectoryCommand < ProjectCommand
253
+
254
+ def execute
255
+ project.refresh
256
+ end
257
+ end
258
+
259
+ class FindFileCommand < ProjectCommand
260
+
261
+ def execute
262
+ if Manager.focussed_project.remote?
263
+ Application::Dialog.message_box("Find file doesn't work in remote projects yet :(")
264
+ return
265
+ end
266
+ dialog = FindFileDialog.new(Manager.focussed_project)
267
+ dialog.open
268
+ end
269
+ end
270
+
271
+ class FindRecentCommand < Command
272
+ def execute
273
+ Redcar.app.make_sure_at_least_one_window_open
274
+ FindRecentDialog.new.open
275
+ end
276
+ end
277
+
278
+ class RevealInProjectCommand < ProjectCommand
279
+ def execute
280
+ if project
281
+ tab = Redcar.app.focussed_window.focussed_notebook_tab
282
+ if tab.is_a?(EditTab)
283
+ return unless mirror = tab.edit_view.document.mirror and mirror.respond_to? :path
284
+ else
285
+ return
286
+ end
287
+
288
+ path = mirror.path
289
+ tree = project.tree
290
+ current = tree.tree_mirror.top
291
+ while current.any?
292
+ ancestor_node = current.detect {|node| path =~ /^#{node.path}($|\/)/ }
293
+ return unless ancestor_node
294
+ tree.expand(ancestor_node)
295
+ current = ancestor_node.children
296
+ end
297
+ tree.select(ancestor_node)
298
+ project.window.treebook.focus_tree(project.tree)
299
+ end
300
+ end
301
+ end
302
+
303
+ class ToggleRevealInProject < ProjectCommand
304
+ def execute
305
+ toggle = Project::Manager.reveal_files?
306
+ Project::Manager.reveal_files = !toggle
307
+ end
308
+ end
309
+
310
+ # FIXME: XXX: The rest of this file is outright ugly. The Redcar.platform ultimately
311
+ # needs to return a platform object which we can dispatch to for commandlines,
312
+ # configuration, escaping and all that.
313
+ class OpenCommand < Command
314
+ attr_reader :path
315
+
316
+ def initialize(path)
317
+ @path = path
318
+ end
319
+
320
+ def find(executable)
321
+ path = if Redcar.platform == :windows
322
+ ENV['PATH'].split(';')
323
+ else
324
+ ENV['PATH'].split(':')
325
+ end.find {|d| File.exist?(File.join(d, executable))}
326
+
327
+ if path
328
+ File.join(path, executable)
329
+ else
330
+ nil
331
+ end
332
+ end
333
+
334
+ def run_application(app, *options)
335
+ # TODO: Investigate why Spoon doesn't seem to work on osx
336
+ if SPOON_AVAILABLE and Redcar.platform != :osx
337
+ ::Spoon.spawn(app, *options)
338
+ else
339
+ # TODO: This really needs proper escaping.
340
+ options = options.map {|o| %{ "#{o}" } }.join(' ')
341
+ Thread.new do
342
+ system("#{app} #{options}")
343
+ puts " Finished: #{app} #{options}"
344
+ end
345
+ end
346
+ end
347
+ end
348
+
349
+ class OpenDirectoryInExplorerCommand < OpenCommand
350
+ LinuxApps = {
351
+ 'Thunar' => '%s',
352
+ 'nautilus' => '%s',
353
+ 'konqueror' => '%s',
354
+ 'pcmanfm' => '%s',
355
+ 'kfm' => '%s'
356
+ }
357
+
358
+ def explorer_osx
359
+ ['open -a Finder', path]
360
+ end
361
+
362
+ def explorer_windows
363
+ ['explorer.exe', path.gsub("/", "\\")]
364
+ end
365
+
366
+ def explorer_linux
367
+ preferred = Manager.storage['preferred_file_browser']
368
+ run = preferred if LinuxApps[preferred] and find(preferred)
369
+ LinuxApps.keys.detect {|a| run = @command.find(a) } unless run
370
+
371
+ Manager.storage['preferred_file_browser'] = run unless preferred
372
+
373
+ [run, LinuxApps[File.basename(run)] % path ] if run
374
+ end
375
+
376
+ def execute(options = nil)
377
+ @path ||= options[:value]
378
+ @command = self
379
+ cmd = send(:"explorer_#{Redcar.platform}")
380
+ if cmd
381
+ run_application(*cmd)
382
+ else
383
+ Application::Dialog.message_box("Sorry, we couldn't start your file manager. Please let us know what file manager you use, so we can fix this!")
384
+ end
385
+ end
386
+ end
387
+
388
+ class OpenDirectoryInCommandLineCommand < OpenCommand
389
+ LinuxApps = {
390
+ 'xfce4-terminal' => "--working-directory=%s",
391
+ 'gnome-terminal' => "--working-directory=%s",
392
+ 'lxterminal' => "--working-directory=%s",
393
+ 'konsole' => "--workdir %s"
394
+ }
395
+
396
+ def osx_terminal_script(preferred)
397
+ if preferred.start_with? "iTerm"
398
+ <<-OSASCRIPT
399
+ tell the first terminal
400
+ launch session "Default Session"
401
+ tell the last session
402
+ write text "cd \\\"#{path}\\\""
403
+ end tell
404
+ end tell
405
+ OSASCRIPT
406
+ else
407
+ %{ do script "cd \\\"#{path}\\\"" }
408
+ end
409
+ end
410
+
411
+ def commandline_osx
412
+ preferred = (Manager.storage['preferred_command_line'] ||= "Terminal")
413
+ <<-BASH.gsub(/^\s*/, '')
414
+ osascript <<END
415
+ tell application "#{preferred}"
416
+ #{osx_terminal_script(preferred)}
417
+ activate
418
+ end tell
419
+ END
420
+ BASH
421
+ end
422
+
423
+ def commandline_windows
424
+ ['start cmd.exe /kcd ', path.gsub("/","\\")]
425
+ end
426
+
427
+ def commandline_linux
428
+ preferred = Manager.storage['preferred_command_line']
429
+ run = preferred if LinuxApps[preferred] and find(preferred)
430
+ LinuxApps.keys.detect {|a| run = @command.find(a) } unless run
431
+
432
+ Manager.storage['preferred_command_line'] = run unless preferred
433
+
434
+ [run, LinuxApps[File.basename(run)] % path ] if run
435
+ end
436
+
437
+ def execute(options = nil)
438
+ @path ||= options[:value]
439
+ @command = self
440
+ cmd = send(:"commandline_#{Redcar.platform}")
441
+ if cmd
442
+ run_application(*cmd)
443
+ else
444
+ Application::Dialog.message_box("Sorry, we couldn't start your command line. Please let us know what command line you use, so we can fix this!")
445
+ end
446
+ end
447
+ end
448
+ end
449
+ end
@@ -0,0 +1,275 @@
1
+
2
+ module Redcar
3
+ class Project
4
+ class DirController
5
+ include Redcar::Tree::Controller
6
+
7
+ def self.adapter(node, tree=nil)
8
+ node ? node.adapter : tree.tree_mirror.adapter
9
+ end
10
+
11
+ def activated(tree, node)
12
+ if node.leaf?
13
+ OpenFileCommand.new(node.path, node.adapter).run
14
+ end
15
+ end
16
+
17
+ def handle_error(tree, error)
18
+ tree.close
19
+ Application::Dialog.message_box(error.message, :type => :error)
20
+ end
21
+
22
+ class DragController
23
+ include Redcar::Tree::Controller::DragController
24
+
25
+ attr_reader :tree
26
+
27
+ def initialize(tree)
28
+ @tree = tree
29
+ end
30
+
31
+ def reorderable?
32
+ false
33
+ end
34
+
35
+ def can_drop?(nodes, target, position)
36
+ nodes and nodes.all? {|node| droppable?(node, target)}
37
+ end
38
+
39
+ def do_drop(nodes, target, position)
40
+ return unless nodes
41
+ paths = nodes.map {|node| node.path }
42
+ non_nested_paths = remove_nested_paths(paths)
43
+ non_nested_paths.each do |path|
44
+ dir = target ? target.directory : tree.tree_mirror.path
45
+ unless File.dirname(path) == dir
46
+ adapter = DirController.adapter(target, tree)
47
+ adapter.mv(path, dir)
48
+ end
49
+ end
50
+ tree.refresh
51
+ end
52
+
53
+ private
54
+
55
+ def droppable?(from_node, target_node)
56
+ return false unless from_node
57
+
58
+ # you can always drop into the top level of the tree
59
+ return true if target_node == nil
60
+
61
+ # can't drop a file/dir onto itself
62
+ return false if from_node.path == target_node.path
63
+
64
+ # can't drop a directory into its children
65
+ !child_of?(from_node.path, target_node.path)
66
+ end
67
+
68
+ def child_of?(path, possible_child_path)
69
+ possible_child_path =~ /^#{Regexp.escape(path)}\//
70
+ end
71
+
72
+ # Removes paths which are children of higher level paths also being
73
+ # dragged.
74
+ def remove_nested_paths(paths)
75
+ sorted = paths.sort
76
+ keep = [sorted.first]
77
+ sorted[1..-1].each do |path|
78
+ unless child_of?(keep.last, path)
79
+ keep << path
80
+ end
81
+ end
82
+ keep
83
+ end
84
+ end
85
+
86
+ def drag_controller(tree)
87
+ DragController.new(tree)
88
+ end
89
+
90
+ def right_click(tree, node)
91
+ controller = self
92
+
93
+ menu = Menu.new
94
+ Redcar.plugin_manager.objects_implementing(:project_context_menus).each do |object|
95
+ # a lot of plugins will only really care about the node that was clicked
96
+ case object.method(:project_context_menus).arity
97
+ when 1
98
+ menu.merge(object.project_context_menus(node))
99
+ when 2
100
+ menu.merge(object.project_context_menus(tree, node))
101
+ when 3
102
+ menu.merge(object.project_context_menus(tree, node, controller))
103
+ else
104
+ puts("Invalid project_context_menus hook detected in "+object.class.name)
105
+ end
106
+ end
107
+
108
+ Application::Dialog.popup_menu(menu, :pointer)
109
+ end
110
+
111
+ def new_file(tree, node)
112
+ enclosing_dir = node ? node.directory : tree.tree_mirror.path
113
+ new_file_name = uniq_name(enclosing_dir, "New File")
114
+ new_file_path = File.join(enclosing_dir, new_file_name)
115
+
116
+ adapter = DirController.adapter(node, tree)
117
+ adapter.touch(new_file_path)
118
+ tree.refresh
119
+ tree.expand(node)
120
+ new_file_node = DirMirror::Node.cache[new_file_path]
121
+ tree.edit(new_file_node)
122
+ end
123
+
124
+ def new_dir(tree, node)
125
+ enclosing_dir = node ? node.directory : tree.tree_mirror.path
126
+ new_dir_name = uniq_name(enclosing_dir, "New Directory")
127
+ new_dir_path = File.join(enclosing_dir, new_dir_name)
128
+ adapter = DirController.adapter(node, tree)
129
+ adapter.mkdir(new_dir_path)
130
+ tree.refresh
131
+ tree.expand(node)
132
+ new_dir_node = DirMirror::Node.cache[new_dir_path]
133
+ tree.edit(new_dir_node)
134
+ end
135
+
136
+ def rename(tree, node)
137
+ nodes = tree.selection
138
+ if nodes.length == 1
139
+ single_rename(tree, node)
140
+ else
141
+ bulk_rename(tree, nodes)
142
+ end
143
+ end
144
+
145
+ def single_rename(tree, node)
146
+ if node.text =~ /^(.*)\.[^\.]+$/
147
+ tree.edit(node, 0, $1.length)
148
+ else
149
+ tree.edit(node)
150
+ end
151
+ end
152
+
153
+ def bulk_rename(tree, nodes)
154
+ tab = Redcar.app.focussed_window.new_tab(HtmlTab)
155
+ controller = BulkRenameController.new(tab, tree, nodes)
156
+ tab.html_view.controller = controller
157
+ tab.focus
158
+ end
159
+
160
+ class BulkRenameController
161
+ include Redcar::HtmlController
162
+
163
+ attr_reader :pairs, :match_pattern, :replace_pattern
164
+
165
+ def initialize(tab, tree, nodes)
166
+ @tab = tab
167
+ @tree = tree
168
+ @pairs = nodes.map {|node| [node, File.basename(node.path)] }
169
+ @match_pattern = ""
170
+ @replace_pattern = ""
171
+ @adapter = DirController.adapter(nodes.first, tree)
172
+ end
173
+
174
+ def title
175
+ "Bulk Rename"
176
+ end
177
+
178
+ def index
179
+ rhtml = ERB.new(File.read(File.join(File.dirname(__FILE__), "..", "..", "views", "bulk_rename.html.erb")))
180
+ rhtml.result(binding)
181
+ end
182
+
183
+ def refresh(new_match_pattern, new_replace_pattern)
184
+ begin
185
+ @match_pattern = /#{new_match_pattern}/
186
+ rescue
187
+ return []
188
+ end
189
+ @replace_pattern = new_replace_pattern
190
+ result = @pairs.map do |node, _|
191
+ old_name = File.basename(node.path)
192
+ new_name = transform_name(old_name)
193
+ new_path = File.join(File.dirname(node.path), new_name)
194
+ conflicts = (@adapter.exists?(new_path) and new_name != old_name)
195
+ legal = (new_name != "" and legal_path?(new_path))
196
+ [new_name, conflicts, legal]
197
+ end
198
+ result
199
+ rescue => e
200
+ puts e.class
201
+ puts e.message
202
+ puts e.backtrace
203
+ end
204
+
205
+ def submit(params)
206
+ @pairs.each do |node, _|
207
+ old_name = File.basename(node.path)
208
+ new_name = transform_name(old_name)
209
+ next if old_name == new_name
210
+ new_path = File.join(File.dirname(node.path), new_name)
211
+ @adapter.mv(node.path, new_path)
212
+ end
213
+ @tab.close
214
+ @tree.refresh
215
+ end
216
+
217
+ private
218
+
219
+ def transform_name(old_name)
220
+ old_name.sub(match_pattern, replace_pattern)
221
+ end
222
+
223
+ def legal_path?(path)
224
+ return true if File.exist?(path)
225
+
226
+ begin
227
+ FileUtils.touch(path)
228
+ FileUtils.rm(path)
229
+ return true
230
+ rescue Errno::ENOENT
231
+ return false
232
+ end
233
+ end
234
+ end
235
+
236
+ def delete(tree, _)
237
+ nodes = tree.selection
238
+ basenames = nodes.map {|node| File.basename(node.path) }
239
+ msg = "Really delete #{basenames.join(", ")}?"
240
+ result = Application::Dialog.message_box(msg, :type => :question, :buttons => :yes_no)
241
+ if result == :yes
242
+ nodes.each do |node|
243
+ node.adapter.delete(node.path)
244
+ end
245
+ tree.refresh
246
+ end
247
+ end
248
+
249
+ def edited(tree, node, text)
250
+ new_path = File.expand_path(File.join(File.dirname(node.path), text))
251
+ return if node.path == new_path
252
+
253
+ adapter = DirController.adapter(node, tree)
254
+ adapter.mv(node.path, new_path)
255
+ tree.refresh
256
+ new_node = DirMirror::Node.create_from_path(adapter, {:fullname => new_path, :type => node.type})
257
+ tree.select(new_node)
258
+ end
259
+
260
+ private
261
+
262
+ def uniq_name(path, name)
263
+ return name unless File.exist?(File.join(path, name))
264
+ i = 1
265
+ loop do
266
+ new_name = name + " #{i}"
267
+ return new_name unless File.exist?(File.join(path, new_name))
268
+ i += 1
269
+ end
270
+ end
271
+ end
272
+ end
273
+ end
274
+
275
+