redcar 0.3.2dev → 0.3.3

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 (485) hide show
  1. data/CHANGES +49 -2
  2. data/README.md +2 -7
  3. data/ROADMAP.md +8 -9
  4. data/Rakefile +29 -44
  5. data/bin/redcar +11 -2
  6. data/lib/openssl/History.txt +75 -0
  7. data/lib/openssl/License.txt +30 -0
  8. data/lib/openssl/Manifest.txt +99 -0
  9. data/lib/openssl/README.txt +24 -0
  10. data/lib/openssl/Rakefile +71 -0
  11. data/lib/openssl/build.properties.SAMPLE +7 -0
  12. data/lib/openssl/build.xml +57 -0
  13. data/lib/openssl/lib/jopenssl/version.rb +5 -0
  14. data/lib/openssl/lib/openssl.rb +24 -0
  15. data/lib/openssl/lib/openssl/bn.rb +33 -0
  16. data/lib/openssl/lib/openssl/buffering.rb +239 -0
  17. data/lib/openssl/lib/openssl/cipher.rb +56 -0
  18. data/lib/openssl/lib/openssl/digest.rb +46 -0
  19. data/lib/openssl/lib/openssl/dummy.rb +34 -0
  20. data/lib/openssl/lib/openssl/dummyssl.rb +13 -0
  21. data/lib/openssl/lib/openssl/ssl.rb +135 -0
  22. data/lib/openssl/lib/openssl/x509.rb +154 -0
  23. data/lib/openssl/mocha/COPYING +3 -0
  24. data/lib/openssl/mocha/MIT-LICENSE +7 -0
  25. data/lib/openssl/mocha/README +35 -0
  26. data/lib/openssl/mocha/RELEASE +171 -0
  27. data/lib/openssl/mocha/Rakefile +147 -0
  28. data/lib/openssl/mocha/TODO +48 -0
  29. data/lib/openssl/mocha/examples/misc.rb +36 -0
  30. data/lib/openssl/mocha/examples/mocha.rb +26 -0
  31. data/lib/openssl/mocha/examples/stubba.rb +65 -0
  32. data/lib/openssl/mocha/init.rb +3 -0
  33. data/lib/openssl/mocha/lib/mocha.rb +19 -0
  34. data/lib/openssl/mocha/lib/mocha/any_instance_method.rb +35 -0
  35. data/lib/openssl/mocha/lib/mocha/auto_verify.rb +111 -0
  36. data/lib/openssl/mocha/lib/mocha/central.rb +35 -0
  37. data/lib/openssl/mocha/lib/mocha/class_method.rb +62 -0
  38. data/lib/openssl/mocha/lib/mocha/deprecation.rb +22 -0
  39. data/lib/openssl/mocha/lib/mocha/exception_raiser.rb +17 -0
  40. data/lib/openssl/mocha/lib/mocha/expectation.rb +382 -0
  41. data/lib/openssl/mocha/lib/mocha/expectation_error.rb +6 -0
  42. data/lib/openssl/mocha/lib/mocha/expectation_list.rb +45 -0
  43. data/lib/openssl/mocha/lib/mocha/infinite_range.rb +25 -0
  44. data/lib/openssl/mocha/lib/mocha/inspect.rb +39 -0
  45. data/lib/openssl/mocha/lib/mocha/instance_method.rb +8 -0
  46. data/lib/openssl/mocha/lib/mocha/is_a.rb +9 -0
  47. data/lib/openssl/mocha/lib/mocha/metaclass.rb +7 -0
  48. data/lib/openssl/mocha/lib/mocha/missing_expectation.rb +27 -0
  49. data/lib/openssl/mocha/lib/mocha/mock.rb +200 -0
  50. data/lib/openssl/mocha/lib/mocha/multiple_yields.rb +20 -0
  51. data/lib/openssl/mocha/lib/mocha/no_yields.rb +11 -0
  52. data/lib/openssl/mocha/lib/mocha/object.rb +110 -0
  53. data/lib/openssl/mocha/lib/mocha/parameter_matchers.rb +9 -0
  54. data/lib/openssl/mocha/lib/mocha/parameter_matchers/all_of.rb +39 -0
  55. data/lib/openssl/mocha/lib/mocha/parameter_matchers/any_of.rb +44 -0
  56. data/lib/openssl/mocha/lib/mocha/parameter_matchers/anything.rb +30 -0
  57. data/lib/openssl/mocha/lib/mocha/parameter_matchers/has_entry.rb +39 -0
  58. data/lib/openssl/mocha/lib/mocha/parameter_matchers/has_key.rb +39 -0
  59. data/lib/openssl/mocha/lib/mocha/parameter_matchers/has_value.rb +39 -0
  60. data/lib/openssl/mocha/lib/mocha/parameter_matchers/includes.rb +37 -0
  61. data/lib/openssl/mocha/lib/mocha/parameter_matchers/instance_of.rb +39 -0
  62. data/lib/openssl/mocha/lib/mocha/parameter_matchers/kind_of.rb +39 -0
  63. data/lib/openssl/mocha/lib/mocha/pretty_parameters.rb +28 -0
  64. data/lib/openssl/mocha/lib/mocha/return_values.rb +31 -0
  65. data/lib/openssl/mocha/lib/mocha/setup_and_teardown.rb +23 -0
  66. data/lib/openssl/mocha/lib/mocha/single_return_value.rb +24 -0
  67. data/lib/openssl/mocha/lib/mocha/single_yield.rb +18 -0
  68. data/lib/openssl/mocha/lib/mocha/standalone.rb +32 -0
  69. data/lib/openssl/mocha/lib/mocha/stub.rb +18 -0
  70. data/lib/openssl/mocha/lib/mocha/test_case_adapter.rb +49 -0
  71. data/lib/openssl/mocha/lib/mocha/yield_parameters.rb +31 -0
  72. data/lib/openssl/mocha/lib/mocha_standalone.rb +2 -0
  73. data/lib/openssl/mocha/lib/stubba.rb +2 -0
  74. data/lib/openssl/mocha/templates/html_with_google_analytics.rb +742 -0
  75. data/lib/openssl/mocha/test/acceptance/expected_invocation_count_acceptance_test.rb +187 -0
  76. data/lib/openssl/mocha/test/acceptance/mocha_acceptance_test.rb +98 -0
  77. data/lib/openssl/mocha/test/acceptance/mocked_methods_dispatch_acceptance_test.rb +71 -0
  78. data/lib/openssl/mocha/test/acceptance/parameter_matcher_acceptance_test.rb +63 -0
  79. data/lib/openssl/mocha/test/acceptance/standalone_acceptance_test.rb +131 -0
  80. data/lib/openssl/mocha/test/acceptance/stubba_acceptance_test.rb +102 -0
  81. data/lib/openssl/mocha/test/active_record_test_case.rb +36 -0
  82. data/lib/openssl/mocha/test/deprecation_disabler.rb +15 -0
  83. data/lib/openssl/mocha/test/execution_point.rb +34 -0
  84. data/lib/openssl/mocha/test/integration/mocha_test_result_integration_test.rb +105 -0
  85. data/lib/openssl/mocha/test/integration/stubba_integration_test.rb +89 -0
  86. data/lib/openssl/mocha/test/integration/stubba_test_result_integration_test.rb +85 -0
  87. data/lib/openssl/mocha/test/method_definer.rb +18 -0
  88. data/lib/openssl/mocha/test/test_helper.rb +12 -0
  89. data/lib/openssl/mocha/test/test_runner.rb +31 -0
  90. data/lib/openssl/mocha/test/unit/any_instance_method_test.rb +124 -0
  91. data/lib/openssl/mocha/test/unit/array_inspect_test.rb +16 -0
  92. data/lib/openssl/mocha/test/unit/auto_verify_test.rb +122 -0
  93. data/lib/openssl/mocha/test/unit/central_test.rb +124 -0
  94. data/lib/openssl/mocha/test/unit/class_method_test.rb +196 -0
  95. data/lib/openssl/mocha/test/unit/date_time_inspect_test.rb +21 -0
  96. data/lib/openssl/mocha/test/unit/expectation_list_test.rb +69 -0
  97. data/lib/openssl/mocha/test/unit/expectation_raiser_test.rb +28 -0
  98. data/lib/openssl/mocha/test/unit/expectation_test.rb +399 -0
  99. data/lib/openssl/mocha/test/unit/hash_inspect_test.rb +16 -0
  100. data/lib/openssl/mocha/test/unit/infinite_range_test.rb +53 -0
  101. data/lib/openssl/mocha/test/unit/metaclass_test.rb +22 -0
  102. data/lib/openssl/mocha/test/unit/missing_expectation_test.rb +45 -0
  103. data/lib/openssl/mocha/test/unit/mock_test.rb +316 -0
  104. data/lib/openssl/mocha/test/unit/multiple_yields_test.rb +18 -0
  105. data/lib/openssl/mocha/test/unit/no_yield_test.rb +18 -0
  106. data/lib/openssl/mocha/test/unit/object_inspect_test.rb +35 -0
  107. data/lib/openssl/mocha/test/unit/object_test.rb +165 -0
  108. data/lib/openssl/mocha/test/unit/parameter_matchers/all_of_test.rb +26 -0
  109. data/lib/openssl/mocha/test/unit/parameter_matchers/any_of_test.rb +26 -0
  110. data/lib/openssl/mocha/test/unit/parameter_matchers/anything_test.rb +21 -0
  111. data/lib/openssl/mocha/test/unit/parameter_matchers/has_entry_test.rb +25 -0
  112. data/lib/openssl/mocha/test/unit/parameter_matchers/has_key_test.rb +25 -0
  113. data/lib/openssl/mocha/test/unit/parameter_matchers/has_value_test.rb +25 -0
  114. data/lib/openssl/mocha/test/unit/parameter_matchers/includes_test.rb +25 -0
  115. data/lib/openssl/mocha/test/unit/parameter_matchers/instance_of_test.rb +25 -0
  116. data/lib/openssl/mocha/test/unit/parameter_matchers/kind_of_test.rb +25 -0
  117. data/lib/openssl/mocha/test/unit/parameter_matchers/stub_matcher.rb +22 -0
  118. data/lib/openssl/mocha/test/unit/pretty_parameters_test.rb +32 -0
  119. data/lib/openssl/mocha/test/unit/return_values_test.rb +63 -0
  120. data/lib/openssl/mocha/test/unit/setup_and_teardown_test.rb +76 -0
  121. data/lib/openssl/mocha/test/unit/single_return_value_test.rb +33 -0
  122. data/lib/openssl/mocha/test/unit/single_yield_test.rb +18 -0
  123. data/lib/openssl/mocha/test/unit/string_inspect_test.rb +11 -0
  124. data/lib/openssl/mocha/test/unit/stub_test.rb +24 -0
  125. data/lib/openssl/mocha/test/unit/yield_parameters_test.rb +93 -0
  126. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/FOLDERS +53 -0
  127. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/LICENSE +340 -0
  128. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/README +117 -0
  129. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/bin/coderay +77 -0
  130. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/bin/coderay_stylesheet +4 -0
  131. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay.rb +319 -0
  132. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/duo.rb +29 -0
  133. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoder.rb +173 -0
  134. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/_map.rb +8 -0
  135. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/count.rb +21 -0
  136. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/debug.rb +46 -0
  137. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/div.rb +20 -0
  138. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html.rb +260 -0
  139. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/classes.rb +77 -0
  140. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/css.rb +65 -0
  141. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/numerization.rb +122 -0
  142. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/html/output.rb +195 -0
  143. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/null.rb +26 -0
  144. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/page.rb +21 -0
  145. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/span.rb +20 -0
  146. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/statistic.rb +81 -0
  147. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/text.rb +33 -0
  148. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/tokens.rb +44 -0
  149. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/xml.rb +71 -0
  150. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/encoders/yaml.rb +22 -0
  151. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/file_type.rb +182 -0
  152. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/gzip_simple.rb +122 -0
  153. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/plugin.rb +326 -0
  154. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/helpers/word_list.rb +119 -0
  155. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanner.rb +238 -0
  156. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/_map.rb +15 -0
  157. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/c.rb +163 -0
  158. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/debug.rb +60 -0
  159. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/delphi.rb +149 -0
  160. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/html.rb +177 -0
  161. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/nitro_xhtml.rb +133 -0
  162. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/plaintext.rb +16 -0
  163. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/rhtml.rb +73 -0
  164. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/ruby.rb +367 -0
  165. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/ruby/patterns.rb +230 -0
  166. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/scanners/xml.rb +18 -0
  167. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/style.rb +20 -0
  168. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/styles/_map.rb +7 -0
  169. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/styles/cycnus.rb +125 -0
  170. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/styles/murphy.rb +119 -0
  171. data/lib/openssl/mocha/vendor/coderay-0.7.4.215/lib/coderay/tokens.rb +368 -0
  172. data/lib/openssl/mocha/vendor/meta_project-0.4.15/CHANGES +295 -0
  173. data/lib/openssl/mocha/vendor/meta_project-0.4.15/MIT-LICENSE +21 -0
  174. data/lib/openssl/mocha/vendor/meta_project-0.4.15/README +129 -0
  175. data/lib/openssl/mocha/vendor/meta_project-0.4.15/Rakefile +152 -0
  176. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project.rb +19 -0
  177. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/core_ext/open_uri.rb +22 -0
  178. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/core_ext/pathname.rb +36 -0
  179. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/core_ext/string.rb +5 -0
  180. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/http/multipart.rb +32 -0
  181. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/patois.rb +1 -0
  182. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/patois/parser.rb +99 -0
  183. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project.rb +4 -0
  184. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/base.rb +9 -0
  185. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/codehaus.rb +1 -0
  186. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/codehaus/codehaus_project_svn.rb +31 -0
  187. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/trac.rb +1 -0
  188. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/trac/trac_project.rb +54 -0
  189. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge.rb +5 -0
  190. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/ruby_forge.rb +47 -0
  191. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/session.rb +177 -0
  192. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/source_forge.rb +50 -0
  193. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/xfile.rb +45 -0
  194. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project/xforge/xforge_base.rb +85 -0
  195. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/project_analyzer.rb +36 -0
  196. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/release/freshmeat.rb +267 -0
  197. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/release/raa.rb +572 -0
  198. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/scm_web.rb +2 -0
  199. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/scm_web/browser.rb +112 -0
  200. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/scm_web/pathname.rb +89 -0
  201. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker.rb +6 -0
  202. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/base.rb +24 -0
  203. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/digit_issues.rb +34 -0
  204. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/issue.rb +57 -0
  205. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/jira.rb +2 -0
  206. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/jira/jira_issues.rb +35 -0
  207. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/jira/jira_tracker.rb +149 -0
  208. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/trac.rb +1 -0
  209. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/trac/trac_tracker.rb +33 -0
  210. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge.rb +3 -0
  211. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge/ruby_forge_tracker.rb +17 -0
  212. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge/source_forge_tracker.rb +17 -0
  213. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/tracker/xforge/xforge_tracker.rb +191 -0
  214. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/meta_project/version_parser.rb +52 -0
  215. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge.rb +3 -0
  216. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge/base.rb +64 -0
  217. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge/news_publisher.rb +97 -0
  218. data/lib/openssl/mocha/vendor/meta_project-0.4.15/lib/rake/contrib/xforge/release.rb +134 -0
  219. data/lib/openssl/nbproject/genfiles.properties +5 -0
  220. data/lib/openssl/nbproject/jdk.xml +157 -0
  221. data/lib/openssl/nbproject/nbjdk.properties +1 -0
  222. data/lib/openssl/nbproject/nbjdk.xml +16 -0
  223. data/lib/openssl/nbproject/project.xml +117 -0
  224. data/lib/openssl/src/java/JopensslService.java +41 -0
  225. data/lib/openssl/src/java/org/jruby/ext/openssl/ASN1.java +930 -0
  226. data/lib/openssl/src/java/org/jruby/ext/openssl/Attribute.java +132 -0
  227. data/lib/openssl/src/java/org/jruby/ext/openssl/BN.java +769 -0
  228. data/lib/openssl/src/java/org/jruby/ext/openssl/BouncyCastlePEMHandler.java +69 -0
  229. data/lib/openssl/src/java/org/jruby/ext/openssl/Callable.java +10 -0
  230. data/lib/openssl/src/java/org/jruby/ext/openssl/Cipher.java +661 -0
  231. data/lib/openssl/src/java/org/jruby/ext/openssl/CipherStrings.java +1827 -0
  232. data/lib/openssl/src/java/org/jruby/ext/openssl/Config.java +49 -0
  233. data/lib/openssl/src/java/org/jruby/ext/openssl/DefaultPEMHandler.java +44 -0
  234. data/lib/openssl/src/java/org/jruby/ext/openssl/Digest.java +207 -0
  235. data/lib/openssl/src/java/org/jruby/ext/openssl/HMAC.java +183 -0
  236. data/lib/openssl/src/java/org/jruby/ext/openssl/NetscapeSPKI.java +212 -0
  237. data/lib/openssl/src/java/org/jruby/ext/openssl/OpenSSLImpl.java +341 -0
  238. data/lib/openssl/src/java/org/jruby/ext/openssl/OpenSSLReal.java +113 -0
  239. data/lib/openssl/src/java/org/jruby/ext/openssl/PEMHandler.java +40 -0
  240. data/lib/openssl/src/java/org/jruby/ext/openssl/PKCS10CertificationRequestExt.java +159 -0
  241. data/lib/openssl/src/java/org/jruby/ext/openssl/PKCS7.java +642 -0
  242. data/lib/openssl/src/java/org/jruby/ext/openssl/PKey.java +154 -0
  243. data/lib/openssl/src/java/org/jruby/ext/openssl/PKeyDH.java +401 -0
  244. data/lib/openssl/src/java/org/jruby/ext/openssl/PKeyDSA.java +419 -0
  245. data/lib/openssl/src/java/org/jruby/ext/openssl/PKeyRSA.java +762 -0
  246. data/lib/openssl/src/java/org/jruby/ext/openssl/Random.java +103 -0
  247. data/lib/openssl/src/java/org/jruby/ext/openssl/Request.java +336 -0
  248. data/lib/openssl/src/java/org/jruby/ext/openssl/SSL.java +71 -0
  249. data/lib/openssl/src/java/org/jruby/ext/openssl/SSLContext.java +358 -0
  250. data/lib/openssl/src/java/org/jruby/ext/openssl/SSLSocket.java +561 -0
  251. data/lib/openssl/src/java/org/jruby/ext/openssl/SimpleSecretKey.java +53 -0
  252. data/lib/openssl/src/java/org/jruby/ext/openssl/Utils.java +60 -0
  253. data/lib/openssl/src/java/org/jruby/ext/openssl/X509.java +108 -0
  254. data/lib/openssl/src/java/org/jruby/ext/openssl/X509CRL.java +446 -0
  255. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Cert.java +520 -0
  256. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Extensions.java +751 -0
  257. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Name.java +405 -0
  258. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Revoked.java +111 -0
  259. data/lib/openssl/src/java/org/jruby/ext/openssl/X509Store.java +282 -0
  260. data/lib/openssl/src/java/org/jruby/ext/openssl/X509StoreCtx.java +206 -0
  261. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/ASN1Registry.java +5135 -0
  262. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Attribute.java +79 -0
  263. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/BIO.java +345 -0
  264. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/BIOFilter.java +38 -0
  265. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Base64BIOFilter.java +84 -0
  266. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/CipherBIOFilter.java +157 -0
  267. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Digest.java +126 -0
  268. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/EVP.java +136 -0
  269. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/EncContent.java +178 -0
  270. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Encrypt.java +77 -0
  271. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Envelope.java +169 -0
  272. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/IssuerAndSerial.java +35 -0
  273. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MemBIO.java +117 -0
  274. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MessageDigestBIOFilter.java +76 -0
  275. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Mime.java +245 -0
  276. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MimeHeader.java +103 -0
  277. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/MimeParam.java +69 -0
  278. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/NotVerifiedPKCS7Exception.java +38 -0
  279. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/NullSinkBIO.java +52 -0
  280. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java +1276 -0
  281. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java +168 -0
  282. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataData.java +88 -0
  283. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataDigest.java +64 -0
  284. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataEncrypted.java +61 -0
  285. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataEnveloped.java +85 -0
  286. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSigned.java +127 -0
  287. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSignedAndEnveloped.java +91 -0
  288. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/PKCS7Exception.java +68 -0
  289. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/RecipInfo.java +244 -0
  290. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/SMIME.java +281 -0
  291. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/SignEnvelope.java +202 -0
  292. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/Signed.java +345 -0
  293. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/SignerInfoWithPkey.java +365 -0
  294. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/TypeDiscriminating.java +34 -0
  295. data/lib/openssl/src/java/org/jruby/ext/openssl/impl/utils/Base64.java +1809 -0
  296. data/lib/openssl/src/java/org/jruby/ext/openssl/util/Base64Coder.java +103 -0
  297. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/CRL.java +59 -0
  298. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Certificate.java +57 -0
  299. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/CertificateFile.java +46 -0
  300. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/CertificateHashDir.java +46 -0
  301. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function0.java +43 -0
  302. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function1.java +43 -0
  303. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function2.java +43 -0
  304. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function3.java +43 -0
  305. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function4.java +43 -0
  306. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Function5.java +43 -0
  307. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Lookup.java +560 -0
  308. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/LookupMethod.java +84 -0
  309. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Name.java +85 -0
  310. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java +1210 -0
  311. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/PKey.java +41 -0
  312. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/PolicyTree.java +36 -0
  313. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Purpose.java +475 -0
  314. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Store.java +377 -0
  315. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/StoreContext.java +1356 -0
  316. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/Trust.java +279 -0
  317. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/VerifyParameter.java +324 -0
  318. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Aux.java +43 -0
  319. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509AuxCertificate.java +170 -0
  320. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Error.java +70 -0
  321. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Object.java +88 -0
  322. data/lib/openssl/src/java/org/jruby/ext/openssl/x509store/X509Utils.java +541 -0
  323. data/lib/openssl/test/cert_with_ec_pk.cer +27 -0
  324. data/lib/openssl/test/fixture/ca_path/72fa7371.0 +19 -0
  325. data/lib/openssl/test/fixture/ca_path/verisign.pem +19 -0
  326. data/lib/openssl/test/fixture/cacert.pem +23 -0
  327. data/lib/openssl/test/fixture/cert_localhost.pem +19 -0
  328. data/lib/openssl/test/fixture/common.pem +48 -0
  329. data/lib/openssl/test/fixture/localhost_keypair.pem +18 -0
  330. data/lib/openssl/test/fixture/max.pem +29 -0
  331. data/lib/openssl/test/fixture/purpose/b70a5bc1.0 +24 -0
  332. data/lib/openssl/test/fixture/purpose/ca/PASSWD_OF_CA_KEY_IS_1234 +0 -0
  333. data/lib/openssl/test/fixture/purpose/ca/ca_config.rb +37 -0
  334. data/lib/openssl/test/fixture/purpose/ca/cacert.pem +24 -0
  335. data/lib/openssl/test/fixture/purpose/ca/newcerts/2_cert.pem +19 -0
  336. data/lib/openssl/test/fixture/purpose/ca/newcerts/3_cert.pem +19 -0
  337. data/lib/openssl/test/fixture/purpose/ca/private/cakeypair.pem +30 -0
  338. data/lib/openssl/test/fixture/purpose/ca/serial +1 -0
  339. data/lib/openssl/test/fixture/purpose/cacert.pem +24 -0
  340. data/lib/openssl/test/fixture/purpose/scripts/gen_cert.rb +127 -0
  341. data/lib/openssl/test/fixture/purpose/scripts/gen_csr.rb +50 -0
  342. data/lib/openssl/test/fixture/purpose/scripts/init_ca.rb +66 -0
  343. data/lib/openssl/test/fixture/purpose/sslclient.pem +19 -0
  344. data/lib/openssl/test/fixture/purpose/sslclient/csr.pem +10 -0
  345. data/lib/openssl/test/fixture/purpose/sslclient/keypair.pem +15 -0
  346. data/lib/openssl/test/fixture/purpose/sslclient/sslclient.pem +19 -0
  347. data/lib/openssl/test/fixture/purpose/sslserver.pem +19 -0
  348. data/lib/openssl/test/fixture/purpose/sslserver/csr.pem +10 -0
  349. data/lib/openssl/test/fixture/purpose/sslserver/keypair.pem +15 -0
  350. data/lib/openssl/test/fixture/purpose/sslserver/sslserver.pem +19 -0
  351. data/lib/openssl/test/fixture/verisign.pem +19 -0
  352. data/lib/openssl/test/fixture/verisign_c3.pem +14 -0
  353. data/lib/openssl/test/openssl/ssl_server.rb +99 -0
  354. data/lib/openssl/test/openssl/test_asn1.rb +199 -0
  355. data/lib/openssl/test/openssl/test_cipher.rb +196 -0
  356. data/lib/openssl/test/openssl/test_digest.rb +88 -0
  357. data/lib/openssl/test/openssl/test_hmac.rb +44 -0
  358. data/lib/openssl/test/openssl/test_ns_spki.rb +69 -0
  359. data/lib/openssl/test/openssl/test_pair.rb +149 -0
  360. data/lib/openssl/test/openssl/test_pkcs7.rb +160 -0
  361. data/lib/openssl/test/openssl/test_pkey_rsa.rb +49 -0
  362. data/lib/openssl/test/openssl/test_ssl.rb +413 -0
  363. data/lib/openssl/test/openssl/test_x509cert.rb +236 -0
  364. data/lib/openssl/test/openssl/test_x509crl.rb +234 -0
  365. data/lib/openssl/test/openssl/test_x509ext.rb +95 -0
  366. data/lib/openssl/test/openssl/test_x509name.rb +281 -0
  367. data/lib/openssl/test/openssl/test_x509req.rb +178 -0
  368. data/lib/openssl/test/openssl/test_x509store.rb +245 -0
  369. data/lib/openssl/test/openssl/utils.rb +135 -0
  370. data/lib/openssl/test/pkcs7_mime_enveloped.message +19 -0
  371. data/lib/openssl/test/pkcs7_mime_signed.message +30 -0
  372. data/lib/openssl/test/pkcs7_multipart_signed.message +45 -0
  373. data/lib/openssl/test/ref/compile.rb +8 -0
  374. data/lib/openssl/test/ref/pkcs1 +0 -0
  375. data/lib/openssl/test/ref/pkcs1.c +21 -0
  376. data/lib/openssl/test/test_cipher.rb +95 -0
  377. data/lib/openssl/test/test_integration.rb +139 -0
  378. data/lib/openssl/test/test_java.rb +98 -0
  379. data/lib/openssl/test/test_java_attribute.rb +25 -0
  380. data/lib/openssl/test/test_java_bio.rb +42 -0
  381. data/lib/openssl/test/test_java_mime.rb +173 -0
  382. data/lib/openssl/test/test_java_pkcs7.rb +769 -0
  383. data/lib/openssl/test/test_java_smime.rb +177 -0
  384. data/lib/openssl/test/test_openssl.rb +34 -0
  385. data/lib/openssl/test/test_openssl_x509.rb +34 -0
  386. data/lib/openssl/test/test_parse_certificate.rb +20 -0
  387. data/lib/openssl/test/test_pkey.rb +46 -0
  388. data/lib/openssl/test/test_x509store.rb +155 -0
  389. data/lib/openssl/test/ut_eof.rb +128 -0
  390. data/lib/redcar.rb +134 -8
  391. data/lib/redcar/installer.rb +46 -11
  392. data/lib/redcar/runner.rb +2 -1
  393. data/lib/redcar/usage.rb +12 -5
  394. data/lib/redcar_quick_start.rb +37 -0
  395. data/plugins/application/features/support/env.rb +9 -1
  396. data/plugins/application/icons/redcar_icon_beta.png +0 -0
  397. data/plugins/application/lib/application.rb +113 -43
  398. data/plugins/application/lib/application/clipboard.rb +28 -4
  399. data/plugins/application/lib/application/command.rb +4 -12
  400. data/plugins/application/lib/application/command/executor.rb +2 -2
  401. data/plugins/application/lib/application/keymap.rb +39 -0
  402. data/plugins/application/lib/application/keymap/builder.rb +19 -0
  403. data/plugins/application/lib/application/speedbar.rb +33 -24
  404. data/plugins/application/lib/application/tab.rb +15 -0
  405. data/plugins/application/lib/application/window.rb +28 -5
  406. data/plugins/application/spec/application/clipboard_spec.rb +20 -1
  407. data/plugins/application/spec/application/command/executor_spec.rb +7 -2
  408. data/plugins/application/spec/application/command_spec.rb +0 -5
  409. data/plugins/application/spec/application/keymap/builder_spec.rb +17 -0
  410. data/plugins/application/spec/application/menu_spec.rb +30 -0
  411. data/plugins/application/spec/application/speedbar_spec.rb +30 -6
  412. data/plugins/application/spec/application/window_spec.rb +2 -2
  413. data/plugins/application/spec/spec_helper.rb +1 -1
  414. data/plugins/application_swt/lib/application_swt.rb +3 -0
  415. data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +10 -1
  416. data/plugins/application_swt/lib/application_swt/html_tab.rb +1 -0
  417. data/plugins/application_swt/lib/application_swt/menu.rb +4 -3
  418. data/plugins/application_swt/lib/application_swt/menu/binding_translator.rb +12 -4
  419. data/plugins/application_swt/lib/application_swt/speedbar.rb +105 -19
  420. data/plugins/application_swt/lib/application_swt/swt_wrapper.rb +2 -0
  421. data/plugins/application_swt/lib/application_swt/window.rb +55 -23
  422. data/plugins/application_swt/spec/spec_helper.rb +0 -1
  423. data/plugins/auto_completer/lib/auto_completer.rb +57 -3
  424. data/plugins/auto_indenter/lib/auto_indenter.rb +1 -1
  425. data/plugins/core/lib/core.rb +5 -3
  426. data/plugins/core/lib/core/interface.rb +73 -0
  427. data/plugins/core/lib/core/model.rb +2 -0
  428. data/plugins/core/lib/core/observable.rb +12 -1
  429. data/plugins/core/lib/core/observable_struct.rb +34 -0
  430. data/plugins/core/lib/core/plugin/storage.rb +16 -3
  431. data/plugins/core/lib/core/reentry_helpers.rb +13 -0
  432. data/plugins/core/spec/core/observable_spec.rb +13 -0
  433. data/plugins/core/spec/core/storage_spec.rb +18 -0
  434. data/plugins/core/spec/spec_helper.rb +1 -0
  435. data/plugins/edit_view/features/cut_and_paste.feature +4 -2
  436. data/plugins/edit_view/features/soft_tabs.feature +243 -0
  437. data/plugins/edit_view/features/step_definitions/editing_steps.rb +91 -2
  438. data/plugins/edit_view/features/step_definitions/tab_steps.rb +1 -1
  439. data/plugins/edit_view/features/tabs.feature +146 -0
  440. data/plugins/edit_view/lib/edit_view.rb +197 -8
  441. data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +121 -0
  442. data/plugins/edit_view/lib/edit_view/actions/deletion.rb +30 -0
  443. data/plugins/edit_view/lib/edit_view/actions/tab.rb +66 -0
  444. data/plugins/edit_view/lib/edit_view/command.rb +0 -2
  445. data/plugins/edit_view/lib/edit_view/document.rb +62 -27
  446. data/plugins/edit_view/lib/edit_view/document/command.rb +11 -0
  447. data/plugins/edit_view/lib/edit_view/edit_tab.rb +2 -1
  448. data/plugins/edit_view/lib/edit_view/info_speedbar.rb +69 -0
  449. data/plugins/edit_view/lib/edit_view/tab_settings.rb +40 -0
  450. data/plugins/edit_view/spec/edit_view/document_spec.rb +26 -0
  451. data/plugins/edit_view/spec/spec_helper.rb +0 -1
  452. data/plugins/edit_view_swt/lib/edit_view_swt.rb +57 -69
  453. data/plugins/edit_view_swt/lib/edit_view_swt/document.rb +24 -3
  454. data/plugins/edit_view_swt/lib/edit_view_swt/edit_tab.rb +23 -6
  455. data/plugins/edit_view_swt/spec/spec_helper.rb +0 -1
  456. data/plugins/edit_view_swt/vendor/java-mateview.rb +19 -2
  457. data/plugins/encryption/encryption.rb +38 -0
  458. data/plugins/encryption/ezcrypto.rb +652 -0
  459. data/plugins/encryption/jarmor-1.1.jar +0 -0
  460. data/plugins/encryption/plugin.rb +9 -0
  461. data/plugins/execute_current_tab/lib/execute_current_tab.rb +56 -0
  462. data/plugins/execute_current_tab/plugin.rb +8 -0
  463. data/plugins/html_view/lib/html_view.rb +16 -11
  464. data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +2 -1
  465. data/plugins/plugin_manager_ui/views/index.html.erb +22 -4
  466. data/plugins/project/lib/project.rb +140 -26
  467. data/plugins/project/lib/project/drb_service.rb +75 -0
  468. data/plugins/project/lib/project/file_mirror.rb +5 -5
  469. data/plugins/project/lib/project/find_file_dialog.rb +123 -32
  470. data/plugins/project/spec/project/file_mirror_spec.rb +10 -1
  471. data/plugins/project/spec/spec_helper.rb +0 -1
  472. data/plugins/redcar/plugin.rb +1 -1
  473. data/plugins/redcar/redcar.rb +204 -109
  474. data/plugins/redcar/spec/redcar/redcar_spec.rb +70 -0
  475. data/plugins/redcar/spec/spec_helper.rb +4 -0
  476. data/plugins/repl/lib/repl.rb +14 -7
  477. data/plugins/repl/lib/repl/internal_mirror.rb +43 -22
  478. data/plugins/repl/spec/repl/internal_mirror_spec.rb +34 -7
  479. data/plugins/repl/spec/spec_helper.rb +0 -1
  480. data/plugins/tree/spec/spec_helper.rb +0 -1
  481. data/plugins/tree_view_swt/lib/tree_view_swt.rb +1 -1
  482. data/textmate/Bundles/RedcarRepl.tmbundle/Syntaxes/InternalRuby.plist +2 -18
  483. data/textmate/Bundles/asciidoc.tmbundle/Syntaxes/AsciiDoc.tmLanguage +428 -0
  484. metadata +790 -371
  485. data/lib/redcar/boot.rb +0 -108
