ver 2010.02 → 2010.08

Sign up to get free protection for your applications and to get access to all the features.
Files changed (651) hide show
  1. data/.gitignore +1 -0
  2. data/.yardopts +1 -1
  3. data/AUTHORS +2 -2
  4. data/CHANGELOG +1160 -0
  5. data/MANIFEST +212 -62
  6. data/README.textile +68 -9
  7. data/Rakefile +2 -2
  8. data/bin/ver +33 -8
  9. data/config/commands/ANTLR.rb +11 -0
  10. data/config/commands/ActionScript.rb +102 -0
  11. data/config/commands/Active4D.rb +30 -0
  12. data/config/commands/Ada.rb +11 -0
  13. data/config/commands/Ant.rb +90 -0
  14. data/config/commands/Apache.rb +98 -0
  15. data/config/commands/AppleScript.rb +169 -0
  16. data/config/commands/Blogging.rb +72 -0
  17. data/config/commands/Bulletin Board.rb +10 -0
  18. data/config/commands/Bundle Development.rb +83 -0
  19. data/config/commands/C++ Qt.rb +158 -0
  20. data/config/commands/C.rb +82 -0
  21. data/config/commands/CMake.rb +32 -0
  22. data/config/commands/CSS.rb +76 -0
  23. data/config/commands/CTags.rb +29 -0
  24. data/config/commands/CVS.rb +114 -0
  25. data/config/commands/CoffeeScript.rb +58 -0
  26. data/config/commands/Context Free.rb +20 -0
  27. data/config/commands/Cucumber.rb +94 -0
  28. data/config/commands/D.rb +47 -0
  29. data/config/commands/Darcs.rb +72 -0
  30. data/config/commands/Diff.rb +76 -0
  31. data/config/commands/Doxygen.rb +9 -0
  32. data/config/commands/Experimental Wiki.rb +9 -0
  33. data/config/commands/Experimental.rb +172 -0
  34. data/config/commands/F-Script.rb +13 -0
  35. data/config/commands/FXScript.rb +11 -0
  36. data/config/commands/FileMerge.rb +42 -0
  37. data/config/commands/Fortran.rb +58 -0
  38. data/config/commands/GTD2.rb +134 -0
  39. data/config/commands/GTDAlt.rb +225 -0
  40. data/config/commands/GetBundle.rb +41 -0
  41. data/config/commands/Go.rb +29 -0
  42. data/config/commands/Graphviz.rb +11 -0
  43. data/config/commands/Greasemonkey.rb +158 -0
  44. data/config/commands/Gri.rb +11 -0
  45. data/config/commands/Groovy Grails.rb +174 -0
  46. data/config/commands/Groovy.rb +66 -0
  47. data/config/commands/HTML.rb +206 -0
  48. data/config/commands/Haskell.rb +48 -0
  49. data/config/commands/Hotkey.rb +50 -0
  50. data/config/commands/Hyperlink Helper.rb +81 -0
  51. data/config/commands/ImageBrowser.rb +10 -0
  52. data/config/commands/Io.rb +11 -0
  53. data/config/commands/JSFL.rb +29 -0
  54. data/config/commands/JSON.rb +11 -0
  55. data/config/commands/Java.rb +45 -0
  56. data/config/commands/JavaDoc.rb +12 -0
  57. data/config/commands/JavaScript Prototype & Script.aculo.us.rb +51 -0
  58. data/config/commands/JavaScript YUI.rb +12 -0
  59. data/config/commands/JavaScript jQuery.rb +12 -0
  60. data/config/commands/JavaScript.rb +50 -0
  61. data/config/commands/LaTeX.rb +423 -0
  62. data/config/commands/Lisp.rb +20 -0
  63. data/config/commands/Logo.rb +10 -0
  64. data/config/commands/Logtalk.rb +34 -0
  65. data/config/commands/Lua.rb +29 -0
  66. data/config/commands/MEL.rb +20 -0
  67. data/config/commands/Mail.rb +73 -0
  68. data/config/commands/Make.rb +20 -0
  69. data/config/commands/Man Pages.rb +20 -0
  70. data/config/commands/Markdown.rb +194 -0
  71. data/config/commands/Math.rb +79 -0
  72. data/config/commands/Matlab.rb +188 -0
  73. data/config/commands/Maven.rb +162 -0
  74. data/config/commands/Mediawiki.rb +12 -0
  75. data/config/commands/Mercurial.rb +185 -0
  76. data/config/commands/MoinMoin.rb +74 -0
  77. data/config/commands/Movable Type.rb +68 -0
  78. data/config/commands/Nemerle.rb +29 -0
  79. data/config/commands/OCaml Experimental Completions.rb +22 -0
  80. data/config/commands/OCaml.rb +99 -0
  81. data/config/commands/Objective-C.rb +181 -0
  82. data/config/commands/Outlines.rb +54 -0
  83. data/config/commands/PHP Smarty.rb +10 -0
  84. data/config/commands/Pascal.rb +11 -0
  85. data/config/commands/Perforce.rb +102 -0
  86. data/config/commands/Perl.rb +78 -0
  87. data/config/commands/Processing.rb +11 -0
  88. data/config/commands/Prolog.rb +11 -0
  89. data/config/commands/Property List.rb +38 -0
  90. data/config/commands/Python Django.rb +11 -0
  91. data/config/commands/Python.rb +131 -0
  92. data/config/commands/R Console (R.app).rb +80 -0
  93. data/config/commands/R Console (Rdaemon).rb +414 -0
  94. data/config/commands/R.rb +337 -0
  95. data/config/commands/Ragel.rb +10 -0
  96. data/config/commands/Regular Expressions.rb +18 -0
  97. data/config/commands/Remind.rb +44 -0
  98. data/config/commands/Ruby RSpec.rb +40 -0
  99. data/config/commands/Ruby on Rails.rb +331 -0
  100. data/config/commands/Ruby.rb +220 -0
  101. data/config/commands/S5 Slide Show.rb +37 -0
  102. data/config/commands/SCons.rb +24 -0
  103. data/config/commands/SQL.rb +60 -0
  104. data/config/commands/SVK.rb +83 -0
  105. data/config/commands/SWeave.rb +63 -0
  106. data/config/commands/Scheme.rb +30 -0
  107. data/config/commands/Scilab.rb +28 -0
  108. data/config/commands/Setext.rb +20 -0
  109. data/config/commands/Shell Script.rb +59 -0
  110. data/config/commands/Slate.rb +9 -0
  111. data/config/commands/Source.rb +84 -0
  112. data/config/commands/Standard ML.rb +38 -0
  113. data/config/commands/Subversion.rb +181 -0
  114. data/config/commands/TODO.rb +32 -0
  115. data/config/commands/Tcl.rb +21 -0
  116. data/config/commands/TerminalMate.rb +30 -0
  117. data/config/commands/Text.rb +137 -0
  118. data/config/commands/TextMate.rb +100 -0
  119. data/config/commands/Textile.rb +58 -0
  120. data/config/commands/Thrift.rb +20 -0
  121. data/config/commands/Transmit.rb +34 -0
  122. data/config/commands/Txt2tags.rb +213 -0
  123. data/config/commands/Vectorscript.rb +19 -0
  124. data/config/commands/Widget Creator.rb +23 -0
  125. data/config/commands/XML.rb +29 -0
  126. data/config/commands/Xcode.rb +106 -0
  127. data/config/commands/YAML.rb +39 -0
  128. data/config/commands/YARD.rb +12 -0
  129. data/config/commands/iTerm.rb +26 -0
  130. data/config/commands/reStructuredText.rb +126 -0
  131. data/config/detect.rb +13 -1
  132. data/config/keymap/diakonos.rb +113 -115
  133. data/config/keymap/emacs.rb +6 -2
  134. data/config/keymap/nano.rb +104 -112
  135. data/config/keymap/vim.rb +329 -258
  136. data/config/plugin/autosave.rb +3 -6
  137. data/config/plugin/git.rb +18 -12
  138. data/config/plugin/soma.rb +1 -1
  139. data/config/preferences/Apache.rb +17 -17
  140. data/config/preferences/AppleScript.rb +5 -5
  141. data/config/preferences/Bundle Development.rb +10 -10
  142. data/config/preferences/C.rb +38 -30
  143. data/config/preferences/CoffeeScript.rb +28 -0
  144. data/config/preferences/ColdFusion.rb +6 -6
  145. data/config/preferences/Cucumber.rb +40 -0
  146. data/config/preferences/Diff.rb +4 -4
  147. data/config/preferences/Eiffel.rb +6 -6
  148. data/config/preferences/Erlang.rb +16 -16
  149. data/config/preferences/F-Script.rb +12 -12
  150. data/config/preferences/FXScript.rb +5 -5
  151. data/config/preferences/Fortran.rb +17 -17
  152. data/config/preferences/Go.rb +23 -0
  153. data/config/preferences/Groovy.rb +29 -0
  154. data/config/preferences/HTML.rb +44 -44
  155. data/config/preferences/Haskell.rb +14 -14
  156. data/config/preferences/Io.rb +11 -11
  157. data/config/preferences/Java.rb +8 -8
  158. data/config/preferences/LaTeX.rb +24 -24
  159. data/config/preferences/Logo.rb +6 -6
  160. data/config/preferences/Logtalk.rb +5 -5
  161. data/config/preferences/Markdown.rb +43 -0
  162. data/config/preferences/Maven.rb +42 -42
  163. data/config/preferences/Mediawiki.rb +8 -8
  164. data/config/preferences/Movable Type.rb +14 -14
  165. data/config/preferences/OCaml.rb +15 -15
  166. data/config/preferences/Objective-C.rb +5 -5
  167. data/config/preferences/PHP.rb +2564 -0
  168. data/config/preferences/Property List.rb +8 -8
  169. data/config/preferences/R.rb +5 -5
  170. data/config/preferences/Ruby.rb +24 -24
  171. data/config/preferences/Source.rb +13 -13
  172. data/config/preferences/Standard ML.rb +9 -9
  173. data/config/preferences/Tcl.rb +5 -5
  174. data/config/preferences/Text.rb +14 -14
  175. data/config/preferences/TextMate.rb +5 -5
  176. data/config/preferences/Textile.rb +8 -8
  177. data/config/preferences/YARD.rb +9 -0
  178. data/config/preferences/iTerm.rb +9 -9
  179. data/config/rc.rb +5 -2
  180. data/config/snippets/ASP vb.NET.rb +203 -54
  181. data/config/snippets/ASP.rb +51 -36
  182. data/config/snippets/ActionScript.rb +332 -205
  183. data/config/snippets/Active4D.rb +325 -256
  184. data/config/snippets/Ada.rb +106 -60
  185. data/config/snippets/Ant.rb +7 -5
  186. data/config/snippets/Apache.rb +24 -20
  187. data/config/snippets/AppleScript.rb +213 -82
  188. data/config/snippets/Blogging.rb +41 -18
  189. data/config/snippets/Bulletin Board.rb +56 -21
  190. data/config/snippets/Bundle Development.rb +108 -63
  191. data/config/snippets/C++ Qt.rb +72 -57
  192. data/config/snippets/C.rb +128 -100
  193. data/config/snippets/CMake.rb +42 -32
  194. data/config/snippets/CSS.rb +515 -115
  195. data/config/snippets/CoffeeScript.rb +85 -0
  196. data/config/snippets/ColdFusion.rb +2228 -1547
  197. data/config/snippets/Context Free.rb +35 -28
  198. data/config/snippets/Cucumber.rb +55 -0
  199. data/config/snippets/D.rb +164 -111
  200. data/config/snippets/DokuWiki.rb +103 -54
  201. data/config/snippets/Doxygen.rb +87 -40
  202. data/config/snippets/Eiffel.rb +121 -18
  203. data/config/snippets/Erlang.rb +109 -68
  204. data/config/snippets/F-Script.rb +30 -24
  205. data/config/snippets/FXScript.rb +364 -210
  206. data/config/snippets/Fortran.rb +462 -280
  207. data/config/snippets/GTDAlt.rb +10 -4
  208. data/config/snippets/Gettext.rb +10 -8
  209. data/config/snippets/Go.rb +52 -0
  210. data/config/snippets/Greasemonkey.rb +52 -42
  211. data/config/snippets/Gri.rb +12 -10
  212. data/config/snippets/Groovy Grails.rb +313 -0
  213. data/config/snippets/Groovy.rb +685 -0
  214. data/config/snippets/HTML.rb +325 -126
  215. data/config/snippets/Haskell.rb +32 -24
  216. data/config/snippets/Io.rb +53 -42
  217. data/config/snippets/Java.rb +204 -92
  218. data/config/snippets/JavaDoc.rb +105 -56
  219. data/config/snippets/JavaScript MooTools.rb +208 -13
  220. data/config/snippets/JavaScript Objective-J.rb +18 -15
  221. data/config/snippets/JavaScript Prototype & Script.aculo.us.rb +362 -107
  222. data/config/snippets/JavaScript YUI.rb +1245 -186
  223. data/config/snippets/JavaScript jQuery.rb +693 -375
  224. data/config/snippets/JavaScript.rb +71 -53
  225. data/config/snippets/LaTeX.rb +188 -0
  226. data/config/snippets/Lisp.rb +59 -40
  227. data/config/snippets/Logo.rb +12 -6
  228. data/config/snippets/Logtalk.rb +131 -60
  229. data/config/snippets/Lua.rb +43 -33
  230. data/config/snippets/MIPS Assembler.rb +7 -5
  231. data/config/snippets/Mail.rb +10 -1
  232. data/config/snippets/Markdown.rb +7 -0
  233. data/config/snippets/Matlab.rb +232 -178
  234. data/config/snippets/Maven.rb +6 -5
  235. data/config/snippets/Mediawiki.rb +43 -12
  236. data/config/snippets/MoinMoin.rb +50 -10
  237. data/config/snippets/Movable Type.rb +368 -53
  238. data/config/snippets/Nemerle.rb +127 -79
  239. data/config/snippets/OCaml Code Completion Misc.rb +1716 -72
  240. data/config/snippets/OCaml Code Completion Unix.rb +2128 -203
  241. data/config/snippets/OCaml.rb +107 -73
  242. data/config/snippets/ODCompletion.rb +169 -118
  243. data/config/snippets/Objective-C.rb +281 -193
  244. data/config/snippets/PHP Smarty.rb +149 -79
  245. data/config/snippets/PHP.rb +186 -0
  246. data/config/snippets/Pascal.rb +47 -33
  247. data/config/snippets/Perl HTML-Template.rb +33 -0
  248. data/config/snippets/Perl Mason.rb +50 -30
  249. data/config/snippets/Perl Template Toolkit.rb +25 -20
  250. data/config/snippets/Perl.rb +91 -72
  251. data/config/snippets/Processing.rb +55 -33
  252. data/config/snippets/Propel.rb +36 -30
  253. data/config/snippets/Property List.rb +57 -24
  254. data/config/snippets/Python Django Templates.rb +381 -95
  255. data/config/snippets/Python Django.rb +159 -132
  256. data/config/snippets/Python.rb +88 -0
  257. data/config/snippets/R Console (Rdaemon).rb +11 -9
  258. data/config/snippets/R.rb +96 -77
  259. data/config/snippets/Remind.rb +18 -15
  260. data/config/snippets/Ruby RSpec.rb +343 -238
  261. data/config/snippets/Ruby on Rails.rb +1116 -765
  262. data/config/snippets/Ruby.rb +770 -545
  263. data/config/snippets/S5 Slide Show.rb +32 -24
  264. data/config/snippets/SSH Config.rb +21 -17
  265. data/config/snippets/SWIG.rb +30 -18
  266. data/config/snippets/Scilab.rb +98 -79
  267. data/config/snippets/Setext.rb +10 -8
  268. data/config/snippets/Shell Script.rb +52 -42
  269. data/config/snippets/Slate.rb +62 -48
  270. data/config/snippets/Source.rb +24 -1
  271. data/config/snippets/Standard ML.rb +37 -27
  272. data/config/snippets/Tcl.rb +32 -26
  273. data/config/snippets/Text.rb +28 -15
  274. data/config/snippets/Textile.rb +130 -45
  275. data/config/snippets/Thrift.rb +22 -18
  276. data/config/snippets/Twiki.rb +158 -105
  277. data/config/snippets/Txt2tags.rb +166 -79
  278. data/config/snippets/Vectorscript.rb +47 -38
  279. data/config/snippets/Widget Creator.rb +5 -5
  280. data/config/snippets/XML.rb +30 -18
  281. data/config/snippets/YAML.rb +5 -4
  282. data/config/snippets/YARD.rb +93 -0
  283. data/config/snippets/reStructuredText.rb +25 -20
  284. data/config/syntax/ANTLR.rb +17 -15
  285. data/config/syntax/ASP vb.NET.rb +27 -24
  286. data/config/syntax/ASP.rb +21 -19
  287. data/config/syntax/ActionScript.rb +16 -16
  288. data/config/syntax/Active4D Config.rb +5 -5
  289. data/config/syntax/Active4D Library.rb +2 -2
  290. data/config/syntax/Active4D.rb +32 -30
  291. data/config/syntax/Ada.rb +13 -10
  292. data/config/syntax/Ant.rb +9 -7
  293. data/config/syntax/Apache.rb +22 -18
  294. data/config/syntax/AppleScript.rb +486 -192
  295. data/config/syntax/AsciiDoc.rb +21 -0
  296. data/config/syntax/BibTeX.rb +7 -7
  297. data/config/syntax/Blog - HTML.rb +7 -7
  298. data/config/syntax/Blog - Markdown.rb +6 -6
  299. data/config/syntax/Blog - Text.rb +2 -2
  300. data/config/syntax/Blog - Textile.rb +2 -2
  301. data/config/syntax/Bulletin Board.rb +33 -32
  302. data/config/syntax/C++ Qt.rb +7 -6
  303. data/config/syntax/C++.rb +31 -28
  304. data/config/syntax/C.rb +55 -51
  305. data/config/syntax/CMake Listfile.rb +12 -11
  306. data/config/syntax/CSS.rb +24 -23
  307. data/config/syntax/CSV.rb +3 -3
  308. data/config/syntax/CoffeeScript.rb +161 -0
  309. data/config/syntax/ColdFusion.rb +8 -8
  310. data/config/syntax/Context Free.rb +18 -16
  311. data/config/syntax/Cucumber Steps.rb +108 -0
  312. data/config/syntax/D.rb +70 -69
  313. data/config/syntax/Diff.rb +13 -10
  314. data/config/syntax/DokuWiki.rb +22 -18
  315. data/config/syntax/Doxygen.rb +1 -1
  316. data/config/syntax/Dylan.rb +8 -8
  317. data/config/syntax/Eiffel.rb +12 -12
  318. data/config/syntax/Erlang.rb +96 -89
  319. data/config/syntax/F-Script.rb +11 -9
  320. data/config/syntax/FXScript.rb +16 -14
  321. data/config/syntax/Fortran - Modern.rb +25 -24
  322. data/config/syntax/Fortran - Punchcard.rb +43 -40
  323. data/config/syntax/GTD.rb +1 -1
  324. data/config/syntax/GTDalt.rb +14 -11
  325. data/config/syntax/Gettext.rb +10 -9
  326. data/config/syntax/Gherkin.rb +65 -0
  327. data/config/syntax/Go.rb +256 -0
  328. data/config/syntax/Grails Server Page.rb +108 -0
  329. data/config/syntax/Graphviz (DOT).rb +6 -6
  330. data/config/syntax/Greasemonkey.rb +3 -3
  331. data/config/syntax/Gri.rb +12 -12
  332. data/config/syntax/Groovy.rb +502 -0
  333. data/config/syntax/HTML (ASP).rb +3 -3
  334. data/config/syntax/HTML (ASP.net).rb +31 -31
  335. data/config/syntax/HTML (Active4D).rb +19 -19
  336. data/config/syntax/HTML (Django).rb +6 -6
  337. data/config/syntax/HTML (Erlang).rb +4 -4
  338. data/config/syntax/HTML (Mason).rb +13 -13
  339. data/config/syntax/HTML (Rails).rb +5 -5
  340. data/config/syntax/HTML (Tcl).rb +3 -3
  341. data/config/syntax/HTML (Template Toolkit).rb +9 -9
  342. data/config/syntax/HTML.rb +27 -27
  343. data/config/syntax/Haskell.rb +31 -28
  344. data/config/syntax/Inform.rb +5 -5
  345. data/config/syntax/Ini.rb +4 -4
  346. data/config/syntax/Installer Distribution Script.rb +19 -18
  347. data/config/syntax/Io.rb +17 -15
  348. data/config/syntax/JSFL.rb +7 -6
  349. data/config/syntax/Java Properties.rb +3 -3
  350. data/config/syntax/Java Server Page (JSP).rb +5 -4
  351. data/config/syntax/Java.rb +40 -33
  352. data/config/syntax/JavaDoc.rb +24 -22
  353. data/config/syntax/JavaScript (Rails).rb +1 -1
  354. data/config/syntax/JavaScript.rb +41 -34
  355. data/config/syntax/Javascript YUI.rb +109 -101
  356. data/config/syntax/LaTeX Beamer.rb +3 -3
  357. data/config/syntax/LaTeX Log.rb +3 -3
  358. data/config/syntax/LaTeX Memoir.rb +7 -5
  359. data/config/syntax/LaTeX Rdaemon.rb +1 -1
  360. data/config/syntax/LaTeX.rb +52 -47
  361. data/config/syntax/Language Grammar.rb +58 -55
  362. data/config/syntax/Lex-Flex.rb +13 -13
  363. data/config/syntax/Lighttpd.rb +7 -7
  364. data/config/syntax/Lisp.rb +6 -5
  365. data/config/syntax/Literate Haskell.rb +2 -2
  366. data/config/syntax/Logo.rb +4 -4
  367. data/config/syntax/Logtalk.rb +64 -49
  368. data/config/syntax/Lua.rb +12 -12
  369. data/config/syntax/MATLAB.rb +71 -70
  370. data/config/syntax/MEL.rb +16 -15
  371. data/config/syntax/MIPS Assembler.rb +11 -11
  372. data/config/syntax/MacPorts Portfile.rb +16 -15
  373. data/config/syntax/Mail.rb +5 -4
  374. data/config/syntax/Makefile.rb +3 -3
  375. data/config/syntax/Man.rb +2 -2
  376. data/config/syntax/Markdown.rb +440 -0
  377. data/config/syntax/Maven POM.rb +17 -16
  378. data/config/syntax/Mediawiki.rb +46 -46
  379. data/config/syntax/Modula-3.rb +7 -6
  380. data/config/syntax/MoinMoin.rb +16 -16
  381. data/config/syntax/MooTools.rb +75 -65
  382. data/config/syntax/Movable Type (MT only).rb +18 -18
  383. data/config/syntax/Movable Type.rb +20 -20
  384. data/config/syntax/MultiMarkdown.rb +35 -0
  385. data/config/syntax/Nemerle.rb +12 -12
  386. data/config/syntax/OCaml.rb +79 -71
  387. data/config/syntax/OCamllex.rb +14 -14
  388. data/config/syntax/OCamlyacc.rb +14 -12
  389. data/config/syntax/Objective-C++.rb +2 -2
  390. data/config/syntax/Objective-C.rb +76 -70
  391. data/config/syntax/Objective-J.rb +30 -29
  392. data/config/syntax/Octave.rb +27 -27
  393. data/config/syntax/OpenGL.rb +4 -4
  394. data/config/syntax/PHP.rb +1154 -0
  395. data/config/syntax/Pascal.rb +8 -8
  396. data/config/syntax/Perl HTML-Template.rb +5 -5
  397. data/config/syntax/Perl.rb +80 -76
  398. data/config/syntax/Plain Text.rb +5 -5
  399. data/config/syntax/Postscript.rb +6 -6
  400. data/config/syntax/Processing.rb +20 -20
  401. data/config/syntax/Prolog.rb +2 -2
  402. data/config/syntax/Property List.rb +50 -47
  403. data/config/syntax/Prototype & Script.aculo.us (JavaScript) Bracketed.rb +15 -13
  404. data/config/syntax/Prototype & Script.aculo.us (JavaScript).rb +9 -8
  405. data/config/syntax/Python Django.rb +6 -6
  406. data/config/syntax/Python.rb +94 -87
  407. data/config/syntax/Quake Style .cfg.rb +4 -4
  408. data/config/syntax/R Console (Rdaemon) Plain.rb +2 -2
  409. data/config/syntax/R Console (Rdaemon).rb +2 -2
  410. data/config/syntax/R.rb +21 -20
  411. data/config/syntax/RSpec.rb +15 -15
  412. data/config/syntax/Ragel.rb +14 -13
  413. data/config/syntax/Rd (R Documentation).rb +4 -4
  414. data/config/syntax/Regular Expressions (Oniguruma).rb +11 -10
  415. data/config/syntax/Regular Expressions (Python).rb +9 -9
  416. data/config/syntax/Release Notes.rb +7 -6
  417. data/config/syntax/Remind.rb +19 -17
  418. data/config/syntax/Rez.rb +10 -9
  419. data/config/syntax/Ruby Haml.rb +11 -11
  420. data/config/syntax/Ruby on Rails.rb +26 -24
  421. data/config/syntax/Ruby.rb +73 -71
  422. data/config/syntax/S5 Slide Show.rb +9 -9
  423. data/config/syntax/SQL.rb +29 -27
  424. data/config/syntax/SSH Config.rb +4 -4
  425. data/config/syntax/SWIG.rb +12 -11
  426. data/config/syntax/SWeave.rb +8 -7
  427. data/config/syntax/Scheme.rb +56 -54
  428. data/config/syntax/Scilab.rb +7 -6
  429. data/config/syntax/Setext.rb +14 -13
  430. data/config/syntax/Shell Script (Bash).rb +42 -42
  431. data/config/syntax/Slate.rb +24 -19
  432. data/config/syntax/Smarty.rb +11 -10
  433. data/config/syntax/Standard ML - CM.rb +2 -2
  434. data/config/syntax/Standard ML.rb +26 -23
  435. data/config/syntax/Strings File.rb +6 -6
  436. data/config/syntax/TSV.rb +2 -2
  437. data/config/syntax/Tcl.rb +10 -9
  438. data/config/syntax/TeX Math.rb +7 -6
  439. data/config/syntax/TeX.rb +7 -7
  440. data/config/syntax/Textile.rb +33 -27
  441. data/config/syntax/Thrift.rb +37 -29
  442. data/config/syntax/Twiki.rb +19 -18
  443. data/config/syntax/Txt2tags.rb +26 -23
  444. data/config/syntax/Vectorscript.rb +9 -7
  445. data/config/syntax/XML strict.rb +6 -4
  446. data/config/syntax/XML.rb +55 -30
  447. data/config/syntax/XSL.rb +5 -5
  448. data/config/syntax/YAML.rb +14 -12
  449. data/config/syntax/camlp4.rb +5 -5
  450. data/config/syntax/iCalendar.rb +3 -3
  451. data/config/syntax/jQuery (JavaScript).rb +9 -9
  452. data/config/syntax/mod_perl.rb +6 -6
  453. data/config/syntax/qmake Project file.rb +16 -15
  454. data/config/syntax/reStructuredText.rb +23 -21
  455. data/config/syntax/svn-commit.tmp.rb +5 -5
  456. data/lib/ver.rb +169 -85
  457. data/lib/ver/action.rb +39 -30
  458. data/lib/ver/buffer.rb +962 -144
  459. data/lib/ver/buffer/frame.rb +23 -0
  460. data/lib/ver/buffer/invalid_trailing_whitespace.rb +17 -0
  461. data/lib/ver/buffer/markup_underline_link.rb +30 -0
  462. data/lib/ver/buffer/matching_brace.rb +22 -0
  463. data/lib/ver/buffer/term.rb +1 -1
  464. data/lib/ver/clipboard.rb +107 -0
  465. data/lib/ver/digraphs.rb +1373 -0
  466. data/lib/ver/entry.rb +54 -43
  467. data/lib/ver/event.rb +335 -0
  468. data/lib/ver/exception_view.rb +3 -1
  469. data/lib/ver/executor.rb +7 -7
  470. data/lib/ver/executor/buffer.rb +4 -4
  471. data/lib/ver/executor/encoding.rb +19 -0
  472. data/lib/ver/executor/entry.rb +9 -9
  473. data/lib/ver/executor/fuzzy_file_finder.rb +1 -1
  474. data/lib/ver/executor/label.rb +2 -0
  475. data/lib/ver/executor/method.rb +2 -3
  476. data/lib/ver/help/describe_key.rb +44 -44
  477. data/lib/ver/hover_completion.rb +11 -6
  478. data/lib/ver/keymap.rb +68 -39
  479. data/lib/ver/layout/paned.rb +56 -44
  480. data/lib/ver/layout/toplevel.rb +68 -0
  481. data/lib/ver/layout/vim.rb +919 -0
  482. data/lib/ver/major_mode.rb +49 -49
  483. data/lib/ver/methods.rb +22 -25
  484. data/lib/ver/methods/basic.rb +49 -20
  485. data/lib/ver/methods/bookmark.rb +33 -33
  486. data/lib/ver/methods/clipboard.rb +186 -49
  487. data/lib/ver/methods/completion.rb +5 -5
  488. data/lib/ver/methods/control.rb +47 -66
  489. data/lib/ver/methods/delete.rb +5 -122
  490. data/lib/ver/methods/help.rb +2 -2
  491. data/lib/ver/methods/insert.rb +101 -29
  492. data/lib/ver/methods/layout.rb +62 -64
  493. data/lib/ver/methods/macro.rb +45 -0
  494. data/lib/ver/methods/move.rb +63 -349
  495. data/lib/ver/methods/nano.rb +99 -71
  496. data/lib/ver/methods/open.rb +8 -7
  497. data/lib/ver/methods/preview.rb +34 -14
  498. data/lib/ver/methods/save.rb +194 -163
  499. data/lib/ver/methods/search.rb +169 -81
  500. data/lib/ver/methods/search_and_replace.rb +62 -49
  501. data/lib/ver/methods/selection.rb +26 -54
  502. data/lib/ver/methods/snippet.rb +79 -54
  503. data/lib/ver/methods/undo.rb +12 -16
  504. data/lib/ver/minibuffer.rb +283 -134
  505. data/lib/ver/minor_mode.rb +36 -47
  506. data/lib/ver/mode_resolving.rb +71 -0
  507. data/lib/ver/platform.rb +41 -0
  508. data/lib/ver/plist.rb +16 -4
  509. data/lib/ver/register.rb +86 -0
  510. data/lib/ver/status.rb +44 -6
  511. data/lib/ver/status/battery.rb +1 -1
  512. data/lib/ver/status/buffer_position.rb +2 -2
  513. data/lib/ver/status/diakonos_position.rb +3 -3
  514. data/lib/ver/status/encoding.rb +1 -1
  515. data/lib/ver/status/filename.rb +1 -1
  516. data/lib/ver/status/label.rb +20 -20
  517. data/lib/ver/status/mode.rb +1 -1
  518. data/lib/ver/status/nano_help.rb +3 -14
  519. data/lib/ver/status/nano_position.rb +6 -6
  520. data/lib/ver/status/percent.rb +2 -2
  521. data/lib/ver/status/position.rb +2 -2
  522. data/lib/ver/status/short_filename.rb +1 -1
  523. data/lib/ver/status/syntax.rb +1 -1
  524. data/lib/ver/struct.rb +28 -0
  525. data/lib/ver/syntax/processor.rb +2 -1
  526. data/lib/ver/text.rb +48 -520
  527. data/lib/ver/text/end.rb +14 -0
  528. data/lib/ver/text/index.rb +16 -101
  529. data/lib/ver/text/insert.rb +138 -0
  530. data/lib/ver/text/mark.rb +559 -0
  531. data/lib/ver/text/position.rb +240 -0
  532. data/lib/ver/text/range.rb +74 -0
  533. data/lib/ver/text/selection.rb +402 -0
  534. data/lib/ver/text/selection/block.rb +69 -0
  535. data/lib/ver/text/selection/char.rb +93 -0
  536. data/lib/ver/text/selection/line.rb +64 -0
  537. data/lib/ver/text/tag.rb +322 -0
  538. data/lib/ver/undo.rb +109 -34
  539. data/lib/ver/vendor/eval_completer.rb +184 -0
  540. data/lib/ver/vendor/json_store.rb +23 -0
  541. data/lib/ver/vendor/open3.rb +729 -0
  542. data/lib/ver/vendor/pathname.rb +73 -0
  543. data/lib/ver/vendor/textpow.rb +1 -1
  544. data/lib/ver/version.rb +1 -1
  545. data/lib/ver/widget_event.rb +9 -5
  546. data/lib/ver/widget_major_mode.rb +69 -23
  547. data/spec/helper.rb +124 -8
  548. data/spec/ver/action.rb +160 -46
  549. data/spec/ver/buffer.rb +23 -0
  550. data/spec/ver/clipboard.rb +92 -0
  551. data/spec/ver/keymap.rb +63 -61
  552. data/spec/ver/keymap/diakonos.rb +88 -0
  553. data/spec/ver/keymap/emacs.rb +65 -0
  554. data/spec/ver/keymap/general.rb +98 -0
  555. data/spec/ver/keymap/nano.rb +84 -0
  556. data/spec/ver/keymap/vim.rb +205 -0
  557. data/spec/ver/keymap/vim/changing_text.rb +489 -0
  558. data/spec/ver/keymap/vim/complex_changes.rb +53 -0
  559. data/spec/ver/keymap/vim/copying_and_moving_text.rb +258 -0
  560. data/spec/ver/keymap/vim/deleting_text.rb +188 -0
  561. data/spec/ver/keymap/vim/digraphs.rb +52 -0
  562. data/spec/ver/keymap/vim/external_commands.rb +21 -0
  563. data/spec/ver/keymap/vim/inserting_mode_keys.rb +115 -0
  564. data/spec/ver/keymap/vim/inserting_mode_special.rb +168 -0
  565. data/spec/ver/keymap/vim/inserting_text.rb +108 -0
  566. data/spec/ver/keymap/vim/left_right_motion.rb +120 -0
  567. data/spec/ver/keymap/vim/mark_motion.rb +73 -0
  568. data/spec/ver/keymap/vim/repeating_commands.rb +64 -0
  569. data/spec/ver/keymap/vim/text_object_motion.rb +137 -0
  570. data/spec/ver/keymap/vim/text_objects.rb +101 -0
  571. data/spec/ver/keymap/vim/undo_redo.rb +21 -0
  572. data/spec/ver/keymap/vim/up_down_motion.rb +94 -0
  573. data/spec/ver/keymap/vim/various_motion.rb +33 -0
  574. data/spec/ver/keysyms.rb +13 -0
  575. data/spec/ver/major_mode.rb +37 -37
  576. data/spec/ver/minor_mode.rb +21 -20
  577. data/spec/ver/plugin/smart_autoindent.rb +2 -2
  578. data/spec/ver/text/index.rb +122 -0
  579. data/spec/ver/text/insert.rb +299 -0
  580. data/spec/ver/text/mark.rb +94 -0
  581. data/spec/ver/text/range.rb +71 -0
  582. data/spec/ver/text/selection.rb +315 -0
  583. data/spec/ver/text/tag.rb +93 -0
  584. data/spec/ver/undo.rb +133 -0
  585. data/spec/ver/undo/record_sanitize.rb +85 -0
  586. data/spec/ver/vendor/eval_completer.rb +91 -0
  587. data/spec/ver/widget_major_mode.rb +4 -3
  588. data/ver.gemspec +8 -8
  589. metadata +234 -72
  590. data/.todo +0 -102
  591. data/ROADMAP.textile +0 -187
  592. data/config/snippets/ANTLR.rb +0 -3
  593. data/config/snippets/Bison.rb +0 -3
  594. data/config/snippets/CTags.rb +0 -3
  595. data/config/snippets/CVS.rb +0 -3
  596. data/config/snippets/Darcs.rb +0 -3
  597. data/config/snippets/Diff.rb +0 -3
  598. data/config/snippets/Dylan.rb +0 -3
  599. data/config/snippets/Experimental Wiki.rb +0 -3
  600. data/config/snippets/Experimental.rb +0 -3
  601. data/config/snippets/FileMerge.rb +0 -3
  602. data/config/snippets/GTD2.rb +0 -3
  603. data/config/snippets/GetBundle.rb +0 -3
  604. data/config/snippets/Graphviz.rb +0 -3
  605. data/config/snippets/Hotkey.rb +0 -3
  606. data/config/snippets/Hyperlink Helper.rb +0 -3
  607. data/config/snippets/ImageBrowser.rb +0 -3
  608. data/config/snippets/Inform.rb +0 -3
  609. data/config/snippets/Ini.rb +0 -3
  610. data/config/snippets/Installer.rb +0 -3
  611. data/config/snippets/JSFL.rb +0 -3
  612. data/config/snippets/JSON.rb +0 -3
  613. data/config/snippets/Lex-Flex.rb +0 -3
  614. data/config/snippets/Lighttpd.rb +0 -3
  615. data/config/snippets/MEL.rb +0 -3
  616. data/config/snippets/MacPorts.rb +0 -3
  617. data/config/snippets/Make.rb +0 -3
  618. data/config/snippets/Man Pages.rb +0 -3
  619. data/config/snippets/Math.rb +0 -3
  620. data/config/snippets/Mercurial.rb +0 -3
  621. data/config/snippets/Modula.rb +0 -3
  622. data/config/snippets/Navigation.rb +0 -3
  623. data/config/snippets/OCaml Experimental Completions.rb +0 -3
  624. data/config/snippets/OpenGL.rb +0 -3
  625. data/config/snippets/Outlines.rb +0 -3
  626. data/config/snippets/Perforce.rb +0 -3
  627. data/config/snippets/Perl HTML::Template.rb +0 -27
  628. data/config/snippets/Postscript.rb +0 -3
  629. data/config/snippets/Prolog.rb +0 -3
  630. data/config/snippets/Quake.rb +0 -3
  631. data/config/snippets/R Console (R.app).rb +0 -3
  632. data/config/snippets/Ragel.rb +0 -3
  633. data/config/snippets/Regular Expressions.rb +0 -3
  634. data/config/snippets/Rez.rb +0 -3
  635. data/config/snippets/Ruby Haml.rb +0 -3
  636. data/config/snippets/SCons.rb +0 -3
  637. data/config/snippets/SQL.rb +0 -3
  638. data/config/snippets/SVK.rb +0 -3
  639. data/config/snippets/SWeave.rb +0 -3
  640. data/config/snippets/Scheme.rb +0 -3
  641. data/config/snippets/Subversion.rb +0 -3
  642. data/config/snippets/TODO.rb +0 -3
  643. data/config/snippets/Tabular.rb +0 -3
  644. data/config/snippets/TerminalMate.rb +0 -3
  645. data/config/snippets/TextMate.rb +0 -3
  646. data/config/snippets/Transmit.rb +0 -3
  647. data/config/snippets/Xcode.rb +0 -3
  648. data/config/snippets/iCalendar.rb +0 -3
  649. data/config/snippets/iTerm.rb +0 -3
  650. data/lib/ver/keysyms.rb +0 -104
  651. data/spec/ver/methods/move.rb +0 -150
