├── Snippets ├── Method.plist ├── assertEquals.plist ├── docSlot.plist ├── testMethod.plist ├── Object clone do.plist ├── UnitTest.plist ├── clone do.plist ├── newSlot.plist ├── Indented return.plist └── Indented Bracketed Line.plist ├── Preferences ├── Folding.tmPreferences ├── Indentation Rules.plist ├── Typing Pairs.plist └── Comments.tmPreferences ├── README.mdown ├── Commands └── Run Script.tmCommand ├── info.plist └── Syntaxes └── Io.plist /Snippets/Method.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | ${1:methodName} := method(${2:args,} 7 | $0 8 | ) 9 | name 10 | method 11 | scope 12 | source.io 13 | tabTrigger 14 | m 15 | uuid 16 | D55B718A-71A6-41A0-98ED-07B72442DDE8 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/assertEquals.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | assertEquals(${1:expected}, ${2:expr}) 7 | name 8 | assertEquals 9 | scope 10 | source.io 11 | tabTrigger 12 | ae 13 | uuid 14 | 57E40ECD-AC15-4AB8-89D4-C123CA0B164C 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/docSlot.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | docSlot("${1:slotName}", "${2:documentation}") 7 | name 8 | docSlot 9 | scope 10 | source.io 11 | tabTrigger 12 | ds 13 | uuid 14 | 7BEB3C8C-641B-4BEA-9F92-6594A8D448DD 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/testMethod.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | test${1:SomeFeature} := method( 7 | $0 8 | ) 9 | name 10 | testMethod 11 | scope 12 | source.io 13 | tabTrigger 14 | ts 15 | uuid 16 | 086D0C3A-130F-4C93-B1E5-1522DDAF58FA 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/Object clone do.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | ${1:name} := Object clone do( 7 | $0 8 | ) 9 | name 10 | Object clone do 11 | scope 12 | source.io 13 | tabTrigger 14 | ocdo 15 | uuid 16 | FEF230FE-43A6-423C-B9DF-D03E6066D1AC 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/UnitTest.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | ${1:Something}Test := ${2:UnitTest} clone do( 7 | $0 8 | ) 9 | name 10 | UnitTest 11 | scope 12 | source.io 13 | tabTrigger 14 | ut 15 | uuid 16 | 35D0E7C0-E396-4D8B-8361-89B88C3AFF0C 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/clone do.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | ${1:${2:newValue} := ${3:Object} }clone do( 7 | $0 8 | ) 9 | name 10 | clone do 11 | scope 12 | source.io 13 | tabTrigger 14 | cdo 15 | uuid 16 | E195E70E-E46F-4B42-B70E-3CE744AA920E 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/newSlot.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | newSlot("${1:slotName}", ${2:defaultValue}, "${3:docString}")$0 7 | name 8 | newSlot 9 | scope 10 | source.io 11 | tabTrigger 12 | ns 13 | uuid 14 | 08A134DC-B1D9-42D3-AF5F-3E1061AD8827 15 | 16 | 17 | -------------------------------------------------------------------------------- /Preferences/Folding.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Folding 7 | scope 8 | source.io 9 | settings 10 | 11 | foldingStartMarker 12 | (/\*\*|\([^\)]*$|if\() 13 | foldingStopMarker 14 | (\*\*/|^\s*\)) 15 | 16 | uuid 17 | 7EECF802-872F-4000-A7AA-0E86E76C2F5A 18 | 19 | 20 | -------------------------------------------------------------------------------- /Snippets/Indented return.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | 7 | $0 8 | 9 | keyEquivalent 10 | 11 | name 12 | Special: Return Inside Empty Parenthesis 13 | scope 14 | source.io meta.empty-parenthesis.io, source.io meta.comma-parenthesis.io 15 | uuid 16 | 0F687653-BF6D-4C2C-A75E-C9193E870BBC 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/Indented Bracketed Line.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | (${1:header,} 7 | ${2:body} 8 | )$0 9 | keyEquivalent 10 | @( 11 | name 12 | Indented Bracketed Line 13 | scope 14 | source.io 15 | tabTrigger 16 | ( 17 | uuid 18 | 6D6682F0-5C77-4581-B0C3-A732D5B0A93E 19 | 20 | 21 | -------------------------------------------------------------------------------- /Preferences/Indentation Rules.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Indentation Rules 7 | scope 8 | source.io 9 | settings 10 | 11 | decreaseIndentPattern 12 | \) 13 | indentNextLinePattern 14 | \( 15 | unIndentedLinePattern 16 | ^\s*(#.*)?\s*$ 17 | 18 | uuid 19 | 9D0E390E-145F-48F8-944A-E1349337DABF 20 | 21 | 22 | -------------------------------------------------------------------------------- /Preferences/Typing Pairs.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Typing Pairs 7 | scope 8 | source.io 9 | settings 10 | 11 | highlightPairs 12 | 13 | 14 | " 15 | " 16 | 17 | 18 | ( 19 | ) 20 | 21 | 22 | smartTypingPairs 23 | 24 | 25 | " 26 | " 27 | 28 | 29 | ( 30 | ) 31 | 32 | 33 | 34 | uuid 35 | 6131549E-7BD0-4AB3-AC12-4BD971BE95B0 36 | 37 | 38 | -------------------------------------------------------------------------------- /Preferences/Comments.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Comments 7 | scope 8 | source.io 9 | settings 10 | 11 | shellVariables 12 | 13 | 14 | name 15 | TM_COMMENT_START 16 | value 17 | # 18 | 19 | 20 | name 21 | TM_COMMENT_START_2 22 | value 23 | // 24 | 25 | 26 | name 27 | TM_COMMENT_START_3 28 | value 29 | /* 30 | 31 | 32 | name 33 | TM_COMMENT_END_3 34 | value 35 | */ 36 | 37 | 38 | 39 | uuid 40 | 2D353655-501C-4C5C-92D0-3C4AAE9CD3E6 41 | 42 | 43 | -------------------------------------------------------------------------------- /README.mdown: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | You can install this bundle in TextMate by opening the preferences and going to the bundles tab. After installation it will be automatically updated for you. 4 | 5 | # General 6 | 7 | * [Bundle Styleguide](http://kb.textmate.org/bundle_styleguide) — _before you make changes_ 8 | * [Commit Styleguide](http://kb.textmate.org/commit_styleguide) — _before you send a pull request_ 9 | * [Writing Bug Reports](http://kb.textmate.org/writing_bug_reports) — _before you report an issue_ 10 | 11 | # License 12 | 13 | If not otherwise specified (see below), files in this repository fall under the following license: 14 | 15 | Permission to copy, use, modify, sell and distribute this 16 | software is granted. This software is provided "as is" without 17 | express or implied warranty, and with no claim as to its 18 | suitability for any purpose. 19 | 20 | An exception is made for files in readable text which contain their own license information, or files where an accompanying file exists (in the same directory) with a “-license” suffix added to the base-name name of the original file, and an extension of txt, html, or similar. For example “tidy” is accompanied by “tidy-license.txt”. -------------------------------------------------------------------------------- /Commands/Run Script.tmCommand: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | command 8 | #!/usr/bin/env ruby18 9 | require ENV["TM_SUPPORT_PATH"] + "/lib/tm/executor" 10 | require ENV["TM_SUPPORT_PATH"] + "/lib/tm/save_current_document" 11 | 12 | TextMate.save_current_document 13 | TextMate::Executor.make_project_master_current_document 14 | 15 | TextMate::Executor.run(ENV["TM_IO"] || "io", ENV["TM_FILEPATH"], :version_args => ["2>&1", '<<< "System version; System exit;"']) 16 | 17 | input 18 | document 19 | inputFormat 20 | text 21 | keyEquivalent 22 | @r 23 | name 24 | Run Script 25 | outputCaret 26 | afterOutput 27 | outputFormat 28 | html 29 | outputLocation 30 | newWindow 31 | requiredCommands 32 | 33 | 34 | command 35 | io 36 | locations 37 | 38 | /opt/local/bin/io 39 | /usr/local/bin/io 40 | 41 | variable 42 | TM_IO 43 | 44 | 45 | scope 46 | source.io 47 | semanticClass 48 | process.run.script.io 49 | uuid 50 | F35C936A-92CD-4D36-925D-F4457A52BCEE 51 | version 52 | 2 53 | 54 | 55 | -------------------------------------------------------------------------------- /info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | contactEmailRot13 6 | evk.ebo@tznvy.pbz 7 | contactName 8 | Rob Rix 9 | description 10 | Support for the <a href="http://www.iolanguage.com/">Io</a> prototype-based programming language. 11 | mainMenu 12 | 13 | excludedItems 14 | 15 | 0F687653-BF6D-4C2C-A75E-C9193E870BBC 16 | 17 | items 18 | 19 | F35C936A-92CD-4D36-925D-F4457A52BCEE 20 | ------------------------------------ 21 | D55B718A-71A6-41A0-98ED-07B72442DDE8 22 | ------------------------------------ 23 | E195E70E-E46F-4B42-B70E-3CE744AA920E 24 | 7BEB3C8C-641B-4BEA-9F92-6594A8D448DD 25 | 6D6682F0-5C77-4581-B0C3-A732D5B0A93E 26 | 08A134DC-B1D9-42D3-AF5F-3E1061AD8827 27 | FEF230FE-43A6-423C-B9DF-D03E6066D1AC 28 | ------------------------------------ 29 | 57E40ECD-AC15-4AB8-89D4-C123CA0B164C 30 | 086D0C3A-130F-4C93-B1E5-1522DDAF58FA 31 | 35D0E7C0-E396-4D8B-8361-89B88C3AFF0C 32 | 33 | submenus 34 | 35 | 36 | name 37 | Io 38 | ordering 39 | 40 | 0F687653-BF6D-4C2C-A75E-C9193E870BBC 41 | 6D6682F0-5C77-4581-B0C3-A732D5B0A93E 42 | FEF230FE-43A6-423C-B9DF-D03E6066D1AC 43 | 57E40ECD-AC15-4AB8-89D4-C123CA0B164C 44 | E195E70E-E46F-4B42-B70E-3CE744AA920E 45 | 7BEB3C8C-641B-4BEA-9F92-6594A8D448DD 46 | D55B718A-71A6-41A0-98ED-07B72442DDE8 47 | 08A134DC-B1D9-42D3-AF5F-3E1061AD8827 48 | 086D0C3A-130F-4C93-B1E5-1522DDAF58FA 49 | 35D0E7C0-E396-4D8B-8361-89B88C3AFF0C 50 | BD798537-3548-47F3-A6AB-7FB95C45DB83 51 | 9D0E390E-145F-48F8-944A-E1349337DABF 52 | 6131549E-7BD0-4AB3-AC12-4BD971BE95B0 53 | 54 | uuid 55 | 527BB215-1332-4CC8-AC6B-68E692D1421C 56 | 57 | 58 | -------------------------------------------------------------------------------- /Syntaxes/Io.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fileTypes 6 | 7 | io 8 | 9 | keyEquivalent 10 | ^~I 11 | name 12 | Io 13 | patterns 14 | 15 | 16 | captures 17 | 18 | 1 19 | 20 | name 21 | meta.empty-parenthesis.io 22 | 23 | 24 | comment 25 | we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob 26 | match 27 | \((\)) 28 | 29 | 30 | captures 31 | 32 | 1 33 | 34 | name 35 | meta.comma-parenthesis.io 36 | 37 | 38 | comment 39 | We want to do the same for ,) -- Seckar; same as above -- Rob 40 | match 41 | \,(\)) 42 | 43 | 44 | match 45 | \b(if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\b 46 | name 47 | keyword.control.io 48 | 49 | 50 | begin 51 | /\* 52 | captures 53 | 54 | 0 55 | 56 | name 57 | punctuation.definition.comment.io 58 | 59 | 60 | end 61 | \*/ 62 | name 63 | comment.block.io 64 | 65 | 66 | begin 67 | (^[ \t]+)?(?=//) 68 | beginCaptures 69 | 70 | 1 71 | 72 | name 73 | punctuation.whitespace.comment.leading.io 74 | 75 | 76 | end 77 | (?!\G) 78 | patterns 79 | 80 | 81 | begin 82 | // 83 | beginCaptures 84 | 85 | 0 86 | 87 | name 88 | punctuation.definition.comment.io 89 | 90 | 91 | end 92 | \n 93 | name 94 | comment.line.double-slash.io 95 | 96 | 97 | 98 | 99 | begin 100 | (^[ \t]+)?(?=#) 101 | beginCaptures 102 | 103 | 1 104 | 105 | name 106 | punctuation.whitespace.comment.leading.io 107 | 108 | 109 | end 110 | (?!\G) 111 | patterns 112 | 113 | 114 | begin 115 | # 116 | beginCaptures 117 | 118 | 0 119 | 120 | name 121 | punctuation.definition.comment.io 122 | 123 | 124 | end 125 | \n 126 | name 127 | comment.line.number-sign.io 128 | 129 | 130 | 131 | 132 | comment 133 | I wonder if some of this isn't variable.other.language? --Allan; scoping this as variable.language to match Objective-C's handling of 'self', which is inconsistent with C++'s handling of 'this' but perhaps intentionally so -- Rob 134 | match 135 | \b(self|sender|target|proto|protos|parent)\b 136 | name 137 | variable.language.io 138 | 139 | 140 | match 141 | <=|>=|=|:=|\*|\||\|\||\+|-|/|&|&&|>|<|\?|@|@@|\b(and|or)\b 142 | name 143 | keyword.operator.io 144 | 145 | 146 | match 147 | \bGL[\w_]+\b 148 | name 149 | constant.other.io 150 | 151 | 152 | match 153 | \b([A-Z](\w+)?)\b 154 | name 155 | support.class.io 156 | 157 | 158 | match 159 | \b(clone|call|init|method|list|vector|block|(\w+(?=\s*\()))\b 160 | name 161 | support.function.io 162 | 163 | 164 | match 165 | \b(gl(u|ut)?[A-Z]\w+)\b 166 | name 167 | support.function.open-gl.io 168 | 169 | 170 | begin 171 | """ 172 | beginCaptures 173 | 174 | 0 175 | 176 | name 177 | punctuation.definition.string.begin.io 178 | 179 | 180 | end 181 | """ 182 | endCaptures 183 | 184 | 0 185 | 186 | name 187 | punctuation.definition.string.end.io 188 | 189 | 190 | name 191 | string.quoted.triple.io 192 | patterns 193 | 194 | 195 | match 196 | \\. 197 | name 198 | constant.character.escape.io 199 | 200 | 201 | 202 | 203 | begin 204 | " 205 | beginCaptures 206 | 207 | 0 208 | 209 | name 210 | punctuation.definition.string.begin.io 211 | 212 | 213 | end 214 | " 215 | endCaptures 216 | 217 | 0 218 | 219 | name 220 | punctuation.definition.string.end.io 221 | 222 | 223 | name 224 | string.quoted.double.io 225 | patterns 226 | 227 | 228 | match 229 | \\. 230 | name 231 | constant.character.escape.io 232 | 233 | 234 | 235 | 236 | match 237 | \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\b 238 | name 239 | constant.numeric.io 240 | 241 | 242 | match 243 | (Lobby)\b 244 | name 245 | variable.other.global.io 246 | 247 | 248 | match 249 | \b(TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\b 250 | name 251 | constant.language.io 252 | 253 | 254 | scopeName 255 | source.io 256 | uuid 257 | BD798537-3548-47F3-A6AB-7FB95C45DB83 258 | 259 | 260 | --------------------------------------------------------------------------------