@@ -0,0 +1,75 @@
1
+ module Redcar
2
+ class Project
3
+ class DrbService
4
+ def initialize
5
+ # TODO choose a random port instead of hard coded
6
+ begin
7
+ address = "druby://127.0.0.1:9999"
8
+ @drb = DRb.start_service(address, self)
9
+ rescue Errno::EADDRINUSE => e
10
+ puts 'warning--not starting listener (perhaps theres another Redcar already open?)' + e + ' ' + address
11
+ end
12
+ end
13
+
14
+ # opens an item as if from the command line for use via drb
15
+ def open_item_drb(full_path)
16
+ begin
17
+ puts 'drb opening ' + full_path if $VERBOSE
18
+ if File.file? full_path
19
+
20
+ Redcar::ApplicationSWT.sync_exec {
21
+ if Redcar.app.windows.length == 0
22
+ Project.restore_last_session
23
+ end
24
+
25
+ FileOpenCommand.new(full_path).execute
26
+ Redcar.app.focussed_window.controller.bring_to_front
27
+ }
28
+ 'ok'
29
+ elsif File.directory? full_path
30
+ Redcar::ApplicationSWT.sync_exec {
31
+
32
+ # open in any existing window that already has that dir open as a tree
33
+ # else in a new window
34
+ # open the window that already has this dir open
35
+ if Redcar.app.windows.length == 0 && Application.storage['last_open_dir'] == full_path
36
+ Project.restore_last_session
37
+ end
38
+
39
+ if Redcar.app.windows.length > 0
40
+ window = Redcar.app.windows.find{|win|
41
+ # XXXX how can win be nil here?
42
+ win && win.treebook.trees.find{|t|
43
+ t.tree_mirror.is_a?(Redcar::Project::DirMirror) && t.tree_mirror.path == full_path
44
+ }
45
+ }
46
+ end
47
+ window ||= Redcar.app.new_window
48
+ Project.open_dir(full_path, window)
49
+ Redcar.app.focussed_window.controller.bring_to_front
50
+
51
+ }
52
+ 'ok'
53
+ elsif full_path == 'just_bring_to_front'
54
+ Redcar::ApplicationSWT.sync_exec {
55
+ if Redcar.app.windows.length == 0
56
+ Project.restore_last_session
57
+ end
58
+ Redcar.app.focussed_window.controller.bring_to_front
59
+ }
60
+ 'ok'
61
+ else
62
+ puts 'remote load: unexpected: file not found ' + full_path
63
+ 'fail'
64
+ end
65
+ rescue Exception => e
66
+ # normally drb would swallow these
67
+ puts 'drb got exception:' + e, e.backtrace
68
+ raise e
69
+ end
70
+ end
71
+
72
+ end
73
+ end
74
+ end
75
+
@@ -23,7 +23,7 @@ module Redcar
23
23
  def read