@@ -0,0 +1,74 @@
1
+ # Encoding: UTF-8
2
+
3
+ [{beforeRunningCommand: "nop",
4
+ command: "require_cmd moinedit\nmoinedit -c",
5
+ input: "document",
6
+ name: "Cancel",
7
+ output: "showAsHTML",
8
+ scope: "text.moinmoin",
9
+ uuid: "395D5D13-1F9A-444C-A27E-3B98E268D9FE"},
10
+ {beforeRunningCommand: "nop",
11
+ command: "perl -pe 's/^(\\s*)(={1,4})([^=].*[^=])\\2$/$1$2=$3$2=/'",
12
+ fallbackInput: "line",
13
+ input: "selection",
14
+ keyEquivalent: "@[",
15
+ name: "Decrease Heading Level",
16
+ output: "replaceSelectedText",
17
+ scope: "text.moinmoin markup.heading",
18
+ uuid: "FC6E6F47-45DC-4255-A6D9-704161A8069C"},
19
+ {beforeRunningCommand: "nop",
20
+ command: "require_cmd moinedit\nrequire_cmd mate\nmate \"$(moinedit -e)\"",
21
+ input: "none",
22
+ name: "Fetch Document [URL From Safari]",
23
+ output: "discard",
24
+ uuid: "880EE1CB-04F8-4944-946B-281BCD0B71B0"},
25
+ {beforeRunningCommand: "nop",
26
+ command: "perl -pe 's|_2f|/|g'",
27
+ fallbackInput: "scope",
28
+ input: "selection",
29
+ keyEquivalent: "^L",
30
+ name: "Fix MoinMoin Link",
31
+ output: "replaceSelectedText",
32
+ scope: "text.moinmoin markup.underline.link",
33
+ uuid: "516D608C-4BA6-4B1D-A46B-CC6C367E2A61"},
34
+ {beforeRunningCommand: "nop",
35
+ command:
36
+ "require_cmd moinedit\n\n. \"$TM_SUPPORT_PATH/lib/webpreview.sh\"\n\nhtml_header \"MoinMoin Bundle Help\" \"MoinMoin\"\nmoinedit | pre\nhtml_footer\n",
37
+ input: "document",
38
+ name: "Help",
39
+ output: "showAsHTML",
40
+ scope: "text.moinmoin",
41
+ uuid: "75C7A294-C2B3-4AF9-86A0-50D4351CF35C"},
42
+ {beforeRunningCommand: "nop",
43
+ command: "perl -pe 's/^(\\s*)(={1,4})=(.*)=\\2$/$1$2$3$2/'",
44
+ fallbackInput: "line",
45
+ input: "selection",
46
+ keyEquivalent: "@]",
47
+ name: "Increase Heading Level",
48
+ output: "replaceSelectedText",
49
+ scope: "text.moinmoin markup.heading",
50
+ uuid: "CF23FBDC-A1D2-48D6-B21F-EE93D891CE6D"},
51
+ {beforeRunningCommand: "nop",
52
+ command: "require_cmd moinedit\nmoinedit -p",
53
+ input: "document",
54
+ keyEquivalent: "^~@p",
55
+ name: "Preview",
56
+ output: "showAsHTML",
57
+ scope: "text.moinmoin",
58
+ uuid: "A06706CA-0E97-449E-8B45-142594657325"},
59
+ {beforeRunningCommand: "nop",
60
+ command: "require_cmd moinedit\ncat \"$(moinedit -r)\"",
61
+ input: "document",
62
+ keyEquivalent: "@r",
63
+ name: "Reload Document",
64
+ output: "replaceDocument",
65
+ scope: "text.moinmoin",
66
+ uuid: "05D7D0D5-C981-40CA-85D6-0539B2E9B7EA"},
67
+ {beforeRunningCommand: "nop",
68
+ command: "require_cmd moinedit\nmoinedit -s",
69
+ input: "document",
70
+ keyEquivalent: "^@p",
71
+ name: "Save",
72
+ output: "showAsHTML",
73
+ scope: "text.moinmoin",
74
+ uuid: "F0FC25A6-CC65-404E-AC7E-098ABC3682A2"}]
@@ -0,0 +1,68 @@
1
+ # Encoding: UTF-8
2
+
3
+ [{beforeRunningCommand: "nop",
4
+ command:
5
+ "# Context-sensitive help lookup for MT tags.\n# For better recognition of \"mt:Foo\" tag names, add \":\" to your\n# word character list in TextMate's \"Text Editing\" preferences.\nif grep <<<${TM_CURRENT_WORD:-!} -Esqi '^mt$'\n then echo \"You may need to add ':' to the \\\"Word Characters\\\" list in TextMate's \\\"Text Editing\\\" preferences.\"\n exit\nfi\nif grep <<<${TM_CURRENT_WORD:-!} -Esq '[a-zA-Z0-9_]+'\n\tthen exit_show_html \"<meta http-equiv='Refresh' content='0;URL=http://www.movabletype.org/tag/$TM_CURRENT_WORD'>\"\n\telse echo \"Nothing to lookup (hint: place the caret on a tag name)\"\nfi",
6
+ input: "none",
7
+ keyEquivalent: "^h",
8
+ name: "Documentation for Tag",
9
+ output: "showAsTooltip",
10
+ scope: "text.html.mt entity.name.tag.mt, text.html.mt variable.other.mt",
11
+ uuid: "4D4EACBA-CF58-48FF-8CBC-0C93BC88AB11"},
12
+ {beforeRunningCommand: "nop",
13
+ bundleUUID: "005ECD5C-8762-4E90-8D8F-C778C91FFB66",
14
+ command:
15
+ ". \"$TM_SUPPORT_PATH/lib/webpreview.sh\"\nhtml_header \"Movable Type Help\" \"Movable Type\"\nMarkdown.pl <<'EOF'\n\nTemplate Preview commands\n-------------------------\n\nIn order to properly execute previews, you will need to configure TextMate or your project with the following shell variables:\n\n* `$MT_HOME` — The working directory of your local MT installation.\n* `$MT_BLOG` — The blog id of a weblog you wish to run your previews against.\n\nCustomizing your MT syntax highlighting\n---------------------------------------\n\nYou can customize the colors used to highlight MT container and variable tags. To do this, you can use these custom scopes for new color settings:\n\n* meta.tag.mt.variable.html: Scope that covers the entire variable tag block (from `<$` to `$>`).\n* meta.tag.mt.container.html: Scope that covers the entire container tag block (from `<` to `>`).\n* entity.name.tag.mt: Scope for the inner portion of a MT container tag.\n* variable.other.mt: Scope for the inner portion of a MT variable tag.\n\nA note about the syntax highlighting of variable tags. Variable tags are written as `<$MTEntryTitle$>` to be recognized properly. Movable Type allows you to omit the `$` characters, but this language bundle requires them so they are distinguishable from the container tags.\n\nHelp\n----\n\nA context-sensitive help command (`⌃H`) is available when the cursor is on a standard MT tag. It will display the online help for that tag from the Six Apart web site.\n\nAnd More!\n---------\n\nSeveral templates and snippets are also included with this bundle. The tab-triggered snippets are grouped by keyword (“entry”, “blog”, “category”, “archive”, etc.).\n\nAuthor\n------\n\nThis bundle is maintained by [Brad Choate][1]. Brad works at [Six Apart][2], the company that publishes [Movable Type][3]. This bundle is not officially supported by Six Apart, but you're welcome to [contact Brad][4] if you have questions or feedback regarding it.\n\n[1]: http://bradchoate.com/\n[2]: http://www.sixapart.com/\n[3]: http://www.movabletype.org/\n[4]: mailto:brad@bradchoate.com?subject=Movable%20Type%20TextMate%20Bundle\n\nEOF\nhtml_footer",
16
+ input: "none",
17
+ name: "Help",
18
+ output: "showAsHTML",
19
+ scope: "text.html.mt",
20
+ uuid: "0122D7D0-A9D5-4FDC-95BA-BD61E52C2BAF"},
21
+ {beforeRunningCommand: "nop",
22
+ command: "\"$TM_BUNDLE_SUPPORT/mt-tmpl-preview.pl\" -a=c",
23
+ input: "none",
24
+ keyEquivalent: "^~p",
25
+ name: "Preview Category Archive",
26
+ output: "showAsHTML",
27
+ scope: "text.html.mt",
28
+ uuid: "7844998B-4EF4-4385-A3B1-55B1942BFE5A"},
29
+ {beforeRunningCommand: "nop",
30
+ command: "\"$TM_BUNDLE_SUPPORT/mt-tmpl-preview.pl\" -a=d",
31
+ input: "document",
32
+ keyEquivalent: "^~p",
33
+ name: "Preview Daily Archive",
34
+ output: "showAsHTML",
35
+ scope: "text.html.mt",
36
+ uuid: "59B2BA17-0CA5-47B6-9915-FD962855F639"},
37
+ {beforeRunningCommand: "nop",
38
+ command: "\"$TM_BUNDLE_SUPPORT/mt-tmpl-preview.pl\"",
39
+ input: "document",
40
+ keyEquivalent: "^~p",
41
+ name: "Preview Index",
42
+ output: "showAsHTML",
43
+ scope: "text.html.mt",
44
+ uuid: "1861B166-5B47-4E0D-847C-A466F5C11AEF"},
45
+ {beforeRunningCommand: "nop",
46
+ command: "\"$TM_BUNDLE_SUPPORT/mt-tmpl-preview.pl\" -a=i",
47
+ input: "document",
48
+ keyEquivalent: "^~p",
49
+ name: "Preview Individual Archive",
50
+ output: "showAsHTML",
51
+ scope: "text.html.mt",
52
+ uuid: "04B7A867-D52A-4964-AD32-C8E4F67F2F1A"},
53
+ {beforeRunningCommand: "nop",
54
+ command: "\"$TM_BUNDLE_SUPPORT/mt-tmpl-preview.pl\" -a=m",
55
+ input: "document",
56
+ keyEquivalent: "^~p",
57
+ name: "Preview Monthly Archive",
58
+ output: "showAsHTML",
59
+ scope: "text.html.mt",
60
+ uuid: "882B5FB7-D233-4D92-80C3-2D00D55CAB29"},
61
+ {beforeRunningCommand: "nop",
62
+ command: "\"$TM_BUNDLE_SUPPORT/mt-tmpl-preview.pl\" -a=w",
63
+ input: "document",
64
+ keyEquivalent: "^~p",
65
+ name: "Preview Weekly Archive",
66
+ output: "showAsHTML",
67
+ scope: "text.html.mt",
68
+ uuid: "4DB424EF-67FD-42A7-B27A-4705EAE1C5A4"}]
@@ -0,0 +1,29 @@
1
+ # Encoding: UTF-8
2
+
3
+ [{beforeRunningCommand: "saveActiveFile",
4
+ command:
5
+ ". \"$TM_SUPPORT_PATH/lib/webpreview.sh\"\nhtml_header \"Compile &amp; Run\" \"Nemerle\"\nrequire_cmd ncc\n\nncc \"$TM_FILEPATH\" -o \"$TM_FILEPATH\".exe && mono \"$TM_FILEPATH\".exe\n\nhtml_footer",
6
+ input: "document",
7
+ keyEquivalent: "@r",
8
+ name: "Compile & Run",
9
+ output: "showAsHTML",
10
+ scope: "source.nemerle",
11
+ uuid: "AF355E00-4F11-11DB-B7AC-00112474B8F0"},
12
+ {beforeRunningCommand: "saveActiveFile",
13
+ command:
14
+ ". \"$TM_SUPPORT_PATH/lib/webpreview.sh\"\nhtml_header \"Compile Library\" \"Nemerle\"\nrequire_cmd ncc\n\nncc -t:library \"$TM_FILEPATH\" -o \"$TM_FILEPATH\".dll",
15
+ input: "document",
16
+ keyEquivalent: "@R",
17
+ name: "Compile Library",
18
+ output: "showAsHTML",
19
+ scope: "source.nemerle",
20
+ uuid: "04046396-4FB2-11DB-ADD3-00112474B8F0"},
21
+ {beforeRunningCommand: "saveActiveFile",
22
+ command:
23
+ ". \"$TM_SUPPORT_PATH/lib/webpreview.sh\"\nhtml_header \"Compile Macro\" \"Nemerle\"\nrequire_cmd ncc\n\nncc -r:Nemerle.Compiler -t:library \"$TM_FILEPATH\" -o \"$TM_FILEPATH\".dll",
24
+ input: "document",
25
+ keyEquivalent: "@R",
26
+ name: "Compile Macro",
27
+ output: "showAsHTML",
28
+ scope: "source.nemerle",
29
+ uuid: "BBD358C1-4FB6-11DB-ADD3-00112474B8F0"}]
@@ -0,0 +1,22 @@
1
+ # Encoding: UTF-8
2
+
3
+ [{beforeRunningCommand: "nop",
4
+ command:
5
+ "#!/usr/bin/env ruby\n\nrequire \"\#{ENV['TM_BUNDLE_SUPPORT']}/lib/ocamlcompletion\"\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/osx/plist\"\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/escape\"\n\n$contents = $stdin.read\n$line = ENV['TM_CURRENT_LINE']\n$linepos = ENV['TM_LINE_INDEX'].to_i\n\n\nclass Array\n def map_i(&block)\n accum = []\n self.each_index do |i|\n accum << yield(i, self[i])\n end\n accum\n end\nend\n\n\ndef extract_module_from_line\n if $line == \"\" then return ['',/^/] end\n\n accum = []\n start = [($linepos - 1), 0].max\n \n start.downto(0) do |i|\n if $line[i].chr !~ /[A-Za-z_.]/\n break\n end\n accum << $line[i].chr\n end\n \n full = accum.reverse.join\n if full[-1] == '.' || full.strip.length == 0\n [full.chomp('.'), /^/]\n else\n matches = /^(.*?)\\.([^.]*)$/.match(full)\n if matches\n [matches[1].to_s, /^\#{Regexp.escape(matches[2].to_s)}/]\n else\n [\"\", /^\#{Regexp.escape(full)}/]\n end\n end\nend\n\n\ndef convert_to_snippet(str, stripregex)\n matches = /^(\\S+)\\s+:\\s+(.*)$/.match(str)\n funname = matches[1]\n args = []\n depth = 0\n last = 'a'\n token = []\n matches[2].each_byte do |b|\n c = b.chr\n case c\n when '('\n token << c\n depth += 1\n when ')'\n token << c\n depth -= 1\n when '>'\n if last == '-' and depth == 0\n args << (token.join.chomp('-').strip + ' ->')\n token = []\n else\n token << c\n end\n else\n token << c\n end\n last = c\n end\n args[-1] = args[-1][/^(.*) ->$/, 1]\n i = 2\n args = args.map do |a| \n a.strip! \n i += 1\n if a =~ /^\\S+:/\n if a =~ /^\\?/\n i += 1 \n \"\\$\\{\#{i - 1}:~\#{a[/^\\S+:/]}\\$\\{\#{i}:\#{e_sn(a[/:(.*)$/, 1])}\\}}\"\n else\n \"~\#{a[/^\\S+:/]}\\$\\{\#{i}:\#{e_sn(a[/:(.*)$/, 1])}\\}\" \n end\n else\n \"\\$\\{\#{i}:\#{e_sn(a)}\\}\" \n end\n end\n snippet = \"\#{funname} ${1:\#{args.join(' ')}}\".sub(stripregex, '')\n \n snippet\nend\n\n\nbegin\n openmodules = OCamlCompletion.open_modules($contents)\n modulename, regex = extract_module_from_line\n modules = if modulename == '' then nil else [modulename] end\n possible_completions = OCamlCompletion::cmigrep(regex.source, :values, modules, openmodules).split(/\\n/).select { |l| l =~ /^val\\s+/ }.sort.uniq\n possible_completions = possible_completions.map do |c|\n chash = Hash.new\n chash['completion'] = c[/^val\\s+(.*)/, 1]\n \n chash\n end\n\n plist = Hash.new\n plist['possibleCompletions'] = possible_completions\n\n cio = IO.popen(\"'\#{ENV['TM_SUPPORT_PATH']}/bin/tm_dialog' -m '\#{ENV['TM_BUNDLE_SUPPORT']}/nibs/CompletionsWindow.nib' | pl\", 'r+')\n cio.puts(plist.to_plist)\n cio.close_write\n choice = OSX::PropertyList.load(cio.read)\n if !choice['returnButton'] || choice['returnButton'] != 'Cancel'\n selection = choice['result']['returnArgument'].to_i\n snippettxt = plist['possibleCompletions'][selection]['completion']\n print convert_to_snippet(snippettxt, regex)\n else\n print \"\"\n end\nrescue\n print \"\"\nend",
6
+ fallbackInput: "line",
7
+ input: "document",
8
+ keyEquivalent: "~",
9
+ name: "Complete vals",
10
+ output: "showAsTooltip",
11
+ scope: "source.ocaml",
12
+ uuid: "55235037-C23A-4B8D-8ECD-9ED5737DD0D5"},
13
+ {beforeRunningCommand: "nop",
14
+ command:
15
+ "#!/usr/bin/env ruby\n\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/ocamlcompletion\"\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/osx/plist\"\n\nsearchstring = $stdin.read.strip\n\nplist = \"{ignoreCase = 0; regularExpression = 0; searchString = \\\"\#{searchstring}\\\"; restrictTo = \\\"all\\\";}\"\noptions = `'\#{ENV['TM_SUPPORT_PATH']}/bin/tm_dialog' -p '\#{plist}' -m '\#{ENV['TM_BUNDLE_SUPPORT']}/nibs/SearchWindow.nib' | pl`\n\n\noptions = OSX::PropertyList.load(options)\nif options['returnButton'] == 'Search'\n searchtype = options['restrictTo'].to_sym\n searchstring = options['searchString']\n if options['regularExpression'] != 1\n searchstring = Regexp.escape(searchstring)\n end\n answers = OCamlCompletion::cmigrep(searchstring, searchtype)\n if answers != ''\n puts answers\n else\n puts 'No matches found'\n end\nend",
16
+ fallbackInput: "word",
17
+ input: "selection",
18
+ keyEquivalent: "^~@f",
19
+ name: "Search .cmi",
20
+ output: "showAsTooltip",
21
+ scope: "source.ocaml",
22
+ uuid: "437E330A-5F7B-42D2-A69E-1112F1DAAE32"}]
@@ -0,0 +1,99 @@
1
+ # Encoding: UTF-8
2
+
3
+ [{beforeRunningCommand: "nop",
4
+ command: "ocamldoc -html -d /tmp \"$TM_FILENAME\"\nopen /tmp/index.html",
5
+ input: "none",
6
+ keyEquivalent: "^~@d",
7
+ name: "Build Ocamldoc",
8
+ output: "showAsTooltip",
9
+ scope: "source.ocaml",
10
+ uuid: "7E096535-0E9E-4866-956A-CCE8694F85A8"},
11
+ {beforeRunningCommand: "nop",
12
+ command:
13
+ "#!/usr/bin/env ruby\n\n# Converts function signatures into function defs\n# val of_gtk : ?cols:cols \n# -> ?expand:expand\n# -> ?fill:bool \n# -> GObj.widget \n# -> unit t\n\nval = $stdin.read\n\nstart_padding = val[/^\\s*/m]\nend_padding = val[/\\s*$/m]\nval.strip!\n\nparts = val.split(/:/)\n\nname = parts[0]\nname.sub!(/^(\\s*)val/, \"\\1let\")\n\nargs = parts[1..-1].join(':').split(/\\s*->\\s*/)\nnext_arg = 'a'\nargs = args.map do |arg|\n arg.strip!\n if arg =~ /^\\?.*:/\n arg[/^(\\?.*?):/, 1]\n elsif arg =~ /:/\n \"~\" + arg[/^(.*?):/, 1]\n elsif arg == \"unit\"\n \"()\"\n else\n arg = next_arg\n next_arg = next_arg.succ\n arg\n end\nend\n\nprint \"\#{start_padding}\#{name.rstrip} \#{args.join(' ')} =\\n\\n;;\#{end_padding}\" \n",
14
+ fallbackInput: "line",
15
+ input: "selection",
16
+ keyEquivalent: "^~@c",
17
+ name: "Convert function signature",
18
+ output: "replaceSelectedText",
19
+ scope: "source.ocaml",
20
+ uuid: "BD73877C-081E-4326-A532-8117047F6B1A"},
21
+ {beforeRunningCommand: "nop",
22
+ command:
23
+ "echo let ${TM_SELECTED_TEXT:-$TM_CURRENT_WORD} \\${1:args} =\necho -n\t\\$0\n",
24
+ fallbackInput: "word",
25
+ input: "selection",
26
+ keyEquivalent: "$\n",
27
+ name: "New Function",
28
+ output: "insertAsSnippet",
29
+ scope: "source.ocaml",
30
+ uuid: "57BED2F3-62ED-4DDF-B1C5-1395BF8CC2B4"},
31
+ {beforeRunningCommand: "nop",
32
+ command:
33
+ "cat <<SNIPPET\nmethod ${TM_SELECTED_TEXT:-$TM_CURRENT_WORD} \\${1:args} =\n\t\\$0\nSNIPPET",
34
+ fallbackInput: "word",
35
+ input: "selection",
36
+ keyEquivalent: "$\n",
37
+ name: "New Method",
38
+ output: "insertAsSnippet",
39
+ scope: "source.ocaml meta.object",
40
+ uuid: "AE75286C-FB51-4AD9-A580-9FABEA1E477A"},
41
+ {beforeRunningCommand: "nop",
42
+ bundleUUID: "F80D3822-6EE8-11D9-BF2D-000D93589AF6",
43
+ command:
44
+ "#!/usr/bin/env ruby\nrequire ENV['TM_SUPPORT_PATH'] + \"/lib/exit_codes\"\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/escape\"\n\nline = STDIN.read\n\ndef candidates_or_exit(methodSearch=\"\")\n zGrepped = %x{ zgrep ^\#{e_sh methodSearch } \#{e_sh ENV['TM_BUNDLE_SUPPORT']}/OCamlSnippets.txt.gz }\n candidates = zGrepped.split(\"\\n\")\n TextMate.exit_show_tool_tip \"No completion available\" if candidates.empty?\n return candidates\nend\n\ndef prettify(candidate)\n candidate.gsub(/\\$\\{\\d+:|\\}|\\$0/,\"\") \nend\n\ndef snippet_generator(cand, start)\n cand[start..-1] \nend\n\ndef pop_up(candidates, searchTerm)\n start = searchTerm.size\n prettyCandidates = candidates.map { |candidate| [prettify(candidate), candidate] }.sort\n if prettyCandidates.size > 1\n require \"enumerator\"\n pruneList = [] \n\n prettyCandidates.each_cons(2) do |a| \n pruneList << (a[0][0] != a[1][0]) # check if prettified versions are the same\n end\n pruneList << true\n ind = -1\n prettyCandidates = prettyCandidates.select do |a| #remove duplicates\n pruneList[ind+=1] \n end\n end\n\n if prettyCandidates.size > 1\n #index = start\n #test = false\n #while !test\n # candidates.each_cons(2) do |a,b|\n # break if test = (a[index].chr != b[index].chr || a[index].chr == \"\\t\")\n # end\n # break if test\n # searchTerm << candidates[0][index].chr\n # index +=1\n #end\n require \"\#{ENV['TM_SUPPORT_PATH']}/lib/osx/plist\"\n dialog_path = \"\#{ENV['TM_SUPPORT_PATH']}/bin/tm_dialog\"\n pl = {'menuItems' => prettyCandidates.map { |pretty, full | { 'title' => pretty, 'cand' => full} }}\n plist = pl.to_plist\n res = OSX::PropertyList::load(%x{ \#{e_sh dialog_path} -up \#{e_sh plist} })\n if res.has_key? 'selectedMenuItem'\n snippet_generator( res['selectedMenuItem']['cand'], start )\n else\n \"\"\n end\n else\n snippet_generator( candidates[0], start )\n end\nend\n\ncaret_placement =ENV['TM_LINE_INDEX'].to_i - 1\nbackContext = line[1+caret_placement..-1].match /^[a-zA-Z0-9_]/\n\nif backContext\n print line[0..caret_placement]+ \"$0\"+ line[caret_placement+1..-1]\n TextMate.exit_discard\nend\n\n\nalpha_and_caret = /[a-zA-Z_][_a-zA-Z0-9]*\\(?$/\nif k = line[0..caret_placement].match(alpha_and_caret)\n candidates = candidates_or_exit(k[0])\n res = pop_up(candidates, k[0])\nelse\n res = \"\"\nend\nprint line[0..caret_placement] + res + \"$0\"+ line[caret_placement+1..-1]",
45
+ input: "selection",
46
+ keyEquivalent: "^~@",
47
+ name: "OCaml Completion - disabled",
48
+ output: "insertAsSnippet",
49
+ scope: "source.ocaml",
50
+ uuid: "C6EBDA90-DEEF-43B8-BE1C-78759877BA35"},
51
+ {beforeRunningCommand: "nop",
52
+ command:
53
+ "TO_OCAML=${TM_OCAML:=ocamlc}\nTMPDIR=${TMPDIR:=/tmp}\n\nrequire_cmd \"$TO_OCAML\"\n\n# get a tempfile and fill it with the contents of our file\nSRCFILE=`/usr/bin/mktemp $TMPDIR/ocamlXXXXXX` || exit 1\nmv \"$SRCFILE\" \"$SRCFILE\".ml\n\nDSTFILE=`/usr/bin/mktemp $TMPDIR/ocamlXXXXXX` || exit 1\n\ncat > \"$SRCFILE\".ml\n\n# compile it to a new tempfile\ncd \"$TMPDIR\"\n\n# run it and clean up after ourselves\n\"$TM_BUNDLE_SUPPORT/OCamlMate/run_script.rb\" \"$TO_OCAML\" \"$SRCFILE\".ml \"$DSTFILE\"\n\nrm -f \"$SRCFILE\".*\nrm -f \"$DSTFILE\"\n\n",
54
+ fallbackInput: "document",
55
+ input: "selection",
56
+ keyEquivalent: "@r",
57
+ name: "Run",
58
+ output: "showAsHTML",
59
+ scope: "source.ocaml",
60
+ uuid: "86A99A45-C6B6-4F46-BBB5-04351FD5E3B1"},
61
+ {beforeRunningCommand: "nop",
62
+ command:
63
+ "#!/bin/bash\n\n\"$TM_BUNDLE_SUPPORT\"/annot -type $TM_LINE_NUMBER $TM_LINE_INDEX ${TM_FILEPATH/%\\.ml/\\.annot}",
64
+ input: "none",
65
+ keyEquivalent: "^t",
66
+ name: "Show Type",
67
+ output: "showAsTooltip",
68
+ scope: "source.ocaml",
69
+ uuid: "50C87892-73B6-4B09-B286-78A50136BC71"},
70
+ {beforeRunningCommand: "nop",
71
+ command: "\"${TM_BUNDLE_SUPPORT}/wrap\"",
72
+ disableOutputAutoIndent: true,
73
+ fallbackInput: "line",
74
+ input: "selection",
75
+ keyEquivalent: "^q",
76
+ name: "Wrap Line",
77
+ output: "replaceSelectedText",
78
+ scope: "source.ocaml",
79
+ uuid: "41481AFE-8B7C-4B7F-AECA-6725DADC0B27"},
80
+ {beforeRunningCommand: "nop",
81
+ command:
82
+ "#!/usr/bin/env ruby\n\n$: << ENV['TM_SUPPORT_PATH']\nrequire 'lib/escape'\n\ndef make_tab()\n\tsize = ENV['TM_TAB_SIZE'].to_i\n\tif ENV['TM_SOFT_TABS'] == 'YES'\n\t\treturn ' ' * size\n\telse\n\t\treturn \"\\t\"\n\tend\nend\n\n\ntext = ENV['TM_SELECTED_TEXT']\nindent = text[/^\\s*/]\ntab = make_tab()\ntext = text.to_a.map() { |l| tab + l }\n\nputs indent + \"begin\"\nprint e_sn(text.join().chomp() + \"\\n\")\nputs indent + \"end\"",
83
+ fallbackInput: "none",
84
+ input: "selection",
85
+ keyEquivalent: "^W",
86
+ name: "Wrap Section in begin/end",
87
+ output: "insertAsSnippet",
88
+ scope: "source.ocaml",
89
+ uuid: "34B55C0A-C51E-4137-9811-B805640042C8"},
90
+ {beforeRunningCommand: "nop",
91
+ command:
92
+ "#!/usr/bin/env ruby\n\n$: << ENV['TM_SUPPORT_PATH']\nrequire 'lib/escape'\n\ndef make_tab()\n\tsize = ENV['TM_TAB_SIZE'].to_i\n\tif ENV['TM_SOFT_TABS'] == 'YES'\n\t\treturn ' ' * size\n\telse\n\t\treturn \"\\t\"\n\tend\nend\n\n\ntext = ENV['TM_SELECTED_TEXT']\nindent = text[/^\\s*/]\ntab = make_tab()\ntext = text.to_a.map() { |l| tab + l }\n\nputs indent + \"try\"\nprint e_sn(text.join().chomp() + \"\\n\")\nputs indent + \"with\"\nputs indent + \"| ${1:err} -> ${2:raise err}\"\nprint \"$0\"",
93
+ fallbackInput: "none",
94
+ input: "selection",
95
+ keyEquivalent: "^~W",
96
+ name: "Wrap Section in try/with",
97
+ output: "insertAsSnippet",
98
+ scope: "source.ocaml",
99
+ uuid: "7DC24224-9222-4ACF-9F70-BBF12BF965E4"}]
@@ -0,0 +1,181 @@
1
+ # Encoding: UTF-8
2
+
3
+ [{beforeRunningCommand: "nop",
4
+ bundleUUID: "4679484F-6227-11D9-BFB1-000D93589AF6",
5
+ command:
6
+ "#!/usr/bin/env ruby\nrequire ENV['TM_SUPPORT_PATH'] + \"/lib/exit_codes\"\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/escape\"\nif ENV['DIALOG'] =~ /2$/\n require \"\#{ENV['TM_BUNDLE_SUPPORT']}/objc_completion2\"\nelse\n require \"\#{ENV['TM_BUNDLE_SUPPORT']}/objc_completion\"\nend\n\ndef stripComments(line)\n line.gsub(/((['\"])(?:\\\\.|.)*?\\2)|\\/\\*.*?\\*\\/|\\/\\/[^\\n\\r]*/m) do |s| \n if $1\n s\n else\n ' ' * s.length()\n end\n end\nend\n\nclass String\n def index_of_nth_occurrence_of(n, ch)\n self.unpack(\"U*\").each_with_index do |e, i|\n return i if e == ch && (n -= 1) == 0\n end\n return -1\n end\nend\n\ndef caret_position(line)\n tmp = ENV['TM_LINE_NUMBER'].to_i - ENV['TM_INPUT_START_LINE'].to_i\n if tmp > 0\n caret_placement = line.index_of_nth_occurrence_of(tmp,?\\n) + ENV['TM_LINE_INDEX'].to_i\n else\n caret_placement =ENV['TM_LINE_INDEX'].to_i-ENV['TM_INPUT_START_LINE_INDEX'].to_i - 1\n end\nend\n\nline = ENV['TM_CURRENT_LINE']\ncaret_placement = caret_position(line)\nres = ObjCFallbackCompletion.new(stripComments(line) , caret_placement).print\n os = 0\nprint res",
7
+ input: "none",
8
+ keyEquivalent: "~",
9
+ name: "Completion: Fallback",
10
+ output: "insertAsSnippet",
11
+ scope: "source.objc, source.objc++",
12
+ uuid: "88754B0F-D8DB-4796-9D02-058B756C606D"},
13
+ {beforeRunningCommand: "nop",
14
+ bundleUUID: "4679484F-6227-11D9-BFB1-000D93589AF6",
15
+ command:
16
+ "#!/usr/bin/env ruby\nrequire ENV['TM_SUPPORT_PATH'] + \"/lib/exit_codes\"\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/escape\"\n\nif ENV['DIALOG'] =~ /2$/\n require \"\#{ENV['TM_BUNDLE_SUPPORT']}/objc_selector_completion2\"\nelse\n require \"\#{ENV['TM_BUNDLE_SUPPORT']}/objc_selector_completion\"\nend\n\ndef stripComments(line)\n line.gsub(/((['\"])(?:\\\\.|.)*?\\2)|\\/\\*.*?\\*\\/|\\/\\/[^\\n\\r]*/m) do |s| \n if $1\n s\n else\n ' ' * s.length()\n end\n end\nend\n\n\ndef caret_position(line)\n tmp = ENV['TM_LINE_NUMBER'].to_i - ENV['TM_INPUT_START_LINE'].to_i\n if tmp > 0\n caret_placement = line.index_of_nth_occurrence_of(tmp,?\\n) + ENV['TM_LINE_INDEX'].to_i\n else\n caret_placement =ENV['TM_LINE_INDEX'].to_i-ENV['TM_INPUT_START_LINE_INDEX'].to_i - 1\n end\nend\n\nline = STDIN.read\n\ncaret_placement = caret_position(line)\n\nres = ObjcSelectorCompletion.new(stripComments(line) , caret_placement).print\nprint res",
17
+ disableOutputAutoIndent: true,
18
+ fallbackInput: "scope",
19
+ input: "selection",
20
+ keyEquivalent: "~",
21
+ name: "Completion: Inside @selector",
22
+ output: "insertAsSnippet",
23
+ scope: "meta.selector.objc",
24
+ uuid: "F929835A-C9F7-4934-87BD-05FD11C4435B"},
25
+ {beforeRunningCommand: "nop",
26
+ bundleUUID: "4679484F-6227-11D9-BFB1-000D93589AF6",
27
+ command:
28
+ "#!/usr/bin/env ruby\n\n\n\nrequire ENV['TM_SUPPORT_PATH'] + \"/lib/exit_codes\"\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/escape\"\nif ENV['DIALOG'] =~ /2$/\n require \"\#{ENV['TM_BUNDLE_SUPPORT']}/objc_completion2\"\nelse\n require \"\#{ENV['TM_BUNDLE_SUPPORT']}/objc_completion\"\nend\n\ndef stripComments(line)\n line.gsub(/((['\"])(?:\\\\.|.)*?\\2)|\\/\\*.*?\\*\\/|\\/\\/[^\\n\\r]*/m) do |s| \n if $1\n s\n else\n s.split(\"\\n\").map{|e| ' ' * e.length() }.join(\"\\n\")\n end\n end\nend\n\nclass String\n def index_of_nth_occurrence_of(n, ch)\n self.unpack(\"U*\").each_with_index do |e, i|\n return i if e == ch && (n -= 1) == 0\n end\n return -1\n end\nend\n\ndef caret_position(line)\n tmp = ENV['TM_LINE_NUMBER'].to_i - ENV['TM_INPUT_START_LINE'].to_i\n if tmp > 0\n caret_placement = line.index_of_nth_occurrence_of(tmp,?\\n) + ENV['TM_LINE_INDEX'].to_i\n else\n caret_placement =ENV['TM_LINE_INDEX'].to_i-ENV['TM_INPUT_START_LINE_INDEX'].to_i - 1\n end\nend\n\nif ENV['TERMINAL_MATE_NEW']\n class ObjCMethodCompletion\n def show_dialog(prettyCandidates,start,&snip_gen)\n require \"\#{ENV['TM_SUPPORT_PATH']}/lib/osx/plist\"\n pl = {'menuItems' => prettyCandidates.map { |pretty, junk, full | { 'title' => pretty, 'cand' => full} }}\n pl.to_plist\n res = pl['menuItems'][0]\n snip_gen.call( res['cand'], start )\n end\n end\n \n class TextMateEarlyExitException < RuntimeError\n end\n \n module TextMate\n module_function\n def exit_show_tool_tip(out = nil)\n print out if out\n raise TextMateEarlyExitException, \"show tool kit\"\n end\n \n def exit_discard(out = nil)\n print out if out\n raise TextMateEarlyExitException, \"exit discard\"\n end\n end\n \n \n \n tc = [\n {:tmVars => {'TM_LINE_NUMBER' => '19', 'TM_INPUT_START_LINE' => '19', 'TM_LINE_INDEX' => '8', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[self ad]'},\n {:tmVars => {'TM_LINE_NUMBER' => '20', 'TM_INPUT_START_LINE' => '20', 'TM_LINE_INDEX' => '20', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[[NSStrig alloc] ini]'},\n {:tmVars => {'TM_LINE_NUMBER' => '19', 'TM_INPUT_START_LINE' => '19', 'TM_LINE_INDEX' => '8', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[self adbl]'},\n {:tmVars => {'TM_LINE_NUMBER' => '21', 'TM_INPUT_START_LINE' => '21', 'TM_LINE_INDEX' => '26', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[NSObject isKindOfClass:NS]'},\n {:tmVars => {'TM_LINE_NUMBER' => '22', 'TM_INPUT_START_LINE' => '22', 'TM_LINE_INDEX' => '18', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[sto setObject:for]'},\n {:tmVars => {'TM_LINE_NUMBER' => '23', 'TM_INPUT_START_LINE' => '23', 'TM_LINE_INDEX' => '22', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[sto setObject:for for]'},\n {:tmVars => {'TM_LINE_NUMBER' => '24', 'TM_INPUT_START_LINE' => '24', 'TM_LINE_INDEX' => '21', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[sto setObject:for + ]'},\n {:tmVars => {'TM_LINE_NUMBER' => '25', 'TM_INPUT_START_LINE' => '25', 'TM_LINE_INDEX' => '5', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[obj ]'},\n {:tmVars => {'TM_LINE_NUMBER' => '26', 'TM_INPUT_START_LINE' => '26', 'TM_LINE_INDEX' => '7', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[NSObje]'},\n {:tmVars => {'TM_LINE_NUMBER' => '27', 'TM_INPUT_START_LINE' => '27', 'TM_LINE_INDEX' => '5', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[obj ]'},\n {:tmVars => {'TM_LINE_NUMBER' => '28', 'TM_INPUT_START_LINE' => '28', 'TM_LINE_INDEX' => '6', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[obj t]'},\n {:tmVars => {'TM_LINE_NUMBER' => '11','TM_INPUT_START_LINE' => '11','TM_LINE_INDEX' => '11','TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[obj t:b:av]'},\n {:tmVars => {'TM_LINE_NUMBER' => '30', 'TM_INPUT_START_LINE' => '30', 'TM_LINE_INDEX' => '19', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[obj set:[NSString ]]'},\n {:tmVars => {'TM_LINE_NUMBER' => '31', 'TM_INPUT_START_LINE' => '31', 'TM_LINE_INDEX' => '30', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[obj set:[NSString role:@\"eu\" ]]'},\n {:tmVars => {'TM_LINE_NUMBER' => '32', 'TM_INPUT_START_LINE' => '32', 'TM_LINE_INDEX' => '35', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[obj set:[NSString role:@\"eu\" forYo]]'},\n {:tmVars => {'TM_LINE_NUMBER' => '33', 'TM_INPUT_START_LINE' => '33', 'TM_LINE_INDEX' => '40', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[obj set:[NSString role:@\"eu\" forYou:sel]]'},\n {:tmVars => {'TM_LINE_NUMBER' => '34', 'TM_INPUT_START_LINE' => '34', 'TM_LINE_INDEX' => '26', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => '[obj postNotificationName: object:NSString *]'},\n {:tmVars => {'TM_LINE_NUMBER'=> '7','TM_INPUT_START_LINE'=> '6','TM_LINE_INDEX'=> '55', 'TM_INPUT_START_LINE_INDEX' => '0'}, :line => \"[[NSNotificationCenter defaultCenter] addObserver:self\\n selector:@selector(colorPicker:) ]\"}]\n\n \n ENV['TM_BUNDLE_SUPPORT'] = \"/Library/Application Support/TextMate/Bundles/Objective-C.tmbundle/Support\"\n tc.each do |element|\n element[:tmVars].each do |key,value|\n ENV[key] = value\n end\n caret_placement = caret_position(element[:line])\nbegin\n res = ObjCMethodCompletion.new(element[:line] , caret_placement).print\nrescue NoMethodError => boom\n\n puts \"error in:\" + element.inspect\n\n puts boom\n \nrescue TextMateEarlyExitException => boom\n puts \"Early Exit\"\nend\n \n end\n \nelse\nline = STDIN.read\ncaret_placement = caret_position(line)\nif ENV['TM_SCOPE'].include? \"meta.bracketed.objc\"\n res, os = ObjCMethodCompletion.new(stripComments(line) , caret_placement).print\nelse\n res = ObjCFallbackCompletion.new(stripComments(line) , caret_placement).print\n os = 0\nend\nif res\n print e_sn(line[0..caret_placement]) + res + e_sn(line[caret_placement + 1 + os..-1]) \nelse\n TextMate.exit_discard\nend\nend\n",
29
+ disableOutputAutoIndent: true,
30
+ fallbackInput: "scope",
31
+ input: "selection",
32
+ keyEquivalent: "~",
33
+ name: "Completion: Inside Brackets",
34
+ output: "insertAsSnippet",
35
+ scope: "meta.function-with-body.objc | meta.bracketed.objc",
36
+ uuid: "478FBA1D-C11C-4D53-BE95-8B8ABB5F15DC"},
37
+ {beforeRunningCommand: "nop",
38
+ bundleUUID: "4679484F-6227-11D9-BFB1-000D93589AF6",
39
+ command:
40
+ "#!/usr/bin/env ruby\nrequire ENV['TM_SUPPORT_PATH'] + \"/lib/exit_codes\"\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/escape\"\n\nline = ENV['TM_CURRENT_LINE']\n\ndef construct_arg_name(arg)\n\ta = arg.match(/(NS|AB|CI|CD)?(Mutable)?(([AEIOQUYi])?[A-Za-z_0-9]+)/)\n\tunless a.nil?\n\t\t(a[4].nil? ? \"a\": \"an\") + a[3].sub!(/\\b\\w/) { $&.upcase }\n\telse\n\t\t\"\"\n\tend\nend\n\ndef prettify(cand, call)\n stuff = cand.split(\"\\t\")\n if stuff[0].count(\":\") > 0\n name_array = stuff[0].split(\":\")\n out = \"\"\n begin\n stuff[-(name_array.size)..-1].each_with_index do |arg,i|\n if arg == \"SEL\"\n out << name_array[i] + \":(SEL)\"+ \"aSelector \"\n else\n out << name_array[i] + \":(\"+ arg.gsub(/ \\*/,(ENV['TM_C_POINTER'] || \" *\").rstrip)+\")\"+ \"\#{construct_arg_name(arg)} \"\n end\n end\n rescue NoMethodError\n out << stuff[0]\n end\n else\n out = stuff[0]\n end\n out = \"(\#{stuff[5].gsub(/ \\*/,(ENV['TM_C_POINTER'] || \" *\").rstrip)})\#{out}\" unless call || (stuff.size < 4)\n\n return [out.chomp.strip, stuff[0], cand]\nend\n\ndef snippet_generator(cand, start, call)\nstart = 0\n stuff = cand[start..-1].split(\"\\t\")\n if stuff[0].count(\":\") > 0\n\n name_array = stuff[0].split(\":\")\n name_array = [\"\"] if name_array.empty? \n out = \"\"\n begin\n stuff[-(name_array.size)..-1].each_with_index do |arg,i|\n if arg == \"SEL\"\n out << name_array[i] + \":(\#{arg})${\#{(i+1).to_s}:aSelector} \" \n else\n out << name_array[i] + \":(\#{arg.gsub(/ \\*/,(ENV['TM_C_POINTER'] || \" *\").rstrip)})${\#{(i+1).to_s}:\#{construct_arg_name(arg)}} \"\n end\n end\n rescue NoMethodError\n out << stuff[0]\n end\n else\n out = stuff[0]\n end\nout = \"(\#{stuff[5].gsub(/ \\*/,(ENV['TM_C_POINTER'] || \" *\").rstrip)})\#{out}\" unless (stuff.size < 4)\n if ENV['TM_SCOPE'].include? \"meta.scope.implementation.objc\"\n if stuff[5].match(/^void$/) || stuff[5].match(/IBAction/)\n rv = \"\"\n elsif stuff[5].match(/^BOOL$/)\n rv = \"\\treturn ${1:Y}${1/^(?:(Y)|(N)|.*)/(?1:ES:(?2:O))/};\\n\"\n else\n rv = \"\\treturn nil;\\n\"\n end\n \n out = out.chomp.strip + \"\\n\\{$0\\n\#{rv}\\}\"\n else\n out = out.chomp.strip + \"$0;\"\n end\n return out\nend\n\ndef pop_up(candidates, searchTerm, call = true)\n start = searchTerm.size\n prettyCandidates = candidates.map { |candidate| prettify(candidate,call) }.sort\n\nif prettyCandidates.size > 1\n require \"enumerator\"\n pruneList = [] \n\n prettyCandidates.each_cons(2) do |a| \n pruneList << (a[0][0] != a[1][0]) # check if prettified versions are the same\n end\n pruneList << true\n ind = -1\n prettyCandidates = prettyCandidates.select do |a| #remove duplicates\n pruneList[ind+=1] \n end\n end\n prettyCandidates = prettyCandidates.sort {|x,y| x[1].downcase <=> y[1].downcase }\n if prettyCandidates.size > 1\n #index = start\n #test = false\n #while !test\n # candidates.each_cons(2) do |a,b|\n # break if test = (a[index].chr != b[index].chr || a[index].chr == \"\\t\")\n # end\n # break if test\n # searchTerm << candidates[0][index].chr\n # index +=1\n #end\n \n show_dialog(prettyCandidates,start) do |c,s|\n\t\t\tsnippet_generator(c,s, call)\n\t\tend\n else\n snippet_generator( candidates[0], start, call )\n end\nend\n\ndef show_dialog(prettyCandidates,start,&snip_gen)\n require \"\#{ENV['TM_SUPPORT_PATH']}/lib/osx/plist\"\n pl = {'menuItems' => prettyCandidates.map { |pretty,junk, full | { 'title' => pretty, 'cand' => full} }}\n io = open('|\"$DIALOG\" -u', \"r+\")\n io << pl.to_plist\n io.close_write\n res = OSX::PropertyList::load(io.read)\n if res.has_key? 'selectedMenuItem'\n snip_gen.call( res['selectedMenuItem']['cand'], start )\n else\n \"$0\"\n end\nend\n\ndef candidates_or_exit(methodSearch, list, fileNames, notif = false)\n\tx = candidate_list(methodSearch, list, fileNames, notif)\n TextMate.exit_show_tool_tip \"No completion available\" if x.empty?\n return x\nend\n\ndef candidate_list(methodSearch, list, fileNames, notif = false)\n candidates = []\n fileNames.each do |fileName|\n zGrepped = %x{ zgrep ^\#{e_sh methodSearch } \#{e_sh ENV['TM_BUNDLE_SUPPORT']}/\#{fileName} }\n candidates += zGrepped.split(\"\\n\")\n end\n # strip notifications\n if notif\n\t candidates = candidates.select {|cand| cand.match(/\\tno\\t/) }\n\telse\n candidates = candidates.reject {|cand| cand.match(/\\tno\\t/) }\n end\n return [] if candidates.empty?\n if list.nil?\n return candidates\n else\n n = []\n candidates.each do |cand|\n n << cand if list.include?(cand.split(\"\\t\")[0])\n end\n n = (n.empty? ? candidates : n)\n\n return n\n end\nend\n\nmethodDeclaration = /^((?:\\+|-)\\s*)([a-zA-Z][a-zA-Z0-9:]*)$/\n\nif k = line.match(methodDeclaration)\n candidates = candidates_or_exit( k[2], nil, \"cocoa.txt.gz\")\n res =pop_up(candidates, k[2])\n TextMate.exit_discard if res == \"$0\"\n print k[1] + res\nelse\n TextMate.exit_discard\nend\n",
41
+ fallbackInput: "line",
42
+ input: "selection",
43
+ keyEquivalent: "~",
44
+ name: "Completion: Partial Method Signature",
45
+ output: "insertAsSnippet",
46
+ scope:
47
+ "meta.function.objc - (meta.argument-type.objc | meta.return-type.objc | meta.bracketed)",
48
+ uuid: "30E93FBA-5A81-4D94-8A03-9CD46FCA3CFA"},
49
+ {beforeRunningCommand: "nop",
50
+ command:
51
+ "#!/usr/bin/env ruby -wKU\nprint STDIN.read.sub(/\\A\\[(.*\\])[^\\]]*\\]\\z/, '\\\\1')\n",
52
+ fallbackInput: "scope",
53
+ input: "selection",
54
+ keyEquivalent: "^@\x7F",
55
+ name: "Delete Outer Method Call",
56
+ output: "replaceSelectedText",
57
+ scope: "meta.bracketed.objc",
58
+ uuid: "E802FA1A-1E2E-4F8A-957F-C1533CE57400"},
59
+ {beforeRunningCommand: "nop",
60
+ bundleUUID: "4679484F-6227-11D9-BFB1-000D93589AF6",
61
+ command:
62
+ "#!/usr/bin/env ruby\n\nif `defaults read /System/Library/CoreServices/SystemVersion ProductVersion` !~ /10\\.4\\..*/\n require ENV['TM_BUNDLE_SUPPORT'] + '/lib/docset_query.rb'\n documentation_for_selector\n exit\nend\n\nline = STDIN.read\ncaret_placement = 0\ntmp = ENV['TM_LINE_NUMBER'].to_i - ENV['TM_INPUT_START_LINE'].to_i\nif tmp > 0\nclass String\n def index_of_nth_occurrence_of(n, ch)\n self.unpack(\"U*\").each_with_index do |e, i|\n return i if e == ch && (n -= 1) == 0\n end\n return -1\n end\nend\n caret_placement += line.index_of_nth_occurrence_of(tmp,?\\n) + ENV['TM_LINE_INDEX'].to_i\nelse\n caret_placement =ENV['TM_LINE_INDEX'].to_i-ENV['TM_INPUT_START_LINE_INDEX'].to_i - 1\nend\n\ndef match_iter(rgxp,str)\n offset = 0\n while m = str.match(rgxp)\n yield [m[0], m.begin(0) + offset, m[0].length]\n str = m.post_match\n offset += m.end(0)\n end\nend\n\ndef loadHTMLPage(url,className,methodName, ref)\n className = \"NSObject\" if ref\n m = open(url).read.match(/(\\#\\/\\/apple_ref\\/[^\"]+?\\/\#{className}\\/\#{methodName})\"/)\n url += m[1] if m\n TextMate.exit_show_html \"<meta http-equiv='Refresh' content='0;URL=tm-file://\#{url}'>\"\nend\n\npat = /(\"(\\\\.|[^\"\\\\])*\"|\\[|\\]|@selector\\([^\\)]*\\)|[a-zA-Z][a-zA-Z0-9]*:)/\n\nup = 0\nstart = [0]\n#Count [\nmatch_iter(pat , line[0..caret_placement]) do |tok, beg, len|\n t = tok[0].chr\n if t == \"[\"\n start << beg\n elsif t == \"]\"\n start.pop\n end\nend\n\nup = 0\nlast = line.length\nmatch_iter(pat , line[caret_placement+1..line.length]) do |tok, beg, len|\n t = tok[0].chr\n if t == \"[\"\n up +=1\n elsif t == \"]\"\n if up == 0\n last = beg + caret_placement\n break\n end\n up -=1\n end\nend\n\nup =-1\nlist = \"\"\nif line.match(/^(-|\\+)/)\n start[-1] = 0\n last = line.length\n up = 0\nend\n\nmatch_iter(pat , line[start[-1]..last]) do |tok, beg, len|\n t = tok[0].chr\n if t == \"[\"\n up +=1\n elsif t == \"]\"\n up -=1\n elsif t !='\"' and t !='@' and up == 0\n list << tok\n end\nend\n\nif list == \"\"\n m = line[start[-1]..last].match(/([a-zA-Z][a-zA-Z0-9]*:?)\\s*(;)?$/)\n if m\n list = m[1]\n last = m.begin(0)\n end\nend\n\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/escape\"\nzGrepped = %x{ zgrep ^\#{e_sh list + \"[[:space:]]\"} \#{e_sh ENV['TM_BUNDLE_SUPPORT']}/cocoa.txt.gz }\ncandidates = zGrepped.split(\"\\n\") #.map{|e| e.split[1]}\nrequire ENV['TM_SUPPORT_PATH'] + \"/lib/exit_codes.rb\"\nTextMate.exit_show_tool_tip \"No documentation found for:\\n\#{list}\" if candidates.empty?\nif candidates.size > 1 # if more than 1 candidate disambiguate\n m = line[start[-1]..last].match(/^(\\[\\s*)+([A-Z][a-zA-Z0-9]*)/)\n old = candidates\n if m\n candidates = candidates.select{|e| e.split(\"\\t\")[2] == m[2] }\n\n end\n candidates = old if candidates.empty?\nend\n\nif candidates.size > 1\n require \"\#{ENV['TM_SUPPORT_PATH']}/lib/osx/plist\"\n dialog_path = \"\#{ENV['TM_SUPPORT_PATH']}/bin/tm_dialog\"\n#pl = {'menuItems' => prettyCandidates.map { |pretty, full | { 'title' => pretty, 'cand' => full} }} \nplist = { 'menuItems' => candidates.map do |cand|\n {'title' => \"[\#{cand.split(\"\\t\")[3].match /[^;]+/} \#{cand.split(\"\\t\")[0]}]\", 'full' => cand} \n end\n }.to_plist\nlk = candidates.map do |cand|\n {'title' => \"[\#{cand.split(\"\\t\")[3]} \#{cand.split(\"\\t\")[0]}]\", 'full' => cand} \n end\n\n\n res = OSX::PropertyList::load(%x{\#{e_sh dialog_path} -up \#{e_sh plist} })\n if res.has_key? 'selectedMenuItem'\n\tresult = res['selectedMenuItem']['full']\n else\n TextMate.exit_discard \n end\nelse\n result = candidates[0]\nend\n\n#file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSApplication_Class/Reference/Reference.html#//apple_ref/c/data/NSApplicationDidFinishLaunchingNotification\n#file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/clm/NSObject/alloc\n#file:///Developer/ADC%20Reference%20Library/documentation/GraphicsImaging/Reference/QuartzCoreFramework/Classes/CIColor_Class/Reference/Reference.html#//apple_ref/occ/clm/CIColor/colorWithRed:green:blue:alpha:\n#file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSObject/autorelease\n\nref = false # used for proper HTML anchoring of delegate methods\n\nmethodName, framework,behaviors,nsClass, methodType = result.split(\"\\t\")\nsemi = nsClass.index(\";\")\nif semi.nil?\n className = nsClass\nelse\n className = nsClass[0..semi-1]\n if className == \"NSObject\" # hopefully this will get most delegate methods right\n className = nsClass[semi + 1 ..-1]\n ref = true\n end\nend\n\n\n tLeopard = {\"AK\" => \"/Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.CoreReference.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/ApplicationKit/\",\n \"F\" => \"/Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.CoreReference.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/Foundation/\", \n \"CI\" => \"/Developer/ADC Reference Library/documentation/GraphicsImaging/Reference/QuartzCoreFramework/\",\n \"WK\" => \"/Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.CoreReference.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/WebKit/\",\n \"CD\" => \"/Developer/ADC Reference Library/documentation/Cocoa/Reference/CoreDataFramework/\",\n \"Cl\" => \"Classes/\#{className}_Class/Reference/\",\n \"Pr\" => \"Protocols/\#{className}_Protocol/Reference/\",\n\t\"Q\" => \"file:///Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.CoreReference.docset/Contents/Resources/Documents/documentation/GraphicsImaging/Reference/QuartzFramework/\"\n }\n\n \nt = {\"AK\" => \"/Developer/ADC Reference Library/documentation/Cocoa/Reference/ApplicationKit/\",\n \"F\" => \"/Developer/ADC Reference Library/documentation/Cocoa/Reference/Foundation/\", \n \"CI\" => \"/Developer/ADC Reference Library/documentation/GraphicsImaging/Reference/QuartzCoreFramework/\",\n\"WK\" => \"/Developer/ADC Reference Library/documentation/Cocoa/Reference/WebKit/\",\n \"CD\" => \"/Developer/ADC Reference Library/documentation/Cocoa/Reference/CoreDataFramework/\",\n \"Cl\" => \"Classes/\#{className}_Class/Reference/\",\n \"Pr\" => \"Protocols/\#{className}_Protocol/Reference/\", \n}\n\n url = \"\"\n url=t[framework] + t[behaviors] unless t[framework].nil?\n if File.exist?(url + \"Reference.html\")\n url += \"Reference.html\"\n loadHTMLPage(url,className,methodName,ref)\n elsif File.exist?(url + \"\#{className}.html\")\n url += \"\#{className}.html\"\n loadHTMLPage(url,className,methodName,ref)\n end\n url=tLeopard[framework] + tLeopard[behaviors] unless tLeopard[framework].nil?\n if File.exist?(url + \"Reference.html\")\n url += \"Reference.html\"\n loadHTMLPage(url,className,methodName,ref)\n elsif File.exist?(url + \"\#{className}.html\")\n url += \"\#{className}.html\"\n loadHTMLPage(url,className,methodName,ref)\n end\nTextMate.exit_show_tool_tip \"We found the selector, but the file on disk was not found. Debug info:\\n\#{result.gsub(/\\t/, ', ')}\"\n",
63
+ fallbackInput: "scope",
64
+ input: "selection",
65
+ keyEquivalent: "^h",
66
+ name: "Documentation for Selector",
67
+ output: "showAsTooltip",
68
+ scope: "meta.bracketed.objc | meta.function.objc",
69
+ uuid: "8AF46225-833C-473E-8EEC-F21C581636F6"},
70
+ {beforeRunningCommand: "nop",
71
+ command:
72
+ "if [[ \"$(defaults read /System/Library/CoreServices/SystemVersion ProductVersion)\" == 10.6.* ]]; then\n \"${TM_RUBY:-ruby}\" -r\"$TM_BUNDLE_SUPPORT/lib/docset_query.rb\" -e 'documentation_for_word'\n exit\nfi\n\nif [[ \"$(defaults read /System/Library/CoreServices/SystemVersion ProductVersion)\" == 10.5.* ]]; then\n \"${TM_RUBY:-ruby}\" -r\"$TM_BUNDLE_SUPPORT/lib/docset_query.rb\" -e 'documentation_for_word'\n exit\nfi\n\ndoc_path=\"/Developer/ADC Reference Library/documentation/Cocoa/Reference\"\ndoc_path2=\"/Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.CoreReference.docset/Contents/Resources/Documents/documentation/Cocoa/Reference\"\n\nif [[ -d \"$doc_path2\" ]]; then\n\tdoc_path=$doc_path2\nfi\n\nword=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD}\n\n# first check our doc_references.txt\nreference=$(zgrep -w \"^$word\" \"$TM_BUNDLE_SUPPORT/doc_references.txt.gz\"|cut -f2)\nif [[ -n \"$reference\" ]]; then\n\tfile=\"$doc_path/$reference\"\n\t[[ -f \"${file%#*}\" ]] && exit_show_html \"<meta http-equiv='Refresh' content='0;URL=tm-file://${file// /%20}'>\"\nfi\n\n# then see if there's a file named after the word (class)\nfolders=( \"Foundation\" \"ApplicationKit\" \"WebKit\" )\nfor (( i = 0; i < ${#folders[@]}; i++ )); do\n\tfile=\"$doc_path/${folders[$i]}/ObjC_classic/Classes/$word.html\"\n\t[[ -f \"$file\" ]] && exit_show_html \"<meta http-equiv='Refresh' content='0;URL=tm-file://${file// /%20}'>\"\ndone\n\n# then see if there's a file named after the class in Xcode 2.3 or later\nfolders=( \"Foundation\" \"ApplicationKit\" \"WebKit\" )\nfor (( i = 0; i < ${#folders[@]}; i++ )); do\n\tfile=\"$doc_path/${folders[$i]}/Classes/${word}_Class/index.html\"\n\t[[ -f \"$file\" ]] && exit_show_html \"<meta http-equiv='Refresh' content='0;URL=tm-file://${file// /%20}'>\"\ndone\n\n# finally try man (PolyglotMan)\ntry_man () {\n\tif man -w \"$word\" &>/dev/null; then\n\t\tpage=$(\"$TM_SUPPORT_PATH/bin/html_man.sh\" -a \"$word\")\n\t\techo \"<meta http-equiv='Refresh' content='0;URL=tm-file://$page'>\"\n\t\texit_show_html\n\tfi\n}\n\nMANSECT=${MANSECT:-2:3:4:5:6:7:8:9} try_man\ntry_man\n\necho \"Couldn’t find documentation for “${word}”\"\n",
73
+ fallbackInput: "word",
74
+ input: "none",
75
+ keyEquivalent: "^h",
76
+ name: "Documentation for Word / Selection",
77
+ output: "showAsTooltip",
78
+ scope:
79
+ "source.c, source.c++, source.objc, source.objc++, (source.objc support | source.objc++ support) - support.function.any-method",
80
+ uuid: "2E0F350A-7B23-11D9-B084-000D93589AF6"},
81
+ {beforeRunningCommand: "nop",
82
+ bundleUUID: "4679484F-6227-11D9-BFB1-000D93589AF6",
83
+ command:
84
+ ". \"$TM_SUPPORT_PATH/lib/webpreview.sh\"\nhtml_header \"Objective-C Bundle Help\" \"Objective-C\"\n\"$TM_SUPPORT_PATH/lib/markdown_to_help.rb\" <<'MARKDOWN'\n\n# Introduction\n\nThis document describes the commands of the Objective-C bundle and is a recommended read, since not all features are easy to discover.\n\nIn addition to this help file there are also 3 screencasts dedicated to showing Objective-C features (the links below are to more info about the screencast):\n\n 1. The [most recent][SC1] is by Joachim Mårtensson and shows completion, bracket matching, reformatting methods, and documentation lookup.\n 2. [Objective-C Part 2][SC2] by Allan Odgaard.\n 3. [Graceful Objective-C Snippets][SC3] by Allan Odgaard.\n\nYou can see [all screencasts here][AllCasts].\n\n[SC1]: http://macromates.com/screencast/TextMateObjCScreenCast.mov\n[SC2]: http://macromates.com/blog/archives/2006/04/29/objective-c-part-2-screencast/\n[SC3]: http://macromates.com/blog/archives/2006/03/17/graceful-objective-c-snippets/\n[AllCasts]: http://macromates.com/screencasts\n\n# Code Completion\n\nCode Completion is activated using the ⌥⎋ key equivalent. Code completion is available in several places which will be the topic of the next few sections.\n\n## Within Brackets\n\nA method call in Objective-C consists of three different types (though not all method calls take arguments):\n\n\t[«receiver» «selector»:«argument»]\n\nThe completion support can help you with all three parts, which will be explained in the following three sections.\n\n### Receiver\n\nA partially typed receiver can be completed, here candidates are all Cocoa classes (class objects). For example if we have:\n\n\t[NSObje‸ ]\n\nThen the list of possible completions will contain `NSObject` and `NSObjectController`.\n\n### Selector\n\nWhen the receiver is a class object, like in the following example:\n\n\t[NSString ‸]\n\nThen the candidates are all methods implemented by that class, in the above example, that would be all `NSString` class methods.\n\nIf the selector is partially typed, and the receiver is not a known class object, as is the case below:\n\n\t[object setV‸]\n\nThen a list is shown with all Cocoa methods starting with `setV`.\n\nCurrently the list of completion candidates are only filtered to those implemented by `object`, when object is a method local variable of a type that has been indexed.\n\nOne exception is when the receiver is itself a method call, for example in the following case:\n\n\t[[object string] ‸]\n\nHere only methods implemented by `NSString` are suggested, since it is know that the result of the `string` selector is an `NSString` object.\n\nFor selectors with multiple arguments, it is possible to activate completion when entering the name of a later argument, for example:\n\n\t[object setObject:name forK‸]\n\nWill list all methods starting with `setObject:forK`.\n\n### Argument\n\nWhen at the argument position, like here:\n\n [NSString stringWithCString:\"foo\" encoding:‸]\n\nThe completion command will check the argument type and find all constants which match that type. In the above example that would be all string encoding constants.\n\n## Outside of Brackets\n\nThe completion command will give different suggestions based on the caret’s scope. To see the current scope you can press ⌃⇧P. The 6 different scopes are marked below:\n\n\t@interface MyClass : NSO‸₁ <NSObj‸₂>\n\t{\n\t\tNSSt‸₃\n\t}\n\t@end\n\t\n\t@implementation MyClass\n\t- (id)init\n\t{\n\t\tif(self = [super init])\n\t\t{\n\t\t\tNSArr‸₄\n\t\t}\n\t\treturn self;\n\t}\n\t- windowW‸₅\n\t- (NSStr‸₆)stringFromString(NSSt‸₆<NSCod‸₂>)\n\t@end\n\nThe candidates suggested for the 6 different scopes are:\n\n 1. Known Cocoa classes.\n 2. Known Cocoa protocols.\n 3. Same as 1, but a variable name will also be inserted. For example the above will suggest `NSString` and `NSStream`. If we pick the former, it will insert `NSString *aString`.\n 4. Same as 3, but completion of known (C, C++, and Cocoa) functions is also suggested.\n 5. Here completion candidates are known Cocoa methods, but inserted as when implementing the method. For example in the above, one of the suggestions is `windowWillClose`, which when selected, will have the line changed to: `- (void)windowWillClose:(NSNotification *)aNotification`.\n 6. Same as 1, but an asterisk (`*`) is inserted.\n\n## Completing User Methods\n\nBy default completion candidates comes from the various Apple frameworks (mostly under the Cocoa umbrella).\n\nIf you wish to have your own methods and classes shown as completion candidates, you can invoke the *Index Headers for Completion* command.\n\nThis scans all headers in the current project folder and saves the result as `.methods.TM_Completions.txt.gz` and `.classes.TM_Completions.txt.gz` in your project folder.\n\nYou can later re-run the command to update the index.\n\n# Bracket Matching\n\n## Wrapping Selectors\n\nWhen you want to send a message (selector) to an object, you need to wrap both the object and message in square brackets (`[object message]`). Even if you did not put an opening bracket at the start of the expression, there is no need to go back and place it, since TextMate is smart enough to figure out where to place the start bracket, when typing an unmatched close bracket.\n\nHere are two simple examples:\n\n obj message‸ → [obj message]\n \n obj message:arg‸ → [obj message:arg]\n\nAn ambiguity exists when sending multi-argument messages to the object. For example if we have:\n\n obj message:arg otherMessage:arg2‸\n\nThen there are two candidates for the outcome:\n\n 1. [obj message:arg otherMessage:arg2]\n 2. obj message:[arg otherMessage:arg2]\n\nIf `message:otherMessage:` is a known Cocoa method or one of your indexed methods, then the first one is picked, otherwise the second one.\n\n## Wrapping Objects\n\nIf you type a closing bracket after a single word, it is assumed that this word is an object to which you want to send a message, e.g.:\n\n obj‸ → [obj ‸]\n\nThe space is only inserted if there is not already a space after the object.\n\n## General\n\nThe bracket completion is aware of quite a few C and Objective-C constructs and will not wrap when it does not make (much) sense.\n\n\tnil‸ → nil] // no messaging nil\n\treturn self‸ → return [self ‸]\n\tNSArray arrayWithObjects:names, urls, nil‸\n\t → [NSArray arrayWithObjects:names, urls, nil]\n\nHere is how the bracket matcher (basically) works:\n\n 1. If there is a word to the left of the caret, try to find an object to the left of it.\n 2. If the above failed, look for a message that takes an argument. If found, try to find even more such messages compare them with known Cocoa methods as we go, if no known Cocoa methods are found we use only the first matched message. try to find an object to the left of the message.\n 3. If neither 1 or 2, we have a single object, wrap it and insert the caret between the brackets.\n \n# Reformatting\n\n## Method Calls\n\nPressing ⌃Q when the caret is inside a multi-part method call will align the method-parts around the colon (`:`). For example the following:\n\n\t[NSEvent enterExitEventWithType:anEventType location:aPoint\n\t\tmodifierFlags:flags timestamp:aTimeInterval\n\t\twindowNumber:number context:aGraphicsContext\n\t\teventNumber:x trackingNumber:tracker userData:data]\n\nWill be reformatted as:\n\n\t[NSEvent enterExitEventWithType:anEventType\n\t location:aPoint\n\t modifierFlags:flags\n\t timestamp:aTimeInterval\n\t windowNumber:number\n\t context:aGraphicsContext\n\t eventNumber:x\n\t trackingNumber:tracker\n\t userData:data]\n\nBy default the inner brackets will be reformatted if the brackets are nested, move the caret to a non nested area to get the outer methods reformatted.\n\n## Method Implementations\n\nLike with method calls, we can reformat method implementations using ⌃Q. If for example we implemented the method above, and our source looks like this:\n\n\t+ (NSEvent *)enterExitEventWithType:(NSEventType)type\n\tlocation:(NSPoint)location modifierFlags:(unsigned int)flags\n\ttimestamp:(NSTimeInterval)time windowNumber:(int)windowNumber\n\tcontext:(NSGraphicsContext *)context eventNumber:(int)eventNumber\n\ttrackingNumber:(int)trackingNumber userData:(void *)userData\n\t{\n\t\n\t}\n\nThen we can reformat it easily using ⌃Q on the first line, and we get:\n\n\t+ (NSEvent *)enterExitEventWithType:(NSEventType)type\n\t location:(NSPoint)location\n\t modifierFlags:(unsigned int)flags\n\t timestamp:(NSTimeInterval)time\n\t windowNumber:(int)windowNumber\n\t context:(NSGraphicsContext *)context\n\t eventNumber:(int)eventNumber\n\t trackingNumber:(int)trackingNumber\n\t userData:(void*)userData\n\t{\n\t\n\t}\n\n# Documentation Look-up\n\nPressing ⌃H when the caret is on a class name, method call, function name, constant, or similar, will (for most known Cocoa stuff) find the appropriate spot in the documentation.\n\nThere are actually two documentation look-up commands (for two different scopes), so generally use the ⌃H key equivalent rather than the menu item.\n\n# Snippets\n\nThe Objective-C bundle has specialized several of the snippets for different scopes.\n\nAn example is shown below:\n\n\t@interface MyClass : NSObject\n\t{\n\t}\n\tm‸\n\t@end\n\t\n\t@implementation MyClass\n\tm‸\n\t\n\t- (void)myMethod\n\t{\n\t\tlog‸\n\t}\n\t@end\n\t\n\tvoid MyFunction ()\n\t{\n\t\tlog‸\n\t}\n\nHere we have entered both the tab trigger `m` and `log` in two different scopes. If we press tab (⇥) to expand all four tab triggers, then the resulting code becomes:\n\n\t@interface MyClass : NSObject\n\t{\n\t}\n\t- (id‸)method:(id)anArgument;\n\t@end\n\t\n\t@implementation MyClass\n\t- (id‸)method:(id)anArgument\n\t{\n\t\treturn nil;\n\t}\n\t\n\t- (void)myMethod\n\t{\n\t\tNSLog(@\"%s‸\", _cmd);\n\t}\n\t@end\n\t\n\tvoid MyFunction ()\n\t{\n\t\tNSLog(@\"‸\");\n\t}\n\nWhat’s interesting here is that the `m` tab trigger expands to a full method implementation inside `@implementation…@end`, but only a prototype when inside `@interface…@end`. Likewise the `log` tab trigger will only output the `_cmd` variable when called from inside a method (where it is available).\n\nAll the accessor snippets are likewise specialized for `@implementation` and `@interface`, though only one set appears in the menu (so use the tab trigger to get the proper one).\n\nIn addition to specializing the snippets for different scopes, a lot of other magic has also been put into them. If for example you add `%d` to the format string of the `NSLog` snippet, then an argument placeholder is automatically inserted. The method snippet will remove the `return nil;` line if you change the return type to `void`, and it will let the argument variable’s name match its type, for example if you change the type from `id` to `NSString*` then the variable becomes `aString`.\n\n# Credits\n\nThe cool stuff in this bundle is done by Joachim Mårtensson.\n\nAdditional work by Chris Thomas and Allan Odgaard. The initial bracket matcher (which served us well for a long time) was done by Rob Rix.\n\nMARKDOWN\nhtml_footer",
85
+ input: "none",
86
+ name: "Help",
87
+ output: "showAsHTML",
88
+ scope: "source.objc, source.objc++",
89
+ uuid: "AFB40870-6F83-4211-9362-0538287B52A9"},
90
+ {beforeRunningCommand: "nop",
91
+ bundleUUID: "4679484F-6227-11D9-BFB1-000D93589AF6",
92
+ command:
93
+ "if [[ -d \"$TM_PROJECT_DIRECTORY\" ]]; then\n find -E \"$TM_PROJECT_DIRECTORY\" -regex '.*/(_darcs|CVS|\\..*)' -prune -or -name '*.h' -print0 | ruby \"$TM_BUNDLE_SUPPORT/generateMethodList.rb\" -c \"$TM_PROJECT_DIRECTORY/.classes.TM_Completions.txt\" -m \"$TM_PROJECT_DIRECTORY/.methods.TM_Completions.txt\" -w \"$TM_BUNDLE_SUPPORT/CocoaClassesWithFramework.txt.gz\";\n gzip -f \"$TM_PROJECT_DIRECTORY/.methods.TM_Completions.txt\";\n gzip -f \"$TM_PROJECT_DIRECTORY/.classes.TM_Completions.txt\";\n echo \"indexing complete\";\n else\n echo \"no Project Path found\";\nfi",
94
+ fallbackInput: "word",
95
+ input: "none",
96
+ name: "Index Headers for Completion",
97
+ output: "showAsTooltip",
98
+ scope: "source.objc, source.objc++",
99
+ uuid: "42B1691B-DC28-4743-9B18-C8D51B70722C"},
100
+ {beforeRunningCommand: "nop",
101
+ command:
102
+ "#!/usr/bin/env ruby\n\n# Inserts a [super method] call suitable for the current method.\n# \n# The command is inserted as a snippet with each parameter as a tabstop\n# An opening bracket is inserted if necessary, and a semicolon is\n# added after the closing bracket if there is nothing else on the line.\n# \n# The command uses heuristics to find which method implementation is\n# being edited. It should be reasonably tolerant to various coding styles,\n# including different bracket and indentation styles.\n\nproto_re = /\n ^\\s* # Start of the line and optional space\n [+-]\\s* # a plus or minus for method specifier\n \\([^)]+\\) # the return type in brackets\n ((?:\\n|[^{])*) \n (?m:.*?) \n \\{ \n /x\n\nprevious_lines = STDIN.readlines[1..ENV['TM_LINE_NUMBER'].to_i - 1]\ninvocation_line = previous_lines[-1]\nproto = previous_lines.join.scan(proto_re)[-1]\n\nexit if proto.nil? or proto.empty?\n\nlast_proto_sel_with_types = proto[0].strip.sub(/^\\s+/, '').sub(%r{\\s*//.*$}, '').gsub(/\\n\\s*/, ' ')\n\ntabstop = 0\n\nlast_proto_sel_with_types.gsub!(/\\([^)]+\\)\\s*(([A-Za-z0-9_][A-Za-z0-9_]*))/) do |match|\n %Q{${\#{tabstop += 1}:\#$1}}\nend\n\nprint '[' if invocation_line[ENV[\"TM_LINE_INDEX\"].to_i - 1] != ?[\nprint 'super '\nprint last_proto_sel_with_types\nprint \"]\"\nprint \";\" if invocation_line =~ /^\\s+$/\n",
103
+ fallbackInput: "scope",
104
+ input: "document",
105
+ name: "Insert Call to Super",
106
+ output: "insertAsSnippet",
107
+ scope:
108
+ "source.objc meta.scope.implementation, source.objc++ meta.scope.implementation",
109
+ tabTrigger: "super",
110
+ uuid: "DA9B35AF-938D-4166-8576-E8E3C73F0739"},
111
+ {beforeRunningCommand: "nop",
112
+ bundleUUID: "4679484F-6227-11D9-BFB1-000D93589AF6",
113
+ command:
114
+ "#!/usr/bin/env ruby\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/escape\"\nrequire ENV['TM_SUPPORT_PATH'] + \"/lib/exit_codes\"\n\nclass Lexer\n include Enumerable\n def initialize\n @label = nil\n @pattern = nil\n @handler = nil\n @input = nil\n \n reset\n \n yield self if block_given?\n end\n \n def input(&reader)\n if @input.is_a? self.class\n @input.input(&reader)\n else\n class << reader\n alias_method :next, :call\n end\n \n @input = reader\n end\n end\n \n def add_token(label, pattern, &handler)\n unless @label.nil?\n @input = clone\n end\n \n @label = label\n @pattern = /(\#{pattern})/\n @handler = handler || lambda { |label, match| [label, match] }\n \n reset\n end\n \n def next(peek = false)\n while @tokens.empty? and not @finished\n new_input = @input.next\n if new_input.nil? or new_input.is_a? String\n @buffer += new_input unless new_input.nil?\n new_tokens = @buffer.split(@pattern)\n while new_tokens.size > 2 or (new_input.nil? and not new_tokens.empty?)\n @tokens << new_tokens.shift\n @tokens << @handler[@label, new_tokens.shift] unless new_tokens.empty?\n end\n @buffer = new_tokens.join\n @finished = true if new_input.nil?\n else\n separator, new_token = @buffer.split(@pattern)\n new_token = @handler[@label, new_token] unless new_token.nil?\n @tokens.push( *[ separator,\n new_token,\n new_input ].select { |t| not t.nil? and t != \"\" } )\n reset(:buffer)\n end\n end\n peek ? @tokens.first : @tokens.shift\n end\n \n def peek\n self.next(true)\n end\n \n def each\n while token = self.next\n yield token\n end\n end\n \n private\n \n def reset(*attrs)\n @buffer = String.new if attrs.empty? or attrs.include? :buffer\n @tokens = Array.new if attrs.empty? or attrs.include? :tokens\n @finished = false if attrs.empty? or attrs.include? :finished\n end\nend\n\n\nclass ObjcParser\n\t\n\tattr_reader :list\n def initialize(args)\n @list = args\n end\n \n def get_position\n return nil,nil if @list.empty?\n\thas_message = true\n\n a = @list.pop\n endings = [:close,:post_op,:at_string,:at_selector,:identifier]\nopenings = [:open,:return,:control]\n if a.tt == :identifier && !@list.empty? && endings.include?(@list[-1].tt)\n insert_point = find_object_start\n else\n @list << a\n\thas_message = false unless methodList\n insert_point = find_object_start\n end\nreturn insert_point, has_message\n end\n \n def methodList\n \told = Array.new(@list)\n\n a = selector_loop(@list)\n if !a.nil? && a.tt == :selector\n if file_contains_selector? a.text\n return true\n else\n internal = Array.new(@list)\n b = a.text\n until internal.empty?\n tmp = selector_loop(internal)\n return true if tmp.nil?\n b = tmp.text + b\n if file_contains_selector? b\n @list = internal\n return true\n end\n end\n end\n\telse\n end\n@list = old\nreturn false\n end\n \n def file_contains_selector?(methodName)\n fileNames = [\"\#{ENV['TM_BUNDLE_SUPPORT']}/cocoa.txt.gz\"]\n userMethods = \"\#{ENV['TM_PROJECT_DIRECTORY']}/.methods.TM_Completions.txt.gz\"\n\n fileNames += [userMethods] if File.exists? userMethods\n candidates = []\n fileNames.each do |fileName|\n zGrepped = %x{zgrep ^\#{e_sh methodName }[[:space:]] \#{e_sh fileName }}\n candidates += zGrepped.split(\"\\n\")\n end\n\n return !candidates.empty?\n end\n \n def selector_loop(l)\n until l.empty?\n obj = l.pop\n case obj.tt\n when :selector\n return obj\n when :close\n return nil if match_bracket(obj.text,l).nil?\n when :open\n return nil\n end\n end\n return nil\n end\n \n def match_bracket(type,l)\n partner = {\"]\"=>\"[\",\")\"=>\"(\",\"}\"=>\"{\"}[type]\n up = 1\n until l.empty?\n obj = l.pop\n case obj.text\n when type\n up +=1\n when partner\n up -=1\n end\n return obj.beg if up == 0\n end\n end\n \n def find_object_start\n openings = [:operator,:selector,:open,:return,:control]\n until @list.empty? || openings.include?(@list[-1].tt)\n obj = @list.pop\n case obj.tt\n when :close\n tmp = match_bracket(obj.text, @list)\n b = tmp unless tmp.nil?\n when :star\n b, ate = eat_star(b,obj.beg)\n return b unless ate\n when :nil\n b = nil\n else\n b = obj.beg\n end\n end\n return b\n end\n\n def eat_star(prev, curr)\n openings = [:operator,:selector,:open,:return,:control,:star]\n if @list.empty? || openings.include?(@list[-1].tt)\n return curr, true\n else\n return prev, false\n end\n end\nend\n\nif __FILE__ == $PROGRAM_NAME\n require \"stringio\"\n line = ENV['TM_CURRENT_LINE']\n caret_placement =ENV['TM_LINE_INDEX'].to_i - 1\n\n up = 0\n pat = /\"(?:\\\\.|[^\"\\\\])*\"|\\[|\\]/\n line.scan(pat).each do |item|\n case item\n when \"[\"\n up+=1\n when \"]\"\n up -=1\n end\n end\n if caret_placement ==-1\n print \"]$0\" + e_sn(line[caret_placement+1..-1])\n TextMate.exit_insert_snippet\n end\n\n if up != 0 \n print e_sn(line[0..caret_placement])+\"]$0\"+e_sn(line[caret_placement+1..-1])\n TextMate.exit_insert_snippet\n end\n \n to_parse = StringIO.new(line[0..caret_placement])\n lexer = Lexer.new do |l|\n l.add_token(:return, /\\breturn\\b/)\n l.add_token(:nil, /\\bnil\\b/)\n l.add_token(:control, /\\b(?:if|while|for|do)(?:\\s*)\\(/)# /\\bif|while|for|do(?:\\s*)\\(/)\n l.add_token(:at_string, /\"(?:\\\\.|[^\"\\\\])*\"/)\n l.add_token(:selector, /\\b[A-Za-z_0-9]+:/)\n l.add_token(:identifier, /\\b[A-Za-z_0-9]+\\b/)\n l.add_token(:bind, /(?:->)|\\./)\n l.add_token(:post_op, /\\+\\+|\\-\\-/)\n l.add_token(:at, /@/)\n l.add_token(:star, /\\*/)\n l.add_token(:close, /\\)|\\]|\\}/)\n l.add_token(:open, /\\(|\\[|\\{/)\n l.add_token(:operator, /[&-+\\/=%!:\\,\\?;<>\\|\\~\\^]/)\n\n l.add_token(:terminator, /;\\n*|\\n+/)\n l.add_token(:whitespace, /\\s+/)\n l.add_token(:unknown, /./) \n \n l.input { to_parse.gets }\n #l.input {STDIN.read}\n end\n\n offset = 0\n tokenList = []\n A = Struct.new(:tt, :text, :beg)\n\n lexer.each do |token| \n tokenList << A.new(*(token<<offset)) unless [:whitespace,:terminator].include? token[0]\n offset +=token[1].length\n end\n if tokenList.empty?\n print e_sn(line[0..caret_placement])+\"]$0\"+e_sn(line[caret_placement+1..-1])\n TextMate.exit_insert_snippet\n end\n \n par = ObjcParser.new(tokenList)\n b, has_message = par.get_position\n\n if !line[caret_placement+1].nil? && line[caret_placement+1].chr == \"]\"\n if b.nil? || par.list.empty? || par.list[-1].text == \"[\"\n\t\t\tprint e_sn(line[0..caret_placement])+\"]$0\"+e_sn(line[caret_placement+2..-1])\n \tTextMate.exit_insert_snippet\n\t\tend\n end\n\n if b.nil?\n print e_sn(line[0..caret_placement])+\"]$0\"+e_sn(line[caret_placement+1..-1])\n elsif !has_message && (b < caret_placement )\n print e_sn(line[0..b-1]) unless b == 0\n ins = (/\\s/ =~ line[caret_placement].chr ? \"$0]\" : \" $0]\")\n print \"[\" +e_sn(line[b..caret_placement]) + ins +e_sn(line[caret_placement+1..-1])\n elsif b < caret_placement \n print e_sn(line[0..b-1]) unless b == 0\n print \"[\" +e_sn(line[b..caret_placement]) +\"]$0\"+e_sn(line[caret_placement+1..-1]) \n else\n print e_sn(line[0..caret_placement])+\"]$0\"+e_sn(line[caret_placement+1..-1])\n end\nend\n",
115
+ fallbackInput: "line",
116
+ input: "selection",
117
+ keyEquivalent: "]",
118
+ name: "Insert Matching Start Bracket",
119
+ output: "insertAsSnippet",
120
+ scope: "source.objc - string - comment, source.objc++ - string - comment",
121
+ uuid: "DB16585F-4D78-412B-B468-38AD54C254B5"},
122
+ {beforeRunningCommand: "nop",
123
+ command:
124
+ "#!/usr/bin/env ruby\n\nproto_re = /\n ^\\s* # Start of the line and optional space\n [+-]\\s* # a plus or minus for method specifier\n \\([^)]+\\) # the return type in brackets\n ((?:\\n|[^@{])*) \n (?m:[\\s;]*) \n \\{ \n /x\n\nprevious_lines = STDIN.readlines[1..ENV['TM_LINE_NUMBER'].to_i - 1]\ninvocation_line = previous_lines[-1]\n\nproto = previous_lines.join.scan(proto_re)[-1]\n\nexit if proto.nil? or proto.empty?\n\nlast_proto_sel_with_types = proto[0].strip.sub(/^\\s+/, '').sub(%r{\\s*//.*$}, '').gsub(/\\n\\s*/, ' ')\n\nparams = []\nparams = last_proto_sel_with_types.scan(/(.+?)\\s*:\\s*\\((.+?)\\)\\s*(\\w+)/)\n\ndef format_specifier_for_type(type)\n type = type.gsub(/\\s*const\\s*/, '')\n %w[int bool BOOL long NSInteger NSUInteger size_t].each { |t| return('%d') if type.include? t }\n %w[float double CGFloat].each { |t| return('%f') if type.include? t }\n return '%c' if type == 'char'\n return '%C' if type == 'unichar'\n return '%s' if type.include?('char*') || type.include?('string')\n '%@'\nend\n\ndef transformer_for(type, name)\n case type\n when 'NSRect': \"NSStringFromRect(\#{name})\"\n when 'NSRange': \"NSStringFromRange(\#{name})\"\n when 'NSPoint': \"NSStringFromPoint(\#{name})\"\n when 'NSSize': \"NSStringFromSize(\#{name})\"\n when 'SEL': \"NSStringFromSelector(\#{name})\"\n when /string/: \"\#{name}.c_str()\"\n else name\n end\nend\n\nprint 'NSLog(@\"[%@ '\nif params.empty?\n print last_proto_sel_with_types\nelse\n print params.map { |param, type, name| param + ':' + format_specifier_for_type(type) }.join\nend\nprint ']\", [self class]'\nprint ', ' + params.map { |param, type, name| transformer_for(type, name) }.join(', ') unless params.empty?\nprint \");\"\n",
125
+ input: "document",
126
+ name: "Insert NSLog() for Current Method",
127
+ output: "insertAsSnippet",
128
+ scope:
129
+ "source.objc meta.scope.implementation, source.objc++ meta.scope.implementation",
130
+ tabTrigger: "logm",
131
+ uuid: "C5624A26-E661-46EE-AA6A-14E6B678CFF9"},
132
+ {beforeRunningCommand: "nop",
133
+ command:
134
+ "#!/usr/bin/env ruby\n\ndef e (str); str.gsub(/[$`\\\\]/, '\\\\\\\\\\0'); end\n\nline = STDIN.read\ncol = ENV['TM_LINE_INDEX'].to_i\n\nleft, right = line[0...col], line[col..-1]\n\nif left =~ /(.*?)(\\[)?(\\w+)\\s+$/ then\n lead, bracket, cl = $1, $2, $3\n right = line[col+1..-1] unless bracket.nil?\n print \"\#{e lead}${1/.+/[/}[[\#{e cl} alloc] init$0]${1: autorelease]}\"\n print right.empty? ? \";\" : \"\#{e right}\"\nelse\n # this is only if we were not able to interpret the line\n print \"\#{e left}$0\#{e right}\"\nend\n",
135
+ fallbackInput: "line",
136
+ input: "selection",
137
+ name: "Insert [[[… alloc] init] autorelease]",
138
+ output: "insertAsSnippet",
139
+ scope: "source.objc, source.objc++",
140
+ tabTrigger: "alloc",
141
+ uuid: "EA820F17-FD1D-4E7A-9961-E75F7D360968"},
142
+ {beforeRunningCommand: "nop",
143
+ command:
144
+ "#!/usr/bin/env ruby -wKU\n#\n# Possible improvements:\n# • Preserve empty lines between methods taken from the clipboard\n# • Make the “parser” conform to the actual Objective-C spec\n#\nrequire ENV['TM_SUPPORT_PATH'] + '/lib/exit_codes'\n\nmethods = []\n\n%x{ pbpaste }.scan(/^\n \\s*\n ([-+]) # Class or object method\n (\\s* \\( ([^\\)]+) \\))? # Optional return type\n (\\s* [a-z0-9_]+) # Method name\n\n # Zero or more parameters:\n\n ( (\\s* [a-z0-9_]*) # Optional name of parameter\n : # Mandatory colon\n (\\s* \\( [^\\)]+ \\))? # Optional type of parameter\n (\\s* [a-z0-9_]+) # Parameter name (might be optional)\n (\\s* , \\s* ...)? # Optional var-args notation\n )*\n\n (?=\\s* ;?) # Optional semicolon\n\n/ix) do\n rettype = $3.to_s.strip\n methods << [$&.strip.gsub(' *)', (ENV['TM_C_POINTER'] || ' *').rstrip + ')'), rettype]\nend\n\nTextMate::exit_show_tool_tip('No methods found on the clipboard') if methods.empty?\n\nif ENV['TM_SCOPE'] !~ /meta.implementation.objc/\n methods.each { |(proto, rettype)| puts \"\#{proto};\" }\nelse\n tabstop = 0\n puts(methods.map do |(proto, rettype)|\n ret = case rettype\n when \"void\", \"IBAction\"\n \"\"\n when \"BOOL\"\n \"\\treturn ${\#{tabstop+=1}:Y}${1/^(?:(Y)|(N)|.*)/(?1:ES:(?2:O))/};\\n\"\n else\n \"\\treturn ${\#{tabstop+=1}:nil};\\n\"\n end\n \"\#{proto}\\n{\\n\#{ret}}\\n\"\n end.join(\"\\n\"))\nend\n",
145
+ fallbackInput: "line",
146
+ input: "none",
147
+ keyEquivalent: "^V",
148
+ name: "Paste Implementation / Interface",
149
+ output: "insertAsSnippet",
150
+ scope: "meta.interface-or-protocol.objc, meta.implementation.objc",
151
+ uuid: "CB5EC7EC-35B7-4FD8-9045-31CCC379D474"},
152
+ {beforeRunningCommand: "nop",
153
+ command:
154
+ "pbpaste|head -n1|perl -pe's/:\\(.+?\\)\\w+\\s*/:/g'|perl -pe's/^[-+]\\s*\\(.+?\\)\\s*|\\s+|;//g'",
155
+ input: "none",
156
+ keyEquivalent: "^V",
157
+ name: "Paste selector",
158
+ output: "afterSelectedText",
159
+ scope: "meta.selector.objc",
160
+ uuid: "D9CA98D1-7564-4CCB-8156-9A06210A1A7F"},
161
+ {beforeRunningCommand: "nop",
162
+ bundleUUID: "4679484F-6227-11D9-BFB1-000D93589AF6",
163
+ command:
164
+ "#!/usr/bin/env ruby\nrequire \"\#{ENV['TM_SUPPORT_PATH']}/lib/escape\"\n\nline = STDIN.read\noffset = ENV['TM_INPUT_START_COLUMN'].to_i - 1\ncaret_placement = 0\ntmp = ENV['TM_LINE_NUMBER'].to_i - ENV['TM_INPUT_START_LINE'].to_i\nif tmp > 0\nclass String\n def index_of_nth_occurrence_of(n, ch)\n self.unpack(\"U*\").each_with_index do |e, i|\n return i if e == ch && (n -= 1) == 0\n end\n return -1\n end\nend\n caret_placement += line.index_of_nth_occurrence_of(tmp,?\\n) + ENV['TM_LINE_INDEX'].to_i\nelse\n caret_placement =ENV['TM_LINE_INDEX'].to_i-ENV['TM_INPUT_START_LINE_INDEX'].to_i - 1\nend\n\ndef match_iter(rgxp,str)\n offset = 0\n while m = str.match(rgxp)\n yield [m[0], m.begin(0) + offset, m[0].length]\n str = m.post_match\n offset += m.end(0)\n end\nend\n\npat = /(\"(\\\\.|[^\"\\\\])*\"|\\[|\\]|@selector\\([^\\)]*\\)|[a-zA-Z][a-zA-Z0-9]*:)/\nup = 0\nlist = []\n\nup = 0\npat = /(\"(\\\\.|[^\"\\\\])*\"|\\[|\\]|@selector\\([^\\)]*\\)|[a-zA-Z][a-zA-Z0-9]*:)/\nstart = [0]\nmatch_iter(pat , line[0..caret_placement]) do |tok, beg, len|\n t = tok[0].chr\n if t == \"[\"\n start << beg\n elsif t == \"]\"\n start.pop\n end\nend\n\n\nup = 0\nlast = line.length\nmatch_iter(pat , line[caret_placement+1..line.length]) do |tok, beg, len|\n t = tok[0].chr\n if t == \"[\"\n up +=1\n elsif t == \"]\"\n if up == 0\n last = beg + caret_placement + 1\n break\n end\n up -=1\n end\nend\n\nlist = []\nprefix = \"\"\nprefix = line[0..start[-1]-1] unless start[-1] == 0\nsuffix = line[last+1..-1]\nl = line[start[-1]..last]\nup = -1\n\nmatch_iter(pat , l) do |tok, beg, len|\n t = tok[0].chr\n if t == \"[\"\n up +=1\n elsif t == \"]\"\n up -=1\n elsif t !='\"' and t !='@' and up == 0\n list << [beg,len]\n end\nend\n\nlist << [l.length,0]\noffset += start[-1]\nif list.length > 2\n print e_sn(prefix+ l[0...list[1][0]].strip)\n #check to if the first \"selector:\" is not in the first line\n if k = line[0...start[-1]+list[0][0]].rindex(\"\\n\")\n firstIndex = list[0][0]+list[0][1]- k -1\n offset = start[-1]\n else\n firstIndex = list[0][0] + list[0][1] \n end\n (1..(list.length() -2)).each do |ind|\n list[ind][1]+list[ind][0]\n b = (b = firstIndex-list[ind][1]+offset) > 0 ? b : 0\n print e_sn(\"\\n\" + \" \"*b + l[(list[ind][0])...(list[ind+1][0])].strip)\n end\n print e_sn(suffix) unless suffix.nil?\nelse\n print e_sn(line)\nend\n",
165
+ fallbackInput: "scope",
166
+ input: "selection",
167
+ keyEquivalent: "^q",
168
+ name: "Reformat Method Call",
169
+ output: "replaceSelectedText",
170
+ scope: "meta.bracketed.objc",
171
+ uuid: "8957C99F-88F5-42CC-B355-AAC6BF3FDF8D"},
172
+ {beforeRunningCommand: "nop",
173
+ command:
174
+ "#!/usr/bin/env ruby\ntext = STDIN.read\n\ntext.gsub!(/(\\([^\\)]+)\\s+(\\*\\))/, '\\1\\2')\n\noffset_to_first_colon = text.index(':')\n\nargument_triplets = text.scan /(.+?):\\s*\\((.+?)\\)\\s*([^\\s]*)\\s*/\n\nprint(argument_triplets.collect do |triplet|\n\tsprintf \"%\#{offset_to_first_colon}s:(%s)%s\", triplet[0], triplet[1], triplet[2]\nend.join(\"\\n\"))\n\nprint $1 if text.match /(\\n+)\\z/",
175
+ fallbackInput: "scope",
176
+ input: "selection",
177
+ keyEquivalent: "^q",
178
+ name: "Reformat Method Signature",
179
+ output: "replaceSelectedText",
180
+ scope: "meta.function.objc",
181
+ uuid: "122E10C1-DFA2-4A9E-9B17-8EBFA6E10CC7"}]