24
24
  return "" unless exists?
25
25
  contents = load_contents
26
- @hash = Digest::SHA1.hexdigest(contents)
26
+ @timestamp = File.stat(@path).mtime
27
27
  contents
28
28
  end
29
29
 
@@ -39,7 +39,7 @@ module Redcar
39
39
  #
40
40
  # @return [Boolean]
41
41
  def changed?
42
- @hash != Digest::SHA1.hexdigest(load_contents)
42
+ !@timestamp or @timestamp < File.stat(@path).mtime
43
43
  end
44
44
 
45
45
  # Save new file contents.
@@ -48,7 +48,7 @@ module Redcar
48
48
  # @return [unspecified]
49
49
  def commit(contents)
50
50
  save_contents(contents)
51
- @hash = Digest::SHA1.hexdigest(contents)
51
+ @time = Time.now
52
52
  end
53
53
 
54
54
  # The filename.
@@ -61,11 +61,11 @@ module Redcar
61
61
  private
62
62
 
63
63
  def load_contents
64
- File.read(@path)
64
+ File.open(@path, 'rb') do |f|; f.read; end
65
65
  end
66
66
 
67
67
  def save_contents(contents)
68
- File.open(@path, "w") {|f| f.print contents }
68
+ File.open(@path, "wb") {|f| f.print contents }
69
69
  end
70
70
  end
71
71
  end
@@ -4,17 +4,71 @@ module Redcar
4
4
  class FindFileDialog < FilterListDialog
5
5
  MAX_ENTRIES = 20
6
6
 
7
+ def self.clear
8
+ # unfortunately we receive a :focussed
9
+ # message when the FindFileDialog
10
+ # itself exits
11
+ # so we only really clear when we receive an *unexpected* message
12
+ if @expect_a_clear
13
+ @expect_a_clear = false
14
+ else
15
+ if storage['clear_cache_on_refocus']
16
+ @cached_dir_lists.clear
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ @cached_dir_lists = {}
23
+ @expect_a_clear = false
24
+
25
+ class << self
26
+ attr_reader :cached_dir_lists
27
+ attr_accessor :expect_a_clear
28
+ end
29
+
30
+ def initialize win
31
+ super()
32
+ # add a :focussed listener to the window if it hasn't
33
+ # been set before
34
+ win.add_listener_at_most_once(FindFileDialog, :focussed) {
35
+ FindFileDialog.clear
36
+ }
37
+ FindFileDialog.expect_a_clear = true
38
+ end
39
+
40
+ def self.storage
41
+ @storage ||= begin
42
+ storage = Plugin::Storage.new('find_file_dialog')
43
+ storage.set_default('clear_cache_on_refocus', true)
44
+ storage
45
+ end
46
+ end
47
+
7
48
  def update_list(filter)
8
49
  if filter.length < 2
9
- []
50
+ paths = Project.recent_files
10
51
  else
11
- paths = find_files(filter, Redcar.app.focussed_window.treebook.trees.last.tree_mirror.path)
12
- @last_list = paths
13
- paths.map {|path| display_path(path) }
52
+ paths = find_files_from_list(filter, Project.recent_files) + find_files(filter, Redcar.app.focussed_window.treebook.trees.last.tree_mirror.path)
53
+ paths.uniq! # in case there's some dupe's between the two lists
54
+ end
55
+
56
+ @last_list = paths
57
+ full_paths = paths
58
+ display_paths = full_paths.map { |path| display_path(path) }
59
+ if display_paths.uniq.length < full_paths.length
60
+ # search out and expand duplicates
61
+ duplicates = display_paths.duplicates_as_hash
62
+ display_paths.each_with_index{|dp, i|
63
+ if duplicates[dp]
64
+ display_paths[i] = display_path(full_paths[i], Redcar.app.focussed_window.treebook.trees.last.tree_mirror.path.split('/')[0..-2].join('/'))
65
+ end
66
+ }
14
67
  end
68
+ display_paths
15
69
  end
16
70
 
17
- def selected(text, ix)
71
+ def selected(text, ix, closing=false)
18
72
  if @last_list
19
73
  close
20
74
  FileOpenCommand.new(@last_list[ix]).run
@@ -23,54 +77,85 @@ module Redcar
23
77
 
24
78
  private
25
79
 
26
- def display_path(path)
27
- path.split("/").last +
28
- " (" +
29
- path.split("/")[-3..-2].join("/") +
30
- ")"
80
+ def remove_from_list(path)
81
+ self.class.recent_files.delete(path)
82
+ end
83
+
84
+ def display_path(path, first_remove_this_prefix = nil)
85
+ n = -3
86
+ if first_remove_this_prefix && path.index(first_remove_this_prefix) == 0
87
+ path = path[first_remove_this_prefix.length..-1]
88
+ # show the full subdirs in the case of collisions
89
+ n = -100
90
+ end
91
+
92
+ if path.count('/') > 0
93
+ count_back = [-path.count('/'), n].max
94
+ path.split("/").last +
95
+ " (" +
96
+ path.split("/")[count_back..-2].join("/") +
97
+ ")"
98
+ else
99
+ path
100
+ end
101
+
31
102
  end
32
103
 
33
104
  def files(directories)
34
- @files ||= begin
105
+ FindFileDialog.cached_dir_lists[directories] ||= begin
35
106
  files = []
36
107
  s = Time.now
37
108
  directories.each do |dir|
38
109
  files += Dir[File.expand_path(dir + "/**/*")]
39
110
  end
40
111
  took = Time.now - s
41
- puts "find files #{directories.inspect} took #{took}s"
112
+ puts "find files (#{directories.length} dirs) took #{took}s"
113
+ files.reject!{|f|
114
+ begin
115
+ File.directory?(f)
116
+ rescue Errno::ENOENT
117
+ # File.directory? can throw no such file or directory even if File.exist?
118
+ # has returned true. For example this happens on some awful textmate filenames
119
+ # unicode in them.
120
+ true
121
+ end
122
+ }
42
123
  files
43
124
  end
44
125
  end
45
126
 
127
+ def find_files_from_list(text, file_list)
128
+ re = make_regex(text)
129
+ file_list.select{|fn|
130
+ fn.split('/').last =~ re
131
+ }.compact
132
+ end
133
+
46
134
  def find_files(text, directories)
47
135
  re = make_regex(text)
48
136
 
49
137
  score_match_pairs = []
50
138
  cutoff = 10000000
51
-
52
139
  results = files(directories).each do |fn|
53
140
  begin
54
- unless File.directory?(fn)
55
- bit = fn.split("/")
56
- if m = bit.last.match(re)
57
- cs = []
58
- diffs = 0
59
- m.captures.each_with_index do |_, i|
60
- cs << m.begin(i + 1)
61
- if i > 0
62
- diffs += cs[i] - cs[i-1]
63
- end
141
+ bit = fn.split("/")
142
+ if m = bit.last.match(re)
143
+ cs = []
144
+ diffs = 0
145
+ m.captures.each_with_index do |_, i|
146
+ cs << m.begin(i + 1)
147
+ if i > 0
148
+ diffs += cs[i] - cs[i-1]
64
149
  end
65
- # lower score is better
66
- score = (cs[0] + diffs)*100 + bit.last.length
67
- if score < cutoff
68
- score_match_pairs << [score, fn]
69
- score_match_pairs.sort!
70
- if score_match_pairs.length == MAX_ENTRIES
71
- cutoff = score_match_pairs.last.first
72
- score_match_pairs.pop
73
- end
150
+ end
151
+ # lower score is better
152
+ score = (cs[0] + diffs)*100 + bit.last.length
153
+ if score < cutoff
154
+ score_match_pairs << [score, fn]
155
+ score_match_pairs.sort!
156
+ if score_match_pairs.length == MAX_ENTRIES
157
+ cutoff = score_match_pairs.last.first
158
+ score_match_pairs.pop
74
159
  end
75
160
  end
76
161
  end
@@ -90,3 +175,9 @@ module Redcar
90
175
  end
91
176
  end
92
177
  end
178
+
179
+ module Enumerable
180
+ def duplicates_as_hash
181
+ inject({}) {|h,v| h[v]=h[v].to_i+1; h}.reject{|k,v| v==1}
182
+ end
183
+ end
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), "..", "spec_helper")
3
3
  class Redcar::Project
4
4
  describe FileMirror do
5
5
  def write_testfile_contents(val)
6
- File.open(@filename, "w") {|f| f.print val}
6
+ File.open(@filename, "wb") {|f| f.print val}
7
7
  end
8
8
 
9
9
  before do
@@ -34,6 +34,14 @@ class Redcar::Project
34
34
  @mirror.read.should == "hiver"
35
35
  end
36
36
 
37
+ it "preserves line endings" do
38
+ write_testfile_contents("a\nb")
39
+
40
+ @mirror.read.should == "a\nb"
41
+ write_testfile_contents("a\r\nb")
42
+ @mirror.read.should == "a\r\nb"
43
+ end
44
+
37
45
  describe "that you have read" do
38
46
  before do
39
47
  @mirror.read
@@ -55,6 +63,7 @@ class Redcar::Project
55
63
 
56
64
  describe "and has since changed on disk" do
57
65
  before do
66
+ sleep 2
58
67
  write_testfile_contents("the queen")
59
68
  end
60
69
 
@@ -1,5 +1,4 @@
1
1
  $:.push File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
2
 
3
3
  require 'redcar'
4
- Redcar.boot
5
4
  Redcar.load
@@ -4,7 +4,7 @@ Plugin.define do
4
4
  version "1.0"
5
5
  file "redcar"
6
6
  object "Redcar::Top"
7
- dependencies "core", ">0",
7
+ dependencies "core", ">0", # includes Storage
8
8
  "application", ">0",
9
9
  "project", ">0",
10
10
  "Auto Completer", ">0",
@@ -1,10 +1,6 @@
1
-
2
1
  module Redcar
3
2
  module Top
4
3
  class NewCommand < Command
5
- key :osx => "Cmd+N",
6
- :linux => "Ctrl+N",
7
- :windows => "Ctrl+N"
8
4
 
9
5
  def execute
10
6
  tab = win.new_tab(Redcar::EditTab)
@@ -17,10 +13,6 @@ module Redcar
17
13
  class NewNotebookCommand < Command
18
14
  sensitize :single_notebook
19
15
 
20
- key :osx => "Cmd+Alt+N",
21
- :linux => "Ctrl+Alt+N",
22
- :windows => "Ctrl+Alt+N"
23
-
24
16
  def execute
25
17
  unless win.notebooks.length > 1
26
18
  win.create_notebook
@@ -70,9 +62,6 @@ module Redcar
70
62
 
71
63
  class SwitchNotebookCommand < Command
72
64
  sensitize :multiple_notebooks, :other_notebook_has_tab
73
- key :osx => "Cmd+Alt+O",
74
- :linux => "Ctrl+Alt+O",
75
- :windows => "Ctrl+Alt+O"
76
65
 
77
66
  def execute
78
67
  new_notebook = win.nonfocussed_notebook
@@ -85,10 +74,6 @@ module Redcar
85
74
  class MoveTabToOtherNotebookCommand < Command
86
75
  sensitize :multiple_notebooks, :open_tab
87
76
 
88
- key :osx => "Cmd+Shift+Alt+O",
89
- :linux => "Ctrl+Shift+Alt+O",
90
- :windows => "Ctrl+Shift+Alt+O"
91
-
92
77
  def execute
93
78
  current_notebook = tab.notebook
94
79
  target_notebook = win.notebooks.detect {|nb| nb != current_notebook}
@@ -96,9 +81,29 @@ module Redcar
96
81
  tab.focus
97
82
  end
98
83
  end
84
+
85
+ class AboutCommand < Command
86
+ def execute
87
+ new_tab = Top::NewCommand.new.run
88
+ new_tab.document.text = "About: Redcar\nVersion: #{Redcar::VERSION}\n" +
89
+ "Ruby Version: #{RUBY_VERSION}\n" +
90
+ "Jruby version: #{JRUBY_VERSION}\n" +
91
+ "Redcar.environment: #{Redcar.environment}\n" +
92
+ "http://redcareditor.com"
93
+ new_tab.title= 'About'
94
+ end
95
+ end
96
+
97
+ class ChangelogCommand < Command
98
+ def execute
99
+ new_tab = Top::NewCommand.new.run
100
+ new_tab.document.text = File.read(File.join(File.dirname(__FILE__), "..", "..", "CHANGES"))
101
+ new_tab.title = 'Changes'
102
+ end
103
+ end
104
+
99
105
 
100
106
  class PrintContents < EditTabCommand
101
- key "Cmd+P"
102
107
 
103
108
  def execute
104
109
  puts "printing contents"
@@ -108,27 +113,27 @@ module Redcar
108
113
 
109
114
  class PrintHistoryCommand < Command
110
115
  def execute
111
- Redcar.history.each do |c|
116
+ Redcar.app.history.each do |c|
112
117
  puts c
113
118
  end
114
119
  end
115
120
  end
116
121
 
122
+
117
123
  class PrintScopeTreeCommand < Command
118
124
  def execute
119
125
  puts tab.edit_view.controller.mate_text.parser.root.pretty(0)
120
126
  end
121
127
  end
122
128
 
123
- class CloseTabCommand < TabCommand
124
- key :osx => "Cmd+W",
125
- :linux => "Ctrl+W",
126
- :windows => "Ctrl+W"
129
+ class CloseTabCommand < Command
127
130
 
128
131
  def execute
129
- # TODO: should be win.focussed_notebook
130
- if tab = win.focussed_notebook.focussed_tab
132
+ if tab = win.focussed_notebook_tab
131
133
  tab.close
134
+ else
135
+ # interpret Ctrl+W with no tabs open as "close window", not just close tab
136
+ win.close
132
137
  end
133
138
  end
134
139
  end
@@ -140,9 +145,6 @@ module Redcar
140
145
  end
141
146
 
142
147
  class SwitchTabDownCommand < Command
143
- key :osx => "Cmd+Shift+[",
144
- :linux => "Ctrl+Shift+[",
145
- :windows => "Ctrl+Shift+["
146
148
 
147
149
  def execute
148
150
  win.focussed_notebook.switch_down
@@ -150,9 +152,6 @@ module Redcar
150
152
  end
151
153
 
152
154
  class SwitchTabUpCommand < Command
153
- key :osx => "Cmd+Shift+]",
154
- :linux => "Ctrl+Shift+]",
155
- :windows => "Ctrl+Shift+]"
156
155
 
157
156
  def execute
158
157
  win.focussed_notebook.switch_up
@@ -162,10 +161,6 @@ module Redcar
162
161
  class UndoCommand < EditTabCommand
163
162
  sensitize :undoable
164
163
 
165
- key :osx => "Cmd+Z",
166
- :linux => "Ctrl+Z",
167
- :windows => "Ctrl+Z"
168
-
169
164
  def execute
170
165
  tab.edit_view.undo
171
166
  end
@@ -174,17 +169,12 @@ module Redcar
174
169
  class RedoCommand < EditTabCommand
175
170
  sensitize :redoable
176
171
 
177
- key :osx => "Cmd+Shift+Z",
178
- :linux => "Ctrl+Shift+Z",
179
- :windows => "Ctrl+Shift+Z"
180
-
181
172
  def execute
182
173
  tab.edit_view.redo
183
174
  end
184
175
  end
185
176
 
186
177
  class MoveHomeCommand < EditTabCommand
187
- key "Ctrl+A"
188
178
 
189
179
  def execute
190
180
  doc = tab.edit_view.document
@@ -194,7 +184,6 @@ module Redcar
194
184
  end
195
185
 
196
186
  class MoveEndCommand < EditTabCommand
197
- key "Ctrl+E"
198
187
 
199
188
  def execute
200
189
  doc = tab.edit_view.document
@@ -225,7 +214,7 @@ module Redcar
225
214
  else
226
215
  end_selection = doc.offset_at_line(last_line_ix + 1)
227
216
  end
228
- doc.set_selection_range(start_selection..end_selection)
217
+ doc.set_selection_range(start_selection, end_selection)
229
218
  else
230
219
  indent_line(doc, doc.cursor_line)
231
220
  end
@@ -233,9 +222,6 @@ module Redcar
233
222
  end
234
223
 
235
224
  class DecreaseIndentCommand < ChangeIndentCommand
236
- key :osx => "Cmd+[",
237
- :linux => "Ctrl+[",
238
- :windows => "Ctrl+["
239
225
 
240
226
  def indent_line(doc, line_ix)
241
227
  use_spaces = true
@@ -253,9 +239,6 @@ module Redcar
253
239
  end
254
240
 
255
241
  class IncreaseIndentCommand < ChangeIndentCommand
256
- key :osx => "Cmd+]",
257
- :linux => "Ctrl+]",
258
- :windows => "Ctrl+]"
259
242
 
260
243
  def indent_line(doc, line_ix)
261
244
  line = doc.get_line(line_ix)
@@ -267,42 +250,32 @@ module Redcar
267
250
  class StripWhitespaceCommand < Redcar::EditTabCommand
268
251
 
269
252
  def execute
270
- doc.text = doc.to_s.gsub(/\s+$/, "")
253
+ doc.text = doc.to_s.gsub(/\s+$/, "\n")
271
254
  end
272
255
  end
273
256
 
274
257
  class SelectAllCommand < Redcar::EditTabCommand
275
- key :osx => "Cmd+A",
276
- :linux => "Ctrl+Shift+A",
277
- :windows => "Ctrl+Shift+A"
278
258
 
279
259
  def execute
280
- doc.set_selection_range(0..(doc.length))
260
+ doc.set_selection_range(doc.length, 0)
281
261
  end
282
262
  end
283
263
 
284
264
  class SelectLineCommand < Redcar::EditTabCommand
285
- key :osx => "Cmd+Shift+L",
286
- :linux => "Ctrl+Shift+L",
287
- :windows => "Ctrl+Shift+L"
288
265
 
289
266
  def execute
290
267
  doc.set_selection_range(
291
- doc.cursor_line_start_offset..doc.cursor_line_end_offset)
268
+ doc.cursor_line_start_offset, doc.cursor_line_end_offset)
292
269
  end
293
270
  end
294
271
 
295
- class CutCommand < Redcar::EditTabCommand
296
- key :osx => "Cmd+X",
297
- :linux => "Ctrl+X",
298
- :windows => "Ctrl+X"
272
+ class CutCommand < Redcar::DocumentCommand
299
273
 
300
274
  def execute
301
275
  if doc.selection?
302
276
  text = doc.selection_ranges.map do |range|
303
277
  doc.get_range(range.begin, range.count)
304
278
  end
305
- p text
306
279
  Redcar.app.clipboard << text
307
280
  diff = 0
308
281
  doc.selection_ranges.each do |range|
@@ -317,10 +290,7 @@ module Redcar
317
290
  end
318
291
  end
319
292
 
320
- class CopyCommand < Redcar::EditTabCommand
321
- key :osx => "Cmd+C",
322
- :linux => "Ctrl+C",
323
- :windows => "Ctrl+C"
293
+ class CopyCommand < Redcar::DocumentCommand
324
294
 
325
295
  def execute
326
296
  if doc.selection?
@@ -334,13 +304,9 @@ module Redcar
334
304
  end
335
305
  end
336
306
 
337
- class PasteCommand < Redcar::EditTabCommand
307
+ class PasteCommand < Redcar::DocumentCommand
338
308
  sensitize :clipboard_not_empty
339
309
 
340
- key :osx => "Cmd+V",
341
- :linux => "Ctrl+V",
342
- :windows => "Ctrl+V"
343
-
344
310
  def execute
345
311
  start_offset = doc.selection_ranges.first.begin
346
312
  start_line = doc.line_at_offset(start_offset)
@@ -358,11 +324,11 @@ module Redcar
358
324
  if line_ix == doc.line_count
359
325
  doc.insert(doc.length, "\n" + " "*line_offset)
360
326
  else
361
- line = doc.get_line(line_ix)
362
- if line.length - 1 < line_offset
327
+ line = doc.get_line(line_ix).chomp
328
+ if line.length < line_offset
363
329
  doc.insert(
364
330
  doc.offset_at_inner_end_of_line(line_ix),
365
- " "*(line_offset - line.length + 1)
331
+ " "*(line_offset - line.length)
366
332
  )
367
333
  end
368
334
  end
@@ -383,7 +349,7 @@ module Redcar
383
349
  item("Bar") { p :bar }
384
350
  separator
385
351
  sub_menu "Baz" do
386
- item("Qux") { p :qx}
352
+ item("Qux") { p :qx }
387
353
  item("Quux") { p :quux }
388
354
  item("Corge") { p :corge }
389
355
  end
@@ -393,21 +359,27 @@ module Redcar
393
359
  end
394
360
 
395
361
  class GotoLineCommand < Redcar::EditTabCommand
396
- key :osx => "Cmd+L",
397
- :linux => "Ctrl+L",
398
- :windows => "Ctrl+L"
399
362
 
400
363
  class Speedbar < Redcar::Speedbar
401
- label "Goto line:"
364
+ label :goto_label, "Goto line:"
365
+
402
366
  textbox :line
403
- button :go, "Return" do
404
- new_line_ix = @speedbar.line.to_i - 1
367
+
368
+ button :go, "Go", "Return" do
369
+ new_line_ix = line.value.to_i - 1
405
370
  if new_line_ix < doc.line_count and new_line_ix >= 0
406
371
  doc.cursor_offset = doc.offset_at_line(new_line_ix)
407
372
  doc.scroll_to_line(new_line_ix)
408
373
  win.close_speedbar
409
374
  end
410
375
  end
376
+
377
+ def initialize(command)
378
+ @command = command
379
+ end
380
+
381
+ def doc; @command.doc; end
382
+ def win; @command.send(:win); end
411
383
  end
412
384
 
413
385
  def execute
@@ -417,22 +389,54 @@ module Redcar
417
389
  end
418
390
 
419
391
  class SearchForwardCommand < Redcar::EditTabCommand
420
- key :osx => "Cmd+F", :linux => "Ctrl+F", :windows => "Ctrl+F"
421
392
 
422
393
  class Speedbar < Redcar::Speedbar
423
- label "Regex"
424
- textbox :query
425
- button :search, "Return" do
426
- FindNextRegex.new(Regexp.new(@speedbar.query), false).run
394
+ class << self
395
+ attr_accessor :previous_query
396
+ end
397
+
398
+ def after_draw
399
+ self.query.value = Speedbar.previous_query || ""
400
+ self.query.edit_view.document.select_all
401
+ end
402
+
403
+ label :label, "Search:"
404
+ textbox :query
405
+
406
+ toggle :is_regex, 'Regex', nil, true do
407
+ # it sets is_regex to either true or false
408
+ end
409
+
410
+ toggle :match_case, 'Match case', nil, true do
411
+
412
+ end
413
+
414
+ button :search, "Search", "Return" do
415
+ current_query = query.value
416
+ SearchForwardCommand::Speedbar.previous_query = current_query
417
+ if !is_regex.value
418
+ current_query = Regexp.escape(current_query)
419
+ end
420
+ success = FindNextRegex.new(Regexp.new(current_query, !match_case.value), true).run
427
421
  end
428
422
  end
429
423
 
430
424
  def execute
431
- @speedbar = SearchForwardCommand::Speedbar.new(self)
425
+ @speedbar = SearchForwardCommand::Speedbar.new
432
426
  win.open_speedbar(@speedbar)
433
427
  end
428
+
434
429
  end
435
430
 
431
+ class RepeatPreviousSearchForwardCommand < Redcar::EditTabCommand
432
+
433
+ def execute
434
+ FindNextRegex.new(Regexp.new(SearchForwardCommand::Speedbar.previous_query), true).run
435
+ end
436
+
437
+ end
438
+
439
+
436
440
  class FindNextRegex < Redcar::EditTabCommand
437
441
  def initialize(re, wrap=nil)
438
442
  @re = re
@@ -452,41 +456,125 @@ module Redcar
452
456
  line_start = doc.offset_at_line(doc.cursor_line)
453
457
  startoff = line_start + $`.length + cursor_line_offset
454
458
  endoff = startoff + $&.length
455
- doc.set_selection_range(startoff..endoff)
456
- else
459
+ doc.set_selection_range(endoff, startoff)
460
+ elsif doc.cursor_line < doc.line_count - 1
457
461
  # next search the rest of the lines
458
- line_num = doc.cursor_line + 1
459
- curr_line = doc.get_line(line_num)
460
- until line_num == doc.line_count - 1 or
461
- found = (curr_line.to_s =~ @re)
462
- line_num += 1
463
- curr_line = doc.get_line(line_num)
462
+ found_line_offset = nil
463
+ found_line_num = nil
464
+ found_length = nil
465
+ line_nums = ((doc.cursor_line() + 1)..(doc.line_count() - 1)).to_a # the rest of the document
466
+ if @wrap
467
+ line_nums += (0..doc.cursor_line()).to_a
464
468
  end
465
- if found
466
- line_start = doc.offset_at_line(line_num)
467
- startoff = line_start + $`.length
468
- endoff = startoff + $&.length
469
- doc.set_selection_range(startoff..endoff)
470
- doc.scroll_to_line(line_num)
469
+ for line_num in line_nums do
470
+ curr_line = doc.get_line(line_num)
471
+ if new_offset = (curr_line.to_s =~ @re)
472
+ found_line_offset = new_offset
473
+ found_line_num = line_num
474
+ found_length = $&.length
475
+ break
476
+ end
471
477
  end
472
- if !doc.get_line(line_num) and @wrap
473
- doc.cursor_offset = 0
474
- execute
478
+ if found_line_num
479
+ line_start = doc.offset_at_line(found_line_num)
480
+ startoff = line_start + found_line_offset
481
+ endoff = startoff + found_length
482
+ doc.scroll_to_line(found_line_num)
483
+ doc.set_selection_range(endoff, startoff)
484
+ true
485
+ else
486
+ false
475
487
  end
476
488
  end
477
489
  end
478
490
  end
479
491
 
480
492
  class ToggleBlockSelectionCommand < Redcar::EditTabCommand
481
- key :osx => "Cmd+B",
482
- :windows => "Ctrl+B",
483
- :linux => "Ctrl+B"
484
493
 
485
494
  def execute
486
495
  doc.block_selection_mode = !doc.block_selection_mode?
487
496
  end
488
497
  end
489
498
 
499
+ def self.keymaps
500
+ osx = Redcar::Keymap.build("main", :osx) do
501
+ link "Cmd+N", NewCommand
502
+ link "Cmd+Shift+N", NewNotebookCommand
503
+ link "Cmd+Alt+N", NewWindowCommand
504
+ link "Cmd+O", Project::FileOpenCommand
505
+ link "Cmd+Shift+O", Project::DirectoryOpenCommand
506
+ link "Cmd+S", Project::FileSaveCommand
507
+ link "Cmd+Shift+S", Project::FileSaveAsCommand
508
+ link "Cmd+W", CloseTabCommand
509
+ link "Cmd+Shift+W", CloseWindowCommand
510
+
511
+ link "Cmd+Shift+E", EditView::InfoSpeedbarCommand
512
+ link "Cmd+Z", UndoCommand
513
+ link "Cmd+Shift+Z", RedoCommand
514
+ link "Cmd+X", CutCommand
515
+ link "Cmd+C", CopyCommand
516
+ link "Cmd+V", PasteCommand
517
+ link "Ctrl+A", MoveHomeCommand
518
+ link "Ctrl+E", MoveEndCommand
519
+ link "Cmd+[", DecreaseIndentCommand
520
+ link "Cmd+]", IncreaseIndentCommand
521
+ link "Cmd+L", GotoLineCommand
522
+ link "Cmd+F", SearchForwardCommand
523
+ link "Cmd+G", RepeatPreviousSearchForwardCommand
524
+ link "Cmd+A", SelectAllCommand
525
+ link "Cmd+B", ToggleBlockSelectionCommand
526
+ link "Ctrl+Escape", AutoCompleter::AutoCompleteCommand
527
+ link "Cmd+Escape", AutoCompleter::MenuAutoCompleterCommand
528
+
529
+ link "Cmd+T", Project::FindFileCommand
530
+ link "Cmd+Shift+Alt+O", MoveTabToOtherNotebookCommand
531
+ link "Cmd+Alt+O", SwitchNotebookCommand
532
+ link "Cmd+Shift+[", SwitchTabDownCommand
533
+ link "Cmd+Shift+]", SwitchTabUpCommand
534
+
535
+ link "Cmd+Shift+R", PluginManagerUi::ReloadLastReloadedCommand
536
+ end
537
+
538
+ linwin = Redcar::Keymap.build("main", [:linux, :windows]) do
539
+ link "Ctrl+N", NewCommand
540
+ link "Ctrl+Shift+N", NewNotebookCommand
541
+ link "Ctrl+Alt+N", NewWindowCommand
542
+ link "Ctrl+O", Project::FileOpenCommand
543
+ link "Ctrl+Shift+O", Project::DirectoryOpenCommand
544
+ link "Ctrl+S", Project::FileSaveCommand
545
+ link "Ctrl+Shift+S", Project::FileSaveAsCommand
546
+ link "Ctrl+W", CloseTabCommand
547
+ link "Ctrl+Shift+W", CloseWindowCommand
548
+
549
+ link "Ctrl+Shift+E", EditView::InfoSpeedbarCommand
550
+ link "Ctrl+Z", UndoCommand
551
+ link "Ctrl+Shift+Z", RedoCommand
552
+ link "Ctrl+X", CutCommand
553
+ link "Ctrl+C", CopyCommand
554
+ link "Ctrl+V", PasteCommand
555
+ link "Ctrl+A", MoveHomeCommand
556
+ link "Ctrl+E", MoveEndCommand
557
+ link "Ctrl+[", DecreaseIndentCommand
558
+ link "Ctrl+]", IncreaseIndentCommand
559
+ link "Ctrl+L", GotoLineCommand
560
+ link "Ctrl+F", SearchForwardCommand
561
+ link "Ctrl+G", RepeatPreviousSearchForwardCommand
562
+ link "Ctrl+A", SelectAllCommand
563
+ link "Ctrl+B", ToggleBlockSelectionCommand
564
+ link "Ctrl+Escape", AutoCompleter::AutoCompleteCommand
565
+ link "Escape", AutoCompleter::MenuAutoCompleterCommand
566
+
567
+ link "Ctrl+T", Project::FindFileCommand
568
+ link "Ctrl+Shift+Alt+O", MoveTabToOtherNotebookCommand
569
+ link "Ctrl+Alt+O", SwitchNotebookCommand
570
+ link "Ctrl+Shift+Page Up", SwitchTabDownCommand
571
+ link "Ctrl+Shift+Page Down", SwitchTabUpCommand
572
+
573
+ link "Ctrl+Shift+R", PluginManagerUi::ReloadLastReloadedCommand
574
+ end
575
+ [linwin, osx]
576
+ end
577
+
490
578
  def self.menus
491
579
  Menu::Builder.build do
492
580
  sub_menu "File" do
@@ -505,6 +593,8 @@ module Redcar
505
593
  item "Close Directory", Project::DirectoryCloseCommand
506
594
  end
507
595
  sub_menu "Edit" do
596
+ item "Tab Info", EditView::InfoSpeedbarCommand
597
+ separator
508
598
  item "Undo", UndoCommand
509
599
  item "Redo", RedoCommand
510
600
  separator
@@ -522,13 +612,15 @@ module Redcar
522
612
  separator
523
613
  item "Goto Line", GotoLineCommand
524
614
  item "Regex Search", SearchForwardCommand
615
+ item "Repeat Last Search", RepeatPreviousSearchForwardCommand
525
616
  separator
526
617
  sub_menu "Select" do
527
618
  item "All", SelectAllCommand
528
619
  item "Line", SelectLineCommand
529
620
  end
530
621
  item "Toggle Block Selection", ToggleBlockSelectionCommand
531
- item "Auto Complete", AutoCompleter::AutoCompleteCommand
622
+ item "Auto Complete", AutoCompleter::AutoCompleteCommand
623
+ item "Menu Auto Complete", AutoCompleter::MenuAutoCompleterCommand
532
624
  end
533
625
  sub_menu "Project" do
534
626
  item "Find File", Project::FindFileCommand
@@ -552,10 +644,12 @@ module Redcar
552
644
  sub_menu "Plugins" do
553
645
  item "Plugin Manager", PluginManagerUi::OpenCommand
554
646
  item "Reload Again", PluginManagerUi::ReloadLastReloadedCommand
647
+ item("Edit Preferences") { Project.open_dir(Redcar::Plugin::Storage.storage_dir, Redcar.app.new_window) }
555
648
  separator
556
649
  end
557
650
  sub_menu "Help" do
558
- item "Website", PrintHistoryCommand
651
+ item "About", AboutCommand
652
+ item "New In This Version", ChangelogCommand
559
653
  end
560
654
  end
561
655
  end
@@ -569,9 +663,10 @@ module Redcar
569
663
  Redcar.gui = ApplicationSWT.gui
570
664
  Redcar.app.controller = ApplicationSWT.new(Redcar.app)
571
665
 
572
- Redcar.app.load_menus
666
+ Redcar.app.refresh_menu!
573
667
  Redcar.app.load_sensitivities
574
- Redcar.app.new_window
668
+ Redcar::Project.start
669
+ Redcar.app.make_sure_at_least_one_window_open
575
670
  end
576
671
  end
577
672
  end