├── Snippets ├── Disable.tmSnippet ├── Name.tmSnippet ├── Comment.tmSnippet ├── Include.tmSnippet ├── Content Name.tmSnippet ├── Patterns.tmSnippet ├── Captures.tmSnippet ├── End Captures.tmSnippet ├── Ruby 1_8 Shebang.tmSnippet ├── Begin Captures.tmSnippet ├── Repository.tmSnippet ├── Match.tmSnippet ├── Require 'Support:lib:…'.tmSnippet ├── Rule — Match (Inside Rule).tmSnippet ├── Rule — Begin : End (Inside Rule).tmSnippet ├── Rule (Begin : End).tmSnippet ├── Patterns (Repository).tmSnippet ├── Grammar - Single Quotes.tmSnippet ├── Commit Message: Requires «version».tmSnippet ├── Rule — Match (Repository).tmSnippet └── Rule (Repository).tmSnippet ├── Preferences ├── Folding - TextMate Plist.tmPreferences ├── Symbol List.tmPreferences ├── Symbol List (Repository Separator).tmPreferences ├── Symbol List (Repository items).tmPreferences └── Symbol List (Repository item scopes).tmPreferences ├── Commands ├── Copy Scope.tmCommand ├── Show scope.plist ├── TextMate Variable (ENV).tmCommand ├── Show TM_* Shell Variables.plist ├── Help: Scope Conventions.tmCommand ├── Optimize Regex Alternations.tmCommand ├── Deoptimize Regex Alternations.tmCommand ├── New Captures Rule.tmCommand ├── Scope Completion.tmCommand └── Show Scope (HTML).tmCommand ├── README.mdown ├── Support └── bin │ ├── validate_uuids.rb │ ├── sort_bundle.rb │ └── validate_bundle.rb ├── info.plist └── Syntaxes ├── Snippet.tmLanguage ├── TextMate Scopes.tmLanguage ├── TextMate Settings.tmLanguage └── Language Grammar.tmLanguage /Snippets/Disable.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | disabled = :true; 7 | name 8 | Disabled 9 | scope 10 | source.plist.textmate.grammar 11 | tabTrigger 12 | dis 13 | uuid 14 | 7534A315-9A3D-449B-9AD0-DE603A77C356 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/Name.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | name = '$1'; 7 | name 8 | Name 9 | scope 10 | source.plist.textmate.grammar 11 | tabTrigger 12 | nam 13 | uuid 14 | EF6B4C87-F1A9-4D06-8712-587857CC3D5E 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/Comment.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | comment = '$0'; 7 | name 8 | Comment 9 | scope 10 | source.plist.textmate.grammar 11 | tabTrigger 12 | com 13 | uuid 14 | 1CB08CB5-7CBE-4A5D-A69B-DC04244838C4 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/Include.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | { include = '$1'; }, 7 | name 8 | Rule — Include 9 | scope 10 | source.plist.textmate.grammar 11 | tabTrigger 12 | inc 13 | uuid 14 | D5BA7FE7-543F-47FC-BECD-750200B81762 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/Content Name.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | contentName = '$1'; 7 | name 8 | Content Name 9 | scope 10 | source.plist.textmate.grammar 11 | tabTrigger 12 | connam 13 | uuid 14 | D738436A-B700-4299-A7D7-A242BDDF3A67 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/Patterns.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | patterns = ( 7 | $0 8 | ); 9 | name 10 | Patterns 11 | scope 12 | source.plist.textmate.grammar 13 | tabTrigger 14 | pat 15 | uuid 16 | 4AB06A04-02CF-4E7B-9E7E-07747A68160C 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/Captures.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | captures = { 7 | 1 = { name = '$1'; }; 8 | }; 9 | name 10 | Captures 11 | scope 12 | source.plist.textmate.grammar 13 | tabTrigger 14 | cap 15 | uuid 16 | 8C3D6E62-E865-4655-9B20-E3B95F07F9B6 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/End Captures.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | endCaptures = { 7 | 1 = { name = '$1'; }; 8 | }; 9 | name 10 | End Captures 11 | scope 12 | source.plist.textmate.grammar 13 | tabTrigger 14 | endcap 15 | uuid 16 | 36B66AAB-42A5-4366-B7C1-790A749181D4 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/Ruby 1_8 Shebang.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | #!/usr/bin/env ruby18 -wKU 7 | 8 | name 9 | Ruby 1.8 Shebang 10 | scope 11 | L:(attr.bundle-editor.command dyn.caret.begin.document) 12 | tabTrigger 13 | rb 14 | uuid 15 | 80CAE306-2C3F-418E-9DAD-B21A244D4807 16 | 17 | 18 | -------------------------------------------------------------------------------- /Snippets/Begin Captures.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | beginCaptures = { 7 | 1 = { name = '$1'; }; 8 | }; 9 | name 10 | Begin Captures 11 | scope 12 | source.plist.textmate.grammar 13 | tabTrigger 14 | begcap 15 | uuid 16 | 3E5051E7-18CF-4BD4-89A5-045416831972 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/Repository.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | repository = { 7 | ${1:rule_name} = { 8 | $0 9 | }; 10 | }; 11 | name 12 | Repository 13 | scope 14 | source.plist.textmate.grammar 15 | tabTrigger 16 | rep 17 | uuid 18 | A9191F2E-8FAC-41B9-B729-9663E42452DD 19 | 20 | 21 | -------------------------------------------------------------------------------- /Snippets/Match.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | { name = '${1:name}'; 7 | match = '${2:pattern}'; 8 | }, 9 | name 10 | Rule — Match 11 | scope 12 | source.plist.textmate.grammar meta.array.patterns 13 | tabTrigger 14 | mat 15 | uuid 16 | D9B7683F-308C-4A42-92FB-6DFC06240A92 17 | 18 | 19 | -------------------------------------------------------------------------------- /Snippets/Require 'Support:lib:…'.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | require "#{ENV['${1|TM_SUPPORT_PATH,TM_BUNDLE_SUPPORT|}']}/lib/${2:escape.rb}" 7 | name 8 | Require Support File 9 | scope 10 | source.ruby 11 | tabTrigger 12 | sup 13 | uuid 14 | 526FEEF9-9C52-4165-B814-7DAB441084D5 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/Rule — Match (Inside Rule).tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | match = '${1:pattern}'; 7 | name 8 | Rule — Match (Inside Rule) 9 | scope 10 | source.plist.textmate.grammar meta.dictionary.rule 11 | tabTrigger 12 | mat 13 | uuid 14 | C145B244-D9A6-43C6-9011-B84D00F7FE96 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/Rule — Begin : End (Inside Rule).tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | begin = '$1'; 7 | end = '$2'; 8 | name 9 | Rule — Begin / End (Inside Rule) 10 | scope 11 | source.plist.textmate.grammar meta.dictionary.rule 12 | tabTrigger 13 | beg 14 | uuid 15 | 1473BF02-466B-4F5F-B694-81703E4B6E76 16 | 17 | 18 | -------------------------------------------------------------------------------- /Snippets/Rule (Begin : End).tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | { name = '${1:name}'; 7 | begin = '$2'; 8 | end = '$3'; 9 | }, 10 | name 11 | Rule — Begin / End 12 | scope 13 | source.plist.textmate.grammar meta.array.patterns 14 | tabTrigger 15 | beg 16 | uuid 17 | 0D8A14ED-0701-4AD8-8A9C-15AD1BA60D8D 18 | 19 | 20 | -------------------------------------------------------------------------------- /Snippets/Patterns (Repository).tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | ${1:rule_name} = { 7 | patterns = ( 8 | $0 9 | ); 10 | }; 11 | name 12 | Patterns (Repository) 13 | scope 14 | source.plist.textmate.grammar meta.dictionary.repository $ 15 | tabTrigger 16 | pat 17 | uuid 18 | D07ABF67-A3E1-4454-BAEE-FF5C349CB049 19 | 20 | 21 | -------------------------------------------------------------------------------- /Snippets/Grammar - Single Quotes.tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | '' 7 | keyEquivalent 8 | ' 9 | name 10 | Grammar - Single Quotes 11 | scope 12 | source.plist.textmate.grammar string.quoted.single, source.plist.textmate.grammar string.regexp.oniguruma.single 13 | uuid 14 | 012C6C9B-07CC-40B8-A10B-B95B253A94A1 15 | 16 | 17 | -------------------------------------------------------------------------------- /Snippets/Commit Message: Requires «version».tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | Requires TextMate `defaults read "$TM_APP_PATH/Contents/Info" CFBundleShortVersionString` 7 | name 8 | Commit Message: Requires «version» 9 | scope 10 | text.git-commit 11 | tabTrigger 12 | req 13 | uuid 14 | 4B73A2A2-D227-444F-B6B4-C2DEF4D0863E 15 | 16 | 17 | -------------------------------------------------------------------------------- /Preferences/Folding - TextMate Plist.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Folding 7 | scope 8 | source.plist.textmate 9 | settings 10 | 11 | foldingStartMarker 12 | ^\s*([a-zA-Z_-]+ = )?[{(](?!.*[)}][;,]?\s*$) 13 | foldingStopMarker 14 | ^\s*(\}|\)) 15 | 16 | uuid 17 | 5293C37D-4728-42F5-8219-B900CED6E358 18 | 19 | 20 | -------------------------------------------------------------------------------- /Snippets/Rule — Match (Repository).tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | ${1:rule_name} = { 7 | name = '${2:name}'; 8 | match = '${3:pattern}'; 9 | }; 10 | name 11 | Rule — Match (Repository) 12 | scope 13 | source.plist.textmate.grammar meta.dictionary.repository.plist $ 14 | tabTrigger 15 | mat 16 | uuid 17 | FD59E166-A9BD-40FD-821F-E8AFEA5175A0 18 | 19 | 20 | -------------------------------------------------------------------------------- /Commands/Copy Scope.tmCommand: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | command 8 | tr <<< "$TM_SCOPE" ' ' '\n'|pbcopy 9 | input 10 | none 11 | keyEquivalent 12 | ^@C 13 | name 14 | Copy Scope 15 | output 16 | discard 17 | uuid 18 | F9CD7A8F-9EE9-483B-86BE-12D576AFC036 19 | 20 | 21 | -------------------------------------------------------------------------------- /Snippets/Rule (Repository).tmSnippet: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | content 6 | ${1:rule_name} = { 7 | name = '${2:name}'; 8 | begin = '$3'; 9 | end = '$4'; 10 | }; 11 | name 12 | Rule — Begin / End (Repository) 13 | scope 14 | source.plist.textmate.grammar meta.dictionary.repository.plist $ 15 | tabTrigger 16 | beg 17 | uuid 18 | A611946B-D67F-4B16-ABC7-ECBBCC0F6331 19 | 20 | 21 | -------------------------------------------------------------------------------- /Preferences/Symbol List.tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Symbol List 7 | scope 8 | source.plist.textmate.grammar constant.other.scope - (meta.dictionary.repository|meta.value-pair.scopename) 9 | settings 10 | 11 | showInSymbolList 12 | 1 13 | symbolTransformation 14 | 15 | s/^punctuation.*$//; 16 | 17 | 18 | uuid 19 | 985E70CD-0539-4E00-B0B9-F38D9789B8F3 20 | 21 | 22 | -------------------------------------------------------------------------------- /Preferences/Symbol List (Repository Separator).tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Symbol List (Repository Separator) 7 | scope 8 | source.plist.textmate.grammar support.constant.repository 9 | settings 10 | 11 | showInSymbolList 12 | 1 13 | symbolTransformation 14 | 15 | s/^repository$/-/; # repository = separator 16 | 17 | 18 | uuid 19 | 1515233D-64A7-48B3-A032-895A2A2E9789 20 | 21 | 22 | -------------------------------------------------------------------------------- /Preferences/Symbol List (Repository items).tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Symbol List (Repository Items) 7 | scope 8 | source.plist.textmate.grammar meta.dictionary.repository entity.name.section.repository 9 | settings 10 | 11 | showInSymbolList 12 | 1 13 | symbolTransformation 14 | 15 | s/^/#/; # start with "#" 16 | 17 | 18 | uuid 19 | 6F3A4873-C006-471C-BC7E-7EF289C685B4 20 | 21 | 22 | -------------------------------------------------------------------------------- /Preferences/Symbol List (Repository item scopes).tmPreferences: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | name 6 | Symbol List (Repository Item Scopes) 7 | scope 8 | source.plist.textmate.grammar meta.value-pair.repository-item constant.other.scope - meta.dictionary.captures 9 | settings 10 | 11 | showInSymbolList 12 | 1 13 | symbolTransformation 14 | 15 | s/^(punctuation.*$)?/ /; 16 | 17 | 18 | uuid 19 | 46D63D96-FBDA-4E36-B088-018D6B672FFB 20 | 21 | 22 | -------------------------------------------------------------------------------- /Commands/Show scope.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | command 8 | tr <<< "$TM_SCOPE" ' ' '\n' 9 | if [[ -n "$TM_SCOPE_LEFT" && "$TM_SCOPE_LEFT" != "$TM_SCOPE" ]]; then 10 | echo $'\nLeft Scope:\n' 11 | tr <<< "$TM_SCOPE_LEFT" ' ' '\n' 12 | fi 13 | 14 | input 15 | none 16 | keyEquivalent 17 | ^@P 18 | name 19 | Show Scope 20 | output 21 | showAsTooltip 22 | uuid 23 | 48976460-B5A4-11D9-87C9-000D93589AF6 24 | 25 | 26 | -------------------------------------------------------------------------------- /Commands/TextMate Variable (ENV).tmCommand: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | command 6 | #!/usr/bin/env ruby18 -wKU 7 | 8 | keys = ENV.keys.select { |e| e =~ /^TM_/ } 9 | print "ENV['${1|#{keys.join(',')}|}']" 10 | 11 | input 12 | none 13 | name 14 | TextMate Variable (ENV) 15 | outputFormat 16 | snippet 17 | outputLocation 18 | atCaret 19 | scope 20 | source.ruby 21 | tabTrigger 22 | env 23 | uuid 24 | 19C1DA95-E682-4FE1-973F-00994065C520 25 | 26 | 27 | -------------------------------------------------------------------------------- /Commands/Show TM_* Shell Variables.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | beforeRunningScript 8 | nop 9 | captureFormatString 10 | (1?$2:<nop>) 11 | capturePattern 12 | (^TM_(.*)$)? 13 | command 14 | env|grep ^TM_|sort 15 | input 16 | none 17 | keyEquivalent 18 | ^@P 19 | name 20 | Show TextMate Variables 21 | output 22 | showAsTooltip 23 | standardInput 24 | selectedText 25 | standardOutput 26 | separateWindow 27 | uuid 28 | DA0A4E77-5F16-11D9-B9C3-000D93589AF6 29 | 30 | 31 | -------------------------------------------------------------------------------- /Commands/Help: Scope Conventions.tmCommand: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | command 8 | echo "<html><head><meta http-equiv=\"Refresh\" content=\"0; http://www.macromates.com/textmate/manual/language_grammars#naming_conventions\"></head><body></body></html>" 9 | input 10 | none 11 | keyEquivalent 12 | ^h 13 | name 14 | Help: Scope Conventions 15 | output 16 | showAsHTML 17 | scope 18 | source.plist.textmate.grammar string.quoted.single.scope, source.plist.textmate.grammar string.quoted.double.scope 19 | uuid 20 | 385A50A5-37DB-4B58-A6B0-1849D17A322F 21 | 22 | 23 | -------------------------------------------------------------------------------- /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”. -------------------------------------------------------------------------------- /Support/bin/validate_uuids.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby18 -wKU 2 | 3 | require "find" 4 | 5 | $: << '/Applications/TextMate.app/Contents/SharedSupport/Support/lib/' 6 | $: << '/Library/Application Support/TextMate/Support/lib/' 7 | $: << '~/Library/Application Support/TextMate/Support/lib/' 8 | require "osx/plist" 9 | 10 | ROOT_DIRS = if ARGV.empty? 11 | %w[Bundles Review Disabled\ Bundles].map do |rel| 12 | File.join(File.dirname(__FILE__), *%W[.. .. #{rel}]) 13 | end 14 | else 15 | ARGV 16 | end 17 | 18 | uuids = Hash.new { |ids, id| ids[id] = Array.new } 19 | 20 | puts "Searching bundles ..." if $DEBUG 21 | ROOT_DIRS.each do |root_dir| 22 | Find.find(root_dir) do |path| 23 | if File.file?(path) and 24 | File.extname(path) =~ /.*\.(tm[A-Z][a-zA-Z]+|plist)\Z/ 25 | begin 26 | plist = File.open(path) { |io| OSX::PropertyList.load(io) } 27 | if uuid = plist["uuid"] 28 | uuids[uuid] << path 29 | else 30 | warn "Could not find a UUID for #{path}." if $DEBUG 31 | end 32 | rescue 33 | warn "Skipping #{path} due to #{$!.message}." if $DEBUG 34 | end 35 | end 36 | end 37 | end 38 | 39 | duplicates = uuids.select { |_, paths| paths.size > 1 } 40 | if duplicates.empty? 41 | puts "No duplicates found." if $DEBUG 42 | else 43 | puts 44 | puts "UUID Duplicates:" 45 | puts 46 | duplicates.each do |uuid, paths| 47 | puts uuid, paths.map { |path| " #{path}" } 48 | puts 49 | end 50 | exit 1 51 | end 52 | -------------------------------------------------------------------------------- /Commands/Optimize Regex Alternations.tmCommand: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | command 8 | #!/usr/bin/env ruby18 9 | # 10 | # list_to_regexp.rb 11 | # Created by Allan Odgaard on 2005-11-28. 12 | # 13 | # Takes list of matches on successive lines and outputs 14 | # a compact regexp which will match any of the elements 15 | # in the list 16 | # 17 | 18 | def process_list (list) 19 | 20 | buckets = { } 21 | optional = false 22 | 23 | list.each do |str| 24 | if str.empty? then 25 | optional = true 26 | else 27 | ch = str.shift 28 | buckets[ch] = (buckets[ch] or []).push(str) 29 | end 30 | end 31 | 32 | unless buckets.empty? then 33 | ptrns = buckets.collect do |key, value| 34 | [key].pack('C') + process_list(value).to_s 35 | end 36 | 37 | if optional == true then 38 | "(" + ptrns.join("|") + ")?" 39 | elsif ptrns.length > 1 then 40 | "(" + ptrns.join("|") + ")" 41 | else 42 | ptrns 43 | end 44 | end 45 | 46 | end 47 | 48 | print process_list(STDIN.collect { |line| line.chomp.unpack('C*') }) 49 | 50 | input 51 | selection 52 | name 53 | Optimize Regex Alternations 54 | output 55 | replaceSelectedText 56 | uuid 57 | 442B31EC-07A9-45E4-92D1-B083EB088CDB 58 | 59 | 60 | -------------------------------------------------------------------------------- /Commands/Deoptimize Regex Alternations.tmCommand: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | bundleUUID 8 | 3CC1A984-EF93-4011-ADDC-FE2E10C6FB23 9 | command 10 | #!/usr/bin/env ruby18 11 | # 12 | # regexp_to_list.rb 13 | # Created by Hans-Jörg Bibiko on 2008-09-22. 14 | # 15 | # Read a optimized regexp from stdin and output a list of all matched keywords 16 | # 17 | 18 | def decompileRe (reStr) 19 | # handle foo(bar|boo|bou)? => foo|foobar|fooboo|foobou 20 | re = Regexp.new(/\b(\w+)\(([^(]+?)\)\?/) 21 | while m = reStr.match(re) do 22 | reStr.sub!(re, "#{m[1]}|#{m[2].split('|').map {|x| m[1] + x }.join('|')}") 23 | end 24 | # handle foo(bar|boo|bou) => foobar|fooboo|foobou recursively 25 | re = Regexp.new(/\b(\w+)\(([^(]+?)\)/) 26 | while m = reStr.match(re) do 27 | reStr.sub!(re, "#{m[2].split('|').map {|x| m[1] + x }.join('|')}") 28 | end 29 | # return sorted array and delete last () if there're 30 | return reStr.split('|').map {|x| x.gsub(/(\(|\))/,'')}.sort 31 | end 32 | 33 | 34 | decompileRe(STDIN.read.chomp).each {|r| puts r} 35 | fallbackInput 36 | none 37 | input 38 | selection 39 | name 40 | Deoptimize Regex Alternations 41 | output 42 | openAsNewDocument 43 | uuid 44 | 857CF8FA-C613-4D48-9739-58EE774D639E 45 | 46 | 47 | -------------------------------------------------------------------------------- /Support/bin/sort_bundle.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby18 -wKU 2 | 3 | $: << '/Applications/TextMate.app/Contents/SharedSupport/Support/lib/' 4 | $: << '/Library/Application Support/TextMate/Support/lib/' 5 | $: << '~/Library/Application Support/TextMate/Support/lib/' 6 | require 'escape' 7 | require 'osx/plist' 8 | 9 | BundleDir = Dir.pwd + '/' 10 | 11 | unless File.exist?(BundleDir + 'info.plist') 12 | puts 'info.plist not found run this script from a bundle directory' 13 | exit 14 | end 15 | 16 | def get_item_uid(item, extension) 17 | separator_file = BundleDir + item + '/separator.' + extension 18 | uid = false 19 | if File.exists?(separator_file) 20 | uid = OSX::PropertyList::load(File.read(separator_file))['uuid'] 21 | else 22 | uid = (0..5).map{(0..5).map{rand(15).to_s(16) }.to_s.upcase}.join('-') 23 | File.open(BundleDir + item + '/separator.' + extension, 'w') do |separator| 24 | separator << <<-HTML 25 | 26 | 27 | 28 | 29 | name 30 | #{item.center(25, '=')} 31 | uuid 32 | #{uid} 33 | 34 | 35 | HTML 36 | end 37 | end 38 | uid 39 | end 40 | 41 | order = [] 42 | # 'Templates' => 'tmTemplate', 43 | {'Preferences' => 'tmPreferences', 'Syntaxes' => 'tmLanguage', 'Snippets' => 'tmSnippet', 'Commands' => 'tmCommand', 'DragCommands' => 'tmDragCommand', 'Macros' => 'tmMacro'}.each do |(item, extension)| 44 | next unless File.exists?(BundleDir + item) 45 | puts item 46 | uuid = get_item_uid(item, extension) 47 | order.delete(uuid) 48 | order << uuid 49 | order += `grep -ho '[A-Z0-9]\\+-\\([A-Z0-9]\\+-\\?\\)\\{5,\\}' #{e_sh(BundleDir + item)}/*`.split("\n") 50 | end 51 | order.uniq! 52 | info = OSX::PropertyList::load(File.read(BundleDir + 'info.plist')) 53 | info['ordering'] = order 54 | File.open(BundleDir + 'info.plist', 'w') do |info_file| 55 | info_file << info.to_plist 56 | end 57 | `osascript -e 'tell app "TextMate" to reload bundles'` -------------------------------------------------------------------------------- /Commands/New Captures Rule.tmCommand: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | command 8 | #!/usr/bin/env ruby18 9 | 10 | scope = STDIN.read 11 | 12 | # If we are working on a selection, exit 13 | if ENV['TM_SELECTED_TEXT'] then 14 | if scope =~ /\A\d+\Z/ then 15 | print scope 16 | exit 17 | end 18 | print "\n" 19 | exit 20 | end 21 | 22 | snippet = "" 23 | rules = [] 24 | before_caret = 0 25 | 26 | type = scope.match(/((beginC|endC|c)aptures)/)[0] 27 | # Compute position of the caret. 28 | caretpos = ENV['TM_LINE_NUMBER'].to_i() - ENV['TM_INPUT_START_LINE'].to_i() + 1 29 | 30 | # Figure out how many rules come before the caret 31 | scope.sub(/( 32 | (.*\n){#{caretpos}} | # Match normally. 33 | (.*\n)+ | # Match for if the caret is on the last line. 34 | (.*) # Match for scope with no newline. 35 | )/x) { |match| 36 | match.gsub(/\d\s*=/) {|m| before_caret += 1 } 37 | } 38 | 39 | # Add each existing rule to the rules array and clean it up in the process. 40 | scope.gsub(/(\d+\s*=\s*\{\s*name\s*=.*?\};)/) { |match| 41 | rules << match.gsub(/(\d+)\s*=\s*\{\s*name\s*=\s*'((?:'(?=')|.)*?)'\s*\};/, "\1 = { name = '\2' };") 42 | } 43 | 44 | # Insert new rule, either in the middle or after other rules depending 45 | # on previously determined caret position. 46 | if rules.length >= before_caret 47 | rules.insert(before_caret, "${1:⁋} = { name = '$2'; };$0") 48 | else 49 | rules << "${1:⁋} = { name = '$2'; };$0" 50 | end 51 | 52 | # Add each rule to the output 53 | rules.each { |rule| 54 | snippet << "\t" + rule + "\n" 55 | } 56 | 57 | # Use the first number that hasn't been used yet as the default. 58 | 1.upto(rules.length) { |capnum| 59 | unless snippet =~ /\b#{capnum.to_s}\s*=/ then 60 | snippet.gsub!(/⁋/) { |match| capnum.to_s } 61 | break 62 | end 63 | } 64 | 65 | # Add wrapper {} 66 | if scope =~ /aptures\s*=[^\n]*\{/ then 67 | snippet = "#{type} = {\n#{snippet}};" 68 | else 69 | snippet = "#{type} =\n{#{snippet}};" 70 | end 71 | 72 | print snippet 73 | fallbackInput 74 | scope 75 | input 76 | selection 77 | keyEquivalent 78 |  79 | name 80 | New Captures Rule 81 | output 82 | insertAsSnippet 83 | scope 84 | source.plist.textmate.grammar meta.dictionary.captures 85 | uuid 86 | 02F6DE2C-3334-4DCE-9FBB-6F8906653E5C 87 | 88 | 89 | -------------------------------------------------------------------------------- /info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | contactEmailRot13 6 | gz-ohaqyrf@znpebzngrf.pbz 7 | contactName 8 | Allan Odgaard 9 | description 10 | This bundle has functionality related to developing bundles for TextMate. 11 | mainMenu 12 | 13 | excludedItems 14 | 15 | 012C6C9B-07CC-40B8-A10B-B95B253A94A1 16 | 1473BF02-466B-4F5F-B694-81703E4B6E76 17 | A611946B-D67F-4B16-ABC7-ECBBCC0F6331 18 | C145B244-D9A6-43C6-9011-B84D00F7FE96 19 | FD59E166-A9BD-40FD-821F-E8AFEA5175A0 20 | 02F6DE2C-3334-4DCE-9FBB-6F8906653E5C 21 | DF2093BA-EA37-4546-9ADA-C17A13CEBDA9 22 | D07ABF67-A3E1-4454-BAEE-FF5C349CB049 23 | 24 | items 25 | 26 | 2BCAD8AF-1533-43C8-983C-FEDDDE27EA8E 27 | E659010B-BC46-4AAB-95EE-DEDDEC1CD354 28 | ------------------------------------ 29 | 4B73A2A2-D227-444F-B6B4-C2DEF4D0863E 30 | ------------------------------------ 31 | DA0A4E77-5F16-11D9-B9C3-000D93589AF6 32 | 48976460-B5A4-11D9-87C9-000D93589AF6 33 | 99EEC281-C357-45A2-9F83-33B26D9A2977 34 | F9CD7A8F-9EE9-483B-86BE-12D576AFC036 35 | ------------------------------------ 36 | 442B31EC-07A9-45E4-92D1-B083EB088CDB 37 | 857CF8FA-C613-4D48-9739-58EE774D639E 38 | ------------------------------------ 39 | 385A50A5-37DB-4B58-A6B0-1849D17A322F 40 | 41 | submenus 42 | 43 | 2BCAD8AF-1533-43C8-983C-FEDDDE27EA8E 44 | 45 | items 46 | 47 | 80CAE306-2C3F-418E-9DAD-B21A244D4807 48 | 526FEEF9-9C52-4165-B814-7DAB441084D5 49 | 19C1DA95-E682-4FE1-973F-00994065C520 50 | 51 | name 52 | Ruby Snippets 53 | 54 | E659010B-BC46-4AAB-95EE-DEDDEC1CD354 55 | 56 | items 57 | 58 | 0D8A14ED-0701-4AD8-8A9C-15AD1BA60D8D 59 | D9B7683F-308C-4A42-92FB-6DFC06240A92 60 | D5BA7FE7-543F-47FC-BECD-750200B81762 61 | ------------------------------------ 62 | D738436A-B700-4299-A7D7-A242BDDF3A67 63 | 1CB08CB5-7CBE-4A5D-A69B-DC04244838C4 64 | 7534A315-9A3D-449B-9AD0-DE603A77C356 65 | EF6B4C87-F1A9-4D06-8712-587857CC3D5E 66 | ------------------------------------ 67 | 4AB06A04-02CF-4E7B-9E7E-07747A68160C 68 | A9191F2E-8FAC-41B9-B729-9663E42452DD 69 | ------------------------------------ 70 | 8C3D6E62-E865-4655-9B20-E3B95F07F9B6 71 | 3E5051E7-18CF-4BD4-89A5-045416831972 72 | 36B66AAB-42A5-4366-B7C1-790A749181D4 73 | 74 | name 75 | Language Grammar Snippets 76 | 77 | 78 | 79 | name 80 | Bundle Development 81 | ordering 82 | 83 | 442B31EC-07A9-45E4-92D1-B083EB088CDB 84 | 857CF8FA-C613-4D48-9739-58EE774D639E 85 | 275BF397-2458-4F2F-B0CE-5CDF68256B69 86 | 19C1DA95-E682-4FE1-973F-00994065C520 87 | 526FEEF9-9C52-4165-B814-7DAB441084D5 88 | 3E5051E7-18CF-4BD4-89A5-045416831972 89 | 8C3D6E62-E865-4655-9B20-E3B95F07F9B6 90 | 1CB08CB5-7CBE-4A5D-A69B-DC04244838C4 91 | D738436A-B700-4299-A7D7-A242BDDF3A67 92 | F9CD7A8F-9EE9-483B-86BE-12D576AFC036 93 | 7534A315-9A3D-449B-9AD0-DE603A77C356 94 | 36B66AAB-42A5-4366-B7C1-790A749181D4 95 | 012C6C9B-07CC-40B8-A10B-B95B253A94A1 96 | 385A50A5-37DB-4B58-A6B0-1849D17A322F 97 | 101D6FC2-6CBD-11D9-B329-000D93347A42 98 | EF6B4C87-F1A9-4D06-8712-587857CC3D5E 99 | 02F6DE2C-3334-4DCE-9FBB-6F8906653E5C 100 | 4AB06A04-02CF-4E7B-9E7E-07747A68160C 101 | D07ABF67-A3E1-4454-BAEE-FF5C349CB049 102 | A9191F2E-8FAC-41B9-B729-9663E42452DD 103 | 0D8A14ED-0701-4AD8-8A9C-15AD1BA60D8D 104 | 1473BF02-466B-4F5F-B694-81703E4B6E76 105 | A611946B-D67F-4B16-ABC7-ECBBCC0F6331 106 | D5BA7FE7-543F-47FC-BECD-750200B81762 107 | D9B7683F-308C-4A42-92FB-6DFC06240A92 108 | C145B244-D9A6-43C6-9011-B84D00F7FE96 109 | FD59E166-A9BD-40FD-821F-E8AFEA5175A0 110 | DF2093BA-EA37-4546-9ADA-C17A13CEBDA9 111 | 48976460-B5A4-11D9-87C9-000D93589AF6 112 | DA0A4E77-5F16-11D9-B9C3-000D93589AF6 113 | 985E70CD-0539-4E00-B0B9-F38D9789B8F3 114 | 46D63D96-FBDA-4E36-B088-018D6B672FFB 115 | 6F3A4873-C006-471C-BC7E-7EF289C685B4 116 | 1515233D-64A7-48B3-A032-895A2A2E9789 117 | 118 | uuid 119 | 679EFB46-5368-47E5-85BA-DEF72709A471 120 | 121 | 122 | -------------------------------------------------------------------------------- /Commands/Scope Completion.tmCommand: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | command 8 | #!/usr/bin/env ruby18 -wKU 9 | 10 | require "#{ENV['TM_SUPPORT_PATH']}/lib/current_word" 11 | require "#{ENV['TM_SUPPORT_PATH']}/lib/ui" 12 | require "#{ENV['TM_SUPPORT_PATH']}/lib/exit_codes" 13 | 14 | partial_scope = Word.current_word('a-zA-Z._#+-', :left) 15 | matches = [] 16 | 17 | # Only if we are in an empty include rule, otherwise use the main scope completion. 18 | if ENV['TM_SCOPE'] =~ /string\.quoted\.(single|double)\.include/ && partial_scope == "" 19 | options = [] 20 | options << { 'title' => "Selected Grammar ($base)", 'string' => "\\$base" } 21 | options << { 'title' => "This Grammar ($self)", 'string' => "\\$self" } 22 | options << { 'title' => "Repository Item", 'string' => "\#${0:repository_item}" } 23 | options << { 'separator' => 1 } 24 | options << { 'title' => "source", 'string' => "source." } 25 | options << { 'title' => "text", 'string' => "text." } 26 | res = TextMate::UI.menu(options) 27 | print res['string'] if res 28 | exit 204 29 | end 30 | 31 | if ENV['TM_SCOPE'] =~ /string\.quoted\.(single|double)\.scope\.root/ 32 | $scopes = "source.\ntext.html.\ntext.plain.\ntext.xml." 33 | else 34 | $scopes = DATA.read 35 | end 36 | 37 | $scopes.each_line do |line| 38 | matches << $1 if line =~ /(^#{Regexp.escape partial_scope}[-a-zA-Z._#+]*?\.)/ 39 | end 40 | 41 | matches.uniq! 42 | 43 | options = Array.new(matches) 44 | 45 | matches.collect! { |m| m.sub(/#{Regexp.escape partial_scope}(.*)/, '\1') } 46 | options.collect! { |m| m.sub(/^(.*)\.$/, '\1') } 47 | 48 | if matches.empty? 49 | print "" 50 | elsif matches.length == 1 51 | print matches.first 52 | elsif index = TextMate::UI.menu(options) 53 | print matches[index] 54 | end 55 | 56 | __END__ 57 | 58 | comment.block.documentation. 59 | comment.block.empty. 60 | comment.block.preprocessor. 61 | comment.line.apostrophe. 62 | comment.line.asterisk. 63 | comment.line.at-sign. 64 | comment.line.backtick. 65 | comment.line.double-backslash. 66 | comment.line.double-dash. 67 | comment.line.double-dash. 68 | comment.line.double-dot. 69 | comment.line.double-number-sign. 70 | comment.line.double-slash. 71 | comment.line.exclamation. 72 | comment.line.number-sign. 73 | comment.line.parentheses. 74 | comment.line.percent. 75 | comment.line.percentage. 76 | comment.line.semicolon. 77 | comment.line.slash. 78 | constant.character.entity. 79 | constant.character.escape. 80 | constant.language.boolean. 81 | constant.language.null. 82 | constant.numeric.base64. 83 | constant.numeric.float. 84 | constant.numeric.integer.binary. 85 | constant.numeric.integer.decimal. 86 | constant.numeric.integer.hexadecimal. 87 | constant.numeric.integer.long. 88 | constant.numeric.integer.octal. 89 | constant.other.placeholder. 90 | constant.other.reference. 91 | constant.other.symbol. 92 | entity.name.function. 93 | entity.name.section. 94 | entity.name.tag.block. 95 | entity.name.tag.form. 96 | entity.name.tag.inline. 97 | entity.name.tag.localname. 98 | entity.name.tag.meta. 99 | entity.name.tag.object. 100 | entity.name.type.class. 101 | entity.name.type.module. 102 | entity.other.attribute-name. 103 | entity.other.inherited-class. 104 | invalid.deprecated.obsolete. 105 | invalid.deprecated.trailing-whitespace. 106 | invalid.illegal.whitespace 107 | keyword.control.def. 108 | keyword.control.directive. 109 | keyword.control.exception. 110 | keyword.control.import. 111 | keyword.operator.arithmetic. 112 | keyword.operator.assignment. 113 | keyword.operator.comparison. 114 | keyword.operator.logical. 115 | keyword.other.directive. 116 | keyword.other.documentation. 117 | markup.bold. 118 | markup.deleted. 119 | markup.heading. 120 | markup.italic. 121 | markup.list.numbered. 122 | markup.list.unnumbered. 123 | markup.other. 124 | markup.quote. 125 | markup.raw.block. 126 | markup.raw.inline. 127 | markup.underline.link. 128 | meta.array. 129 | meta.block. 130 | meta.class. 131 | meta.definition. 132 | meta.directive. 133 | meta.element. 134 | meta.embedded.block. 135 | meta.embedded.expression. 136 | meta.embedded.line. 137 | meta.expression. 138 | meta.function. 139 | meta.group. 140 | meta.header. 141 | meta.link 142 | meta.module. 143 | meta.paragraph. 144 | meta.preprocessor. 145 | meta.property. 146 | meta.scope. 147 | meta.section 148 | meta.separator. 149 | meta.structure. 150 | meta.tag.block. 151 | meta.tag.form. 152 | meta.tag.inline. 153 | meta.tag.meta. 154 | meta.tag.object. 155 | meta.tag.preprocessor. 156 | meta.toc-list. 157 | punctuation.definition.arguments.begin. 158 | punctuation.definition.arguments.end. 159 | punctuation.definition.array.begin. 160 | punctuation.definition.array.end. 161 | punctuation.definition.comment. 162 | punctuation.definition.constant. 163 | punctuation.definition.entity. 164 | punctuation.definition.function. 165 | punctuation.definition.heading. 166 | punctuation.definition.keyword. 167 | punctuation.definition.parameters.begin. 168 | punctuation.definition.parameters.end. 169 | punctuation.definition.preprocessor. 170 | punctuation.definition.string.begin. 171 | punctuation.definition.string.end. 172 | punctuation.definition.tag. 173 | punctuation.definition.variable. 174 | punctuation.section.array. 175 | punctuation.section.class. 176 | punctuation.section.embedded.begin. 177 | punctuation.section.embedded.end. 178 | punctuation.section.function. 179 | punctuation.section.group. 180 | punctuation.section.scope. 181 | punctuation.separator.arguments. 182 | punctuation.separator.array. 183 | punctuation.separator.continuation. 184 | punctuation.separator.key-value. 185 | punctuation.separator.parameters. 186 | punctuation.terminator.expression. 187 | punctuation.terminator.function. 188 | punctuation.terminator.rule. 189 | punctuation.terminator.statement. 190 | punctuation.whitespace.comment.leading. 191 | punctuation.whitespace.comment.trailing. 192 | punctuation.whitespace.embedded.leading. 193 | punctuation.whitespace.embedded.trailing. 194 | source. 195 | storage.modifier.extends. 196 | storage.modifier.global. 197 | storage.modifier.implements. 198 | storage.type.class. 199 | storage.type.function. 200 | storage.type.method. 201 | storage.type.module. 202 | string.interpolated. 203 | string.other. 204 | string.quoted.double. 205 | string.quoted.other. 206 | string.quoted.single 207 | string.quoted.triple. 208 | string.regexp. 209 | string.unquoted.heredoc. 210 | support.class. 211 | support.constant. 212 | support.function. 213 | support.other. 214 | support.type. 215 | support.variable. 216 | text.html. 217 | text.plain. 218 | text.xml. 219 | variable.language. 220 | variable.other.predefined. 221 | variable.other.readwrite.global. 222 | variable.other.register. 223 | variable.parameter. 224 | 225 | fallbackInput 226 | scope 227 | input 228 | none 229 | inputFormat 230 | text 231 | keyEquivalent 232 |  233 | name 234 | Scope Completion 235 | outputCaret 236 | afterOutput 237 | outputFormat 238 | text 239 | outputLocation 240 | atCaret 241 | scope 242 | source.plist.textmate.grammar (string.quoted.single.scope.plist -punctuation.definition.string.begin, string.quoted.single.scope.root.plist -punctuation.definition.string.begin, string.quoted.single.include.plist -punctuation.definition.string.begin, string.quoted.double.scope.plist -punctuation.definition.string.begin, string.quoted.double.scope.root.plist -punctuation.definition.string.begin, string.quoted.double.include.plist -punctuation.definition.string.begin) 243 | uuid 244 | DF2093BA-EA37-4546-9ADA-C17A13CEBDA9 245 | version 246 | 2 247 | 248 | 249 | -------------------------------------------------------------------------------- /Commands/Show Scope (HTML).tmCommand: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | beforeRunningCommand 6 | nop 7 | bundleUUID 8 | 679EFB46-5368-47E5-85BA-DEF72709A471 9 | command 10 | #!/usr/bin/env ruby18 11 | 12 | require ENV['TM_TEXTMATE_BUNDLE_SUPPORT'] + '/lib/doctohtml' 13 | require ENV['TM_SUPPORT_PATH'] + '/lib/ui' 14 | 15 | module Textpow 16 | class ScoreManager 17 | POINT_DEPTH = 4 18 | NESTING_DEPTH = 40 19 | START_VALUE = 2 ** ( POINT_DEPTH * NESTING_DEPTH ) 20 | BASE = 2 ** POINT_DEPTH 21 | 22 | def initialize 23 | @scores = {} 24 | end 25 | 26 | def score search_scope, reference_scope 27 | max = 0 28 | search_scope.split( ',' ).each do |scope| 29 | arrays = scope.split(/\B-/) 30 | if arrays.size == 1 31 | max = [max, score_term( arrays[0], reference_scope )].max 32 | elsif arrays.size > 1 33 | excluded = false 34 | arrays[1..-1].each do |a| 35 | if score_term( arrays[1], reference_scope ) > 0 36 | excluded = true 37 | break 38 | end 39 | end 40 | max = [max, score_term( arrays[0], reference_scope )].max unless excluded 41 | else 42 | raise ParsingError, "Error in scope string: '#{search_scope}' #{arrays.size} is not a valid number of operands" if arrays.size < 1 43 | end 44 | end 45 | max 46 | end 47 | 48 | private 49 | 50 | def score_term search_scope, reference_scope 51 | unless @scores[reference_scope] && @scores[reference_scope][search_scope] 52 | @scores[reference_scope] ||= {} 53 | @scores[reference_scope][search_scope] = score_array( search_scope.split(' '), reference_scope.split( ' ' ) ) 54 | end 55 | @scores[reference_scope][search_scope] 56 | end 57 | 58 | def score_array search_array, reference_array 59 | pending = search_array 60 | current = reference_array.last 61 | reg = Regexp.new( "^#{Regexp.escape( pending.last )}" ) 62 | multiplier = START_VALUE 63 | result = 0 64 | while pending.size > 0 && current 65 | if reg =~ current 66 | point_score = (2**POINT_DEPTH) - current.count( '.' ) + Regexp.last_match[0].count( '.' ) 67 | result += point_score * multiplier 68 | pending.pop 69 | reg = Regexp.new( "^#{Regexp.escape( pending.last )}" ) if pending.size > 0 70 | end 71 | multiplier = multiplier / BASE 72 | reference_array.pop 73 | current = reference_array.last 74 | end 75 | result = 0 if pending.size > 0 76 | result 77 | end 78 | end 79 | end 80 | 81 | theme_plist = load_theme 82 | 83 | scorer = Textpow::ScoreManager.new 84 | 85 | scopes = ENV['TM_SCOPE'].split 86 | list = [] 87 | begin 88 | list.push(scopes.join(' ')) 89 | end while scopes.pop and not scopes.empty? 90 | 91 | body_bg = '#fff' 92 | body_fg = '#000' 93 | 94 | font_name = `"$TM_QUERY" 2>/dev/null --setting fontName`.chomp || 'Menlo-Regular' 95 | font_size = (`"$TM_QUERY" 2>/dev/null --setting fontSize`.chomp || 12).to_s 96 | font_size.sub!(/\.\d+$/, '') 97 | 98 | FONT_MAP.each do | font_re, font_alt | 99 | if (font_re.match(font_name)) 100 | font_name = font_alt 101 | break 102 | end 103 | end 104 | 105 | font_name = "'" + font_name + "'" if font_name.include?(' ') && 106 | !font_name.include?('"') 107 | 108 | contents = '' 109 | 110 | list.reverse.each do |scope| 111 | best_match = {:settings => nil, :score => 0} 112 | 113 | theme_plist['settings'].each do | setting | 114 | if (!setting['name'] and setting['settings']) 115 | body_bg = setting['settings']['background'] || '#ffffff' 116 | body_fg = setting['settings']['foreground'] || '#000000' 117 | body_bg = to_rgba(body_bg) if body_bg =~ /#.{8}/ 118 | body_fg = to_rgba(body_fg) if body_fg =~ /#.{8}/ 119 | next 120 | end 121 | next unless setting['name'] and setting['scope'] 122 | 123 | score = scorer.score(setting['scope'], scope) 124 | if score > best_match[:score] 125 | best_match[:settings] = setting 126 | best_match[:score] = score 127 | end 128 | end 129 | # p scope.split.pop 130 | # p best_match 131 | 132 | contents << '<div' 133 | if setting = best_match[:settings] 134 | contents << ' style="' 135 | if (color = setting['settings']['foreground']) 136 | color = to_rgba(color) if color =~ /#.{8}/ 137 | contents << "\tcolor: " + color + ";\n" 138 | end 139 | if (style = setting['settings']['fontStyle']) 140 | contents << "\tfont-style: italic;\n" if style =~ /\bitalic\b/i 141 | contents << "\ttext-decoration: underline;\n" if style =~ /\bunderline\b/i 142 | contents << "\tfont-weight: bold;\n" if style =~ /\bbold\b/i 143 | end 144 | if (color = setting['settings']['background']) 145 | color = to_rgba(color) if color =~ /#.{8}/ 146 | contents << "\tbackground-color: " + color + ";\n" 147 | end 148 | contents << '"' 149 | end 150 | contents << '>' + scope.split.pop + '</div>' 151 | end 152 | 153 | html = <<-HTML 154 | <style type="text/css" media="screen"> 155 | body { 156 | font-family: #{font_name}, monospace; 157 | font-size: #{font_size}px; 158 | background-color: #{body_bg}; 159 | color: #{body_fg}; 160 | border: 1px solid #{body_fg}; 161 | } 162 | </style> 163 | #{contents} 164 | HTML 165 | 166 | # html = <<-HTML 167 | # <style type="text/css" media="screen"> 168 | # body { 169 | # font-family: "DejaVu Sans Mono", monospace; 170 | # font-size: 12px; 171 | # } 172 | # span.sample { 173 | # float: right; 174 | # color: #F8F8F8; 175 | # background-color: #141414; 176 | # margin-left:5px; 177 | # padding: 0 2px 0 2px; 178 | # font-size: 11px; 179 | # } 180 | # </style> 181 | # <span class="sample" style="color: #FFFFFF;">sample text</span><span>source.ruby</span><br> 182 | # <span class="sample" style="color: #8F9D6A;">sample text</span><span>string.quoted.double.ruby</span><br> 183 | # <span class="sample" style="color: #DAEFA3;">sample text</span><span>source.ruby.embedded.source</span><br> 184 | # <span class="sample" style="color: #E9C062;">sample text</span><span>string.regexp.classic.ruby</span><br> 185 | # <span class="sample" style="color: #CF7D34;">sample text</span><span>constant.character.escape.ruby</span><br> 186 | # HTML 187 | 188 | # module TextMate 189 | # module UI 190 | # def self.show_tool_tip(content) 191 | # IO.popen('"$DIALOG" tooltip --format=html', 'w') do |proc| 192 | # proc << content 193 | # proc.close_write 194 | # end 195 | # end 196 | # end 197 | # end 198 | TextMate::UI.tool_tip(html, :format => 'html') 199 | input 200 | none 201 | inputFormat 202 | text 203 | keyEquivalent 204 | ^P 205 | name 206 | Show Scope (HTML) 207 | outputCaret 208 | afterOutput 209 | outputFormat 210 | text 211 | outputLocation 212 | toolTip 213 | require 214 | 215 | 216 | name 217 | TextMate 218 | uuid 219 | 5A9D4FC6-6CBE-11D9-A21B-000D93589AF6 220 | 221 | 222 | name 223 | Themes 224 | uuid 225 | A4380B27-F366-4C70-A542-B00D26ED997E 226 | 227 | 228 | uuid 229 | 99EEC281-C357-45A2-9F83-33B26D9A2977 230 | version 231 | 2 232 | 233 | 234 | -------------------------------------------------------------------------------- /Syntaxes/Snippet.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fileTypes 6 | 7 | name 8 | Snippet 9 | patterns 10 | 11 | 12 | match 13 | \\\$|\\`|\\\\ 14 | name 15 | constant.character.escape.tm-snippet 16 | 17 | 18 | include 19 | #interpolation 20 | 21 | 22 | include 23 | #variables 24 | 25 | 26 | include 27 | #transformations 28 | 29 | 30 | include 31 | #tab_stops 32 | 33 | 34 | repository 35 | 36 | interpolation 37 | 38 | begin 39 | ` 40 | beginCaptures 41 | 42 | 0 43 | 44 | name 45 | punctuation.definition.string.begin.tm-snippet 46 | 47 | 48 | end 49 | ` 50 | endCaptures 51 | 52 | 0 53 | 54 | name 55 | punctuation.definition.string.begin.tm-snippet 56 | 57 | 58 | name 59 | string.interpolated.bash.tm-snippet 60 | patterns 61 | 62 | 63 | match 64 | \\`|\\\\ 65 | name 66 | constant.character.escape.tm-snippet 67 | 68 | 69 | 70 | tab_stops 71 | 72 | comment 73 | FINISHED 74 | patterns 75 | 76 | 77 | captures 78 | 79 | 1 80 | 81 | name 82 | punctuation.definition.variable.begin.tm-snippet 83 | 84 | 3 85 | 86 | name 87 | punctuation.definition.variable.begin.tm-snippet 88 | 89 | 4 90 | 91 | name 92 | punctuation.definition.variable.end.tm-snippet 93 | 94 | 95 | comment 96 | $0 | ${0} 97 | match 98 | (\$)(0(?!=\d)|(\{)0(?!=\d)(\})) 99 | name 100 | variable.other.predefined.placeholder.endpoint.tm-snippet 101 | 102 | 103 | captures 104 | 105 | 1 106 | 107 | name 108 | punctuation.definition.variable.begin.tm-snippet 109 | 110 | 111 | match 112 | (\$)\d+ 113 | name 114 | variable.other.predefined.placeholder.tm-snippet 115 | 116 | 117 | captures 118 | 119 | 1 120 | 121 | name 122 | punctuation.definition.variable.begin.tm-snippet 123 | 124 | 2 125 | 126 | name 127 | punctuation.definition.variable.end.tm-snippet 128 | 129 | 130 | match 131 | (\$\{)\d+(\}) 132 | name 133 | variable.other.predefined.placeholder.tm-snippet 134 | 135 | 136 | begin 137 | (\$\{)\d+(:) 138 | beginCaptures 139 | 140 | 1 141 | 142 | name 143 | punctuation.definition.variable.begin.tm-snippet 144 | 145 | 2 146 | 147 | name 148 | punctuation.separator.default-value.tm-snippet 149 | 150 | 151 | end 152 | (\}) 153 | endCaptures 154 | 155 | 2 156 | 157 | name 158 | punctuation.definition.variable.end.tm-snippet 159 | 160 | 161 | name 162 | variable.other.predefined.placeholder.w-default.tm-snippet 163 | 164 | 165 | 166 | transformations 167 | 168 | begin 169 | (\$\{)\d+(?=/) 170 | beginCaptures 171 | 172 | 1 173 | 174 | name 175 | punctuation.definition.variable.tm-snippet 176 | 177 | 178 | end 179 | \} 180 | endCaptures 181 | 182 | 0 183 | 184 | name 185 | punctuation.definition.variable.tm-snippet 186 | 187 | 188 | name 189 | variable.other.predefined.placeholder.transform.tm-snippet 190 | patterns 191 | 192 | 193 | begin 194 | (?<=/) 195 | end 196 | (?=\}) 197 | patterns 198 | 199 | 200 | begin 201 | (?!/) 202 | end 203 | (?=/) 204 | name 205 | string.other.CHANGETHIS.tm-snippet 206 | patterns 207 | 208 | 209 | match 210 | (\$)\d+ 211 | name 212 | variable.other.predefined.register.tm-snippet 213 | 214 | 215 | match 216 | \\[ulULE] 217 | name 218 | constant.other.reference.tm-snippet 219 | 220 | 221 | comment 222 | ASK ABOUT \( HERE AND IN VARIABLES 223 | match 224 | \\[nt$\\] 225 | name 226 | constant.character.escape.tm-snippet 227 | 228 | 229 | begin 230 | \(\?\d+: 231 | end 232 | \) 233 | name 234 | meta.conditional-insertion.tm-snippet 235 | 236 | 237 | 238 | 239 | begin 240 | (/) 241 | beginCaptures 242 | 243 | 0 244 | 245 | name 246 | string.regexp.tm-snippet 247 | 248 | 1 249 | 250 | name 251 | punctuation.definition.string.end.tm-snippet 252 | 253 | 254 | end 255 | (?=\}) 256 | patterns 257 | 258 | 259 | comment 260 | ASK ALLAN ABOUT THIS, IS INCOMPLETE. 261 | match 262 | (?<=/)([imx]+-?[imx]+|-?[imx]+) 263 | 264 | 265 | match 266 | \S 267 | name 268 | invalid.illegal.character-not-allowed-here.tm-snippet 269 | 270 | 271 | 272 | 273 | 274 | 275 | begin 276 | (/) 277 | beginCaptures 278 | 279 | 0 280 | 281 | name 282 | string.regexp.tm-snippet 283 | 284 | 1 285 | 286 | name 287 | punctuation.definition.string.begin.tm-snippet 288 | 289 | 290 | end 291 | (/) 292 | endCaptures 293 | 294 | 0 295 | 296 | name 297 | string.regexp.tm-snippet 298 | 299 | 1 300 | 301 | name 302 | punctuation.definition.string.end.tm-snippet 303 | 304 | 305 | name 306 | string.regexp.tm-snippet 307 | patterns 308 | 309 | 310 | include 311 | source.regexp.oniguruma 312 | 313 | 314 | 315 | 316 | 317 | variables 318 | 319 | patterns 320 | 321 | 322 | captures 323 | 324 | 1 325 | 326 | name 327 | punctuation.definition.variable.begin.tm-snippet 328 | 329 | 330 | comment 331 | Take care of the built-in dynamic environment variables. 332 | match 333 | (\$)TM_(BUNDLE_SUPPORT|S(COPE|OFT_TABS|UPPORT_PATH|ELECTED_(TEXT|FILE(S)?))|CURRENT_(WORD|LINE)|TAB_SIZE|DIRECTORY|PROJECT_DIRECTORY|FILEPATH|LINE_(NUMBER|INDEX)) 334 | name 335 | variable.other.predefined.tm-snippet 336 | 337 | 338 | captures 339 | 340 | 1 341 | 342 | name 343 | punctuation.definition.variable.begin.tm-snippet 344 | 345 | 346 | comment 347 | User defined variables. 348 | match 349 | (\$)[A-Za-z_][A-Za-z0-9_]* 350 | name 351 | variable.other.readwrite.tm-snippet 352 | 353 | 354 | captures 355 | 356 | 1 357 | 358 | name 359 | punctuation.definition.variable.begin.tm-snippet 360 | 361 | 2 362 | 363 | name 364 | punctuation.definition.variable.end.tm-snippet 365 | 366 | 367 | comment 368 | User defined variables. 369 | match 370 | (\$\{)[A-Za-z_][A-Za-z0-9_]*(\}) 371 | name 372 | variable.other.readwrite.tm-snippet 373 | 374 | 375 | begin 376 | (\$\{)[A-Za-z_][A-Za-z0-9_]*(:) 377 | beginCaptures 378 | 379 | 1 380 | 381 | name 382 | punctuation.definition.variable.begin.tm-snippet 383 | 384 | 2 385 | 386 | name 387 | punctuation.separator.options.tm-snippet 388 | 389 | 390 | comment 391 | User defined variables. 392 | end 393 | \} 394 | endCaptures 395 | 396 | 1 397 | 398 | name 399 | punctuation.definition.variable.end.tm-snippet 400 | 401 | 402 | name 403 | variable.other.readwrite.tm-snippet 404 | 405 | 406 | begin 407 | (\$\{)[A-Za-z_][A-Za-z0-9_]*(?=/) 408 | beginCaptures 409 | 410 | 1 411 | 412 | name 413 | punctuation.definition.variable.begin.tm-snippet 414 | 415 | 416 | end 417 | } 418 | endCaptures 419 | 420 | 1 421 | 422 | name 423 | punctuation.definition.variable.end.tm-snippet 424 | 425 | 426 | name 427 | variable.other.readwrite.tm-snippet 428 | patterns 429 | 430 | 431 | begin 432 | (?<=/) 433 | end 434 | (?=\}) 435 | patterns 436 | 437 | 438 | begin 439 | (?!/) 440 | end 441 | (?=/) 442 | name 443 | string.other.CHANGETHIS.tm-snippet 444 | patterns 445 | 446 | 447 | match 448 | (\$)\d+ 449 | name 450 | variable.other.predefined.register.tm-snippet 451 | 452 | 453 | match 454 | \\[ulULE] 455 | name 456 | constant.other.reference.tm-snippet 457 | 458 | 459 | comment 460 | ASK ABOUT \( HERE AND IN VARIABLES 461 | match 462 | \\[nt$\\] 463 | name 464 | constant.character.escape.tm-snippet 465 | 466 | 467 | begin 468 | \(\?\d+: 469 | end 470 | \) 471 | name 472 | meta.conditional-insertion.tm-snippet 473 | 474 | 475 | 476 | 477 | begin 478 | (/) 479 | beginCaptures 480 | 481 | 0 482 | 483 | name 484 | string.regexp.tm-snippet 485 | 486 | 1 487 | 488 | name 489 | punctuation.definition.string.end.tm-snippet 490 | 491 | 492 | end 493 | (?=\}) 494 | patterns 495 | 496 | 497 | comment 498 | ASK ALLAN ABOUT THIS, IS INCOMPLETE. 499 | match 500 | (?<=/)([imx]+)?(-[imx]+)? 501 | 502 | 503 | match 504 | \S 505 | name 506 | invalid.illegal.character-not-allowed-here.tm-snippet 507 | 508 | 509 | 510 | 511 | 512 | 513 | begin 514 | (/) 515 | beginCaptures 516 | 517 | 0 518 | 519 | name 520 | string.regexp.tm-snippet 521 | 522 | 1 523 | 524 | name 525 | punctuation.definition.string.begin.tm-snippet 526 | 527 | 528 | end 529 | (/) 530 | endCaptures 531 | 532 | 0 533 | 534 | name 535 | string.regexp.tm-snippet 536 | 537 | 1 538 | 539 | name 540 | punctuation.definition.string.end.tm-snippet 541 | 542 | 543 | name 544 | string.regexp.tm-snippet 545 | patterns 546 | 547 | 548 | include 549 | source.regexp.oniguruma 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | scopeName 559 | text.tm-snippet 560 | uuid 561 | 95BE73A9-82E2-493A-B467-013B4B2ECAD2 562 | 563 | 564 | -------------------------------------------------------------------------------- /Syntaxes/TextMate Scopes.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fileTypes 6 | 7 | name 8 | TextMate Scopes 9 | patterns 10 | 11 | 12 | include 13 | #scope_language 14 | 15 | 16 | include 17 | #scope_root 18 | 19 | 20 | include 21 | #scope_attr 22 | 23 | 24 | include 25 | #scope_dyn 26 | 27 | 28 | repository 29 | 30 | scope 31 | 32 | patterns 33 | 34 | 35 | include 36 | #scope_language 37 | 38 | 39 | include 40 | #scope_root 41 | 42 | 43 | include 44 | #scope_attr 45 | 46 | 47 | include 48 | #scope_dyn 49 | 50 | 51 | 52 | scope_attr 53 | 54 | patterns 55 | 56 | 57 | captures 58 | 59 | 1 60 | 61 | patterns 62 | 63 | 64 | match 65 | \. 66 | name 67 | punctuation.separator.tm-scope 68 | 69 | 70 | 71 | 2 72 | 73 | name 74 | invalid.illegal.nonconforming-scope.tm-scope 75 | 76 | 77 | comment 78 | Attr 79 | match 80 | (?x) 81 | \G attr 82 | ( 83 | \. 84 | (?:file|os-version|project|rev-path|scm|untitled) 85 | (?: 86 | (?: 87 | (?<=\.file) \. (?:unknown-type|unknown-encoding) 88 | | (?<!\.file) 89 | ) 90 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 91 | )? 92 | )? 93 | (.*)$ 94 | 95 | name 96 | constant.other.scope.tm-scope 97 | 98 | 99 | 100 | scope_dyn 101 | 102 | patterns 103 | 104 | 105 | captures 106 | 107 | 1 108 | 109 | patterns 110 | 111 | 112 | match 113 | \. 114 | name 115 | punctuation.separator.tm-scope 116 | 117 | 118 | 119 | 2 120 | 121 | name 122 | invalid.illegal.nonconforming-scope.tm-scope 123 | 124 | 125 | comment 126 | Dyn 127 | match 128 | (?x) 129 | \G dyn 130 | ( 131 | \. 132 | (?:modifier|caret|misspelled|selection) 133 | (?: 134 | (?: 135 | (?<=\.modifier) \. (?:command|control|option|shift) 136 | | (?<!\.modifier) 137 | ) 138 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 139 | )? 140 | )? 141 | (.*)$ 142 | 143 | name 144 | constant.other.scope.tm-scope 145 | 146 | 147 | 148 | scope_language 149 | 150 | patterns 151 | 152 | 153 | captures 154 | 155 | 1 156 | 157 | patterns 158 | 159 | 160 | match 161 | \. 162 | name 163 | punctuation.separator.tm-scope 164 | 165 | 166 | 167 | 2 168 | 169 | name 170 | invalid.illegal.nonconforming-scope.tm-scope 171 | 172 | 173 | comment 174 | Comment 175 | match 176 | (?x) 177 | \G comment 178 | ( 179 | \. 180 | (?:line|block) 181 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 182 | )? 183 | (.*)$ 184 | 185 | name 186 | constant.other.scope.tm-scope 187 | 188 | 189 | captures 190 | 191 | 1 192 | 193 | patterns 194 | 195 | 196 | match 197 | \. 198 | name 199 | punctuation.separator.tm-scope 200 | 201 | 202 | 203 | 2 204 | 205 | name 206 | invalid.illegal.nonconforming-scope.tm-scope 207 | 208 | 209 | comment 210 | Constant 211 | match 212 | (?x) 213 | \G constant 214 | ( 215 | \. 216 | (?:numeric|character|escape|language|other) 217 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 218 | )? 219 | (.*)$ 220 | 221 | name 222 | constant.other.scope.tm-scope 223 | 224 | 225 | captures 226 | 227 | 1 228 | 229 | patterns 230 | 231 | 232 | match 233 | \. 234 | name 235 | punctuation.separator.tm-scope 236 | 237 | 238 | 239 | 2 240 | 241 | name 242 | invalid.illegal.nonconforming-scope.tm-scope 243 | 244 | 245 | comment 246 | Entity 247 | match 248 | (?x) 249 | \G entity 250 | ( 251 | \. 252 | (?:name|other) 253 | (?: 254 | (?: 255 | (?<=\.name) \. (?:function|type|tag|section) 256 | | (?<=\.other) \. (?:inherited-class|attribute-name) 257 | ) 258 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 259 | )? 260 | )? 261 | (.*)$ 262 | 263 | name 264 | constant.other.scope.tm-scope 265 | 266 | 267 | captures 268 | 269 | 1 270 | 271 | patterns 272 | 273 | 274 | match 275 | \. 276 | name 277 | punctuation.separator.tm-scope 278 | 279 | 280 | 281 | 2 282 | 283 | name 284 | invalid.illegal.nonconforming-scope.tm-scope 285 | 286 | 287 | comment 288 | Invalid 289 | match 290 | (?x) 291 | \G invalid 292 | ( 293 | \. 294 | (?:illegal|deprecated) 295 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 296 | )? 297 | (.*)$ 298 | 299 | name 300 | constant.other.scope.tm-scope 301 | 302 | 303 | captures 304 | 305 | 1 306 | 307 | patterns 308 | 309 | 310 | match 311 | \. 312 | name 313 | punctuation.separator.tm-scope 314 | 315 | 316 | 317 | 2 318 | 319 | name 320 | invalid.illegal.nonconforming-scope.tm-scope 321 | 322 | 323 | comment 324 | Keyword 325 | match 326 | (?x) 327 | \G keyword 328 | ( 329 | \. 330 | (?:control|operator|other) 331 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 332 | )? 333 | (.*)$ 334 | 335 | name 336 | constant.other.scope.tm-scope 337 | 338 | 339 | captures 340 | 341 | 1 342 | 343 | patterns 344 | 345 | 346 | match 347 | \. 348 | name 349 | punctuation.separator.tm-scope 350 | 351 | 352 | 353 | 2 354 | 355 | name 356 | invalid.illegal.nonconforming-scope.tm-scope 357 | 358 | 359 | comment 360 | Markup 361 | match 362 | (?x) 363 | \G markup 364 | ( 365 | \. 366 | (?:underline|bold|heading|italic|list|quote|raw|other) 367 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 368 | )? 369 | (.*)$ 370 | 371 | name 372 | constant.other.scope.tm-scope 373 | 374 | 375 | captures 376 | 377 | 1 378 | 379 | patterns 380 | 381 | 382 | match 383 | \. 384 | name 385 | punctuation.separator.tm-scope 386 | 387 | 388 | 389 | 2 390 | 391 | name 392 | invalid.illegal.nonconforming-scope.tm-scope 393 | 394 | 395 | comment 396 | Meta 397 | match 398 | (?x) 399 | \G meta 400 | ( 401 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 402 | )? 403 | (.*)$ 404 | 405 | name 406 | constant.other.scope.tm-scope 407 | 408 | 409 | captures 410 | 411 | 1 412 | 413 | patterns 414 | 415 | 416 | match 417 | \. 418 | name 419 | punctuation.separator.tm-scope 420 | 421 | 422 | 423 | 2 424 | 425 | name 426 | invalid.illegal.nonconforming-scope.tm-scope 427 | 428 | 429 | comment 430 | Punctuation 431 | match 432 | (?x) 433 | \G punctuation 434 | ( 435 | \. 436 | (?:definition|section|separator|terminator|whitespace) 437 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 438 | )? 439 | (.*)$ 440 | 441 | name 442 | constant.other.scope.tm-scope 443 | 444 | 445 | captures 446 | 447 | 1 448 | 449 | patterns 450 | 451 | 452 | match 453 | \. 454 | name 455 | punctuation.separator.tm-scope 456 | 457 | 458 | 459 | 2 460 | 461 | name 462 | invalid.illegal.nonconforming-scope.tm-scope 463 | 464 | 465 | comment 466 | Storage 467 | match 468 | (?x) 469 | \G storage 470 | ( 471 | \. 472 | (?:type|modifier) 473 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 474 | )? 475 | (.*)$ 476 | 477 | name 478 | constant.other.scope.tm-scope 479 | 480 | 481 | captures 482 | 483 | 1 484 | 485 | patterns 486 | 487 | 488 | match 489 | \. 490 | name 491 | punctuation.separator.tm-scope 492 | 493 | 494 | 495 | 2 496 | 497 | name 498 | invalid.illegal.nonconforming-scope.tm-scope 499 | 500 | 501 | comment 502 | String 503 | match 504 | (?x) 505 | \G string 506 | ( 507 | \. 508 | (?:quoted|unquoted|interpolated|regexp|other) 509 | (?: 510 | (?: 511 | (?<=\.quoted) \. (?:single|double|triple|other) 512 | | (?<!\.quoted) 513 | ) 514 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 515 | )? 516 | )? 517 | (.*)$ 518 | 519 | name 520 | constant.other.scope.tm-scope 521 | 522 | 523 | captures 524 | 525 | 1 526 | 527 | patterns 528 | 529 | 530 | match 531 | \. 532 | name 533 | punctuation.separator.tm-scope 534 | 535 | 536 | 537 | 2 538 | 539 | name 540 | invalid.illegal.nonconforming-scope.tm-scope 541 | 542 | 543 | comment 544 | Support 545 | match 546 | (?x) 547 | \G support 548 | ( 549 | \. 550 | (?:function|class|type|constant|variable|other) 551 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 552 | )? 553 | (.*)$ 554 | 555 | name 556 | constant.other.scope.tm-scope 557 | 558 | 559 | captures 560 | 561 | 1 562 | 563 | patterns 564 | 565 | 566 | match 567 | \. 568 | name 569 | punctuation.separator.tm-scope 570 | 571 | 572 | 573 | 2 574 | 575 | name 576 | invalid.illegal.nonconforming-scope.tm-scope 577 | 578 | 579 | comment 580 | Variable 581 | match 582 | (?x) 583 | \G variable 584 | ( 585 | \. 586 | (?:parameter|language|other) 587 | (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* 588 | )? 589 | (.*)$ 590 | 591 | name 592 | constant.other.scope.tm-scope 593 | 594 | 595 | 596 | scope_root 597 | 598 | patterns 599 | 600 | 601 | captures 602 | 603 | 1 604 | 605 | patterns 606 | 607 | 608 | match 609 | \. 610 | name 611 | punctuation.separator.tm-scope 612 | 613 | 614 | 615 | 2 616 | 617 | name 618 | invalid.illegal.nonconforming-scope.tm-scope 619 | 620 | 621 | comment 622 | Source 623 | match 624 | (?x) 625 | \G source 626 | ( (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* )? 627 | (.*)$ 628 | 629 | name 630 | constant.other.scope.tm-scope 631 | 632 | 633 | captures 634 | 635 | 1 636 | 637 | patterns 638 | 639 | 640 | match 641 | \. 642 | name 643 | punctuation.separator.tm-scope 644 | 645 | 646 | 647 | 2 648 | 649 | name 650 | invalid.illegal.nonconforming-scope.tm-scope 651 | 652 | 653 | comment 654 | Text 655 | match 656 | (?x) 657 | \G text 658 | ( (?:\.[^.\s,()&|\[\]:"'{}<>*?=^;#]+)* )? 659 | (.*)$ 660 | 661 | name 662 | constant.other.scope.tm-scope 663 | 664 | 665 | 666 | 667 | scopeName 668 | text.tm-scope 669 | uuid 670 | B02BCBF9-28E1-4193-A894-AB567D28924C 671 | 672 | 673 | -------------------------------------------------------------------------------- /Support/bin/validate_bundle.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby18 -w 2 | 3 | require "yaml" 4 | require "find" 5 | 6 | $: << '/Applications/TextMate.app/Contents/SharedSupport/Support/lib/' 7 | $: << '/Library/Application Support/TextMate/Support/lib/' 8 | $: << '~/Library/Application Support/TextMate/Support/lib/' 9 | require "osx/plist" 10 | 11 | $legal_scopes, allowed_globals = 12 | YAML.load(DATA).values_at(*%w[legal_scopes allowed_globals]) 13 | 14 | def visit_value(value, bundle_name = nil) 15 | case value 16 | when Array 17 | value.each { |v| visit_value v, bundle_name } 18 | when Hash 19 | value.each_pair do |name, v| 20 | if name == "name" || name == "contentName" 21 | unless $legal_scopes.any? { |scope| scope.size <= v.size && scope == v[0...(scope.size)] } 22 | print "#{bundle_name}: " unless bundle_name.nil? 23 | puts v 24 | end 25 | else 26 | visit_value v, bundle_name 27 | end 28 | end 29 | end 30 | end 31 | 32 | # parse options 33 | require "optparse" 34 | 35 | options = {:legal_scopes => true, :global_scopes => true, :white_list => true} 36 | 37 | ARGV.options do |opts| 38 | opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [OPTIONS] BUNDLES" 39 | 40 | opts.separator "" 41 | opts.separator "Specific Options:" 42 | 43 | opts.on( "-l", "--skip-legal-scopes", String, 44 | "Don't perform the check for legal scopes." ) do |opt| 45 | options[:legal_scopes] = false 46 | end 47 | opts.on( "-g", "--skip-global-scopes", String, 48 | "Don't perform the check for global scopes." ) do |opt| 49 | options[:global_scopes] = false 50 | end 51 | opts.on( "-w", "--no-white-list", String, 52 | "Don't use the global scope white-list." ) do |opt| 53 | options[:white_list] = false 54 | end 55 | 56 | opts.separator "Common Options:" 57 | 58 | opts.on( "-h", "--help", 59 | "Show this message." ) do 60 | puts opts 61 | exit 62 | end 63 | 64 | begin 65 | opts.parse! 66 | rescue 67 | puts opts 68 | exit 69 | end 70 | end 71 | 72 | ARGV.each do |bundle| 73 | 74 | old_dir = Dir.getwd 75 | Dir.chdir(bundle) 76 | 77 | # check for valid scope names in language grammars 78 | if options[:legal_scopes] 79 | Dir["Syntaxes/*.{tmLanguage,plist}"].each do |grammar| 80 | open(grammar) do |io| 81 | plist = OSX::PropertyList.load(io) 82 | bundle_name = ARGV.size == 1 ? nil : File.split(bundle).last 83 | visit_value plist['patterns'], bundle_name if plist['patterns'] 84 | visit_value plist['repository'], bundle_name if plist['repository'] 85 | end 86 | end 87 | end 88 | 89 | # check the scope assignment to automations and preferences 90 | if options[:global_scopes] 91 | %w[Snippets Macros Commands Preferences].each do |dir| 92 | Find.find(dir) do |path| 93 | if File.file?(path) and 94 | File.extname(path) =~ /.*\.(tm[A-Z][a-zA-Z]+|plist)\Z/ 95 | plist = File.open(path) { |io| OSX::PropertyList.load(io) } 96 | uuid = plist["uuid"] 97 | next if options[:white_list] and allowed_globals.include? uuid 98 | if plist["scope"].to_s.empty? 99 | puts "#{File.basename(bundle)}: #{plist["name"]} (#{uuid}) " + 100 | "has a global scope." 101 | end 102 | end 103 | end 104 | end 105 | end 106 | 107 | Dir.chdir(old_dir) 108 | 109 | end 110 | 111 | __END__ 112 | --- 113 | legal_scopes: 114 | - comment.block. 115 | - comment.line. 116 | - constant.character. 117 | - constant.language. 118 | - constant.numeric. 119 | - constant.other. 120 | - entity.name.type. 121 | - entity.name.function. 122 | - entity.name.section. 123 | - entity.name.tag. 124 | - entity.other.attribute-name. 125 | - entity.other.inherited-class. 126 | - invalid.deprecated. 127 | - invalid.illegal. 128 | - keyword.control. 129 | - keyword.operator. 130 | - keyword.other. 131 | - markup.bold. 132 | - markup.changed. 133 | - markup.deleted. 134 | - markup.heading. 135 | - markup.inserted. 136 | - markup.italic. 137 | - markup.list. 138 | - markup.other. 139 | - markup.quote. 140 | - markup.raw. 141 | - markup.underline. 142 | - meta. 143 | - punctuation.definition. 144 | - punctuation.section. 145 | - punctuation.separator. 146 | - punctuation.terminator. 147 | - punctuation.whitespace.comment. 148 | - punctuation.whitespace.embedded. 149 | - source. 150 | - storage.modifier. 151 | - storage.type. 152 | - string.interpolated. 153 | - string.other. 154 | - string.quoted.double. 155 | - string.quoted.other. 156 | - string.quoted.single. 157 | - string.quoted.triple. 158 | - string.regexp. 159 | - string.unquoted. 160 | - support.class. 161 | - support.constant. 162 | - support.function. 163 | - support.other. 164 | - support.type. 165 | - support.variable. 166 | - text. 167 | - variable.language. 168 | - variable.other. 169 | - variable.parameter. 170 | allowed_globals: 171 | # Blogging 172 | - 8DCBE1EB-A3CC-4559-872E-34A3643F0BC4 173 | - FA5DC73E-AAE0-4C69-86E1-87B9E0390FD0 174 | # Bundle Development 175 | - DA0A4E77-5F16-11D9-B9C3-000D93589AF6 176 | - 48976460-B5A4-11D9-87C9-000D93589AF6 177 | - F9CD7A8F-9EE9-483B-86BE-12D576AFC036 178 | # CVS 179 | - 1F22884A-6702-4FB6-B4E7-D49B2431BD4E 180 | - 20865252-80D2-4CA4-9834-391D09210C4F 181 | - 1FE7E10E-70B4-44D7-924D-879C54F19289 182 | - 473C6519-F164-4496-A699-F9DE2CAB56DD 183 | - 9EA691A5-A166-4D8F-955F-270490F02827 184 | - 00C541DE-9A5C-4C59-A075-E754BAEB25C2 185 | - 6416A49F-8B3E-47EE-81B4-F2F7F19C6B41 186 | - E29C9E3B-B7FB-4ED1-94C3-2F702CD090B5 187 | - 22FC4CAB-4664-4CFC-BC8E-C2294616E464 188 | - BE6728A5-AFC4-4D98-9EC7-C2E951483B71 189 | - 2C5DB599-04DC-40CC-BBE8-0A73620BC42A 190 | - 338A3670-DA8E-4036-87E0-DF2E212254C8 191 | - 76E34DE2-1DCB-47B8-BA2F-4F3341A3AB9C 192 | - ADCD4FCD-D39D-41B3-88D0-84C5BE115535 193 | # Darcs 194 | - F68A0A7A-75AF-4471-A9F8-3A618DD81306 195 | - CFAAD3D2-CD4F-4F16-AB41-770AF6E460EF 196 | - 5E76D8C8-DE61-11D9-823F-000A95A51A76 197 | - 1C9B5F32-759D-4B3E-BA91-A83897C48026 198 | - B2B2A814-DE60-11D9-823F-000A95A51A76 199 | - 242ECD6E-DE5D-11D9-823F-000A95A51A76 200 | - 627E8652-2B23-4E68-ADF9-103BA2B16074 201 | - 5CEA8FE0-E28A-11D9-9477-000A95A51A76 202 | - 81229AD0-DE5C-11D9-823F-000A95A51A76 203 | # Diff 204 | - 239E196A-7106-4DC9-8FAE-0A9CA7540AFA 205 | - 0979659D-126E-467F-AC07-599979A42D67 206 | - 6A811265-81DC-11D9-9AA2-000D9332809C 207 | - D04AFBD3-8110-11D9-8E5B-0011242E4184 208 | - 674E54F5-065E-4224-9626-673903B7C0E0 209 | - 54D1CEF2-10AB-407B-AAB2-6AEA06B297B1 210 | - 46842464-574C-477F-9DFB-BB38EA3C85BE 211 | - 4050A252-C604-4D0C-8545-E50B22E2715B 212 | # Doxygen 213 | - 068FA312-303F-42E0-9BC7-EA6CA4324A7C 214 | # Experimental Wiki 215 | - 011517D7-AA14-46B6-9141-51411F33E6E8 216 | # Experimental 217 | - C5EF3C38-DED6-4308-90C1-BE75B4430332 218 | - A4E0B6D9-F4A7-4A79-902E-C049102BF39A 219 | - 37FBE527-CE10-42F5-8974-12463404AD23 220 | - BB66B370-D68B-4AFA-A228-C28F34E2AED2 221 | - A1D725D0-E28F-491C-8776-C6FAF0A89DF7 222 | - AE00FFF1-C436-4826-808A-3AF6C2ABD18B 223 | - 7CC7E11B-02BE-4F8D-9E8F-396D2CB74A98 224 | - 381FFB1B-0CAE-40AC-A228-B575C6E1C1C4 225 | - BD115447-20FA-43E3-8694-E8B4280C296B 226 | - A7B73FB6-4C26-4607-8899-9595D7BF3EB1 227 | - 56B05535-1ACD-4E55-B9FC-3BC1FAA3DBE1 228 | - D15DAF9D-80EF-4636-885A-74F64808060A 229 | - 44AE6B57-2AD5-4D06-972B-EEFA6FC3F266 230 | - 99D9DBC0-E03E-46B9-9E73-13F58DCDB55B 231 | - 8FC2E9FA-A9CE-42CD-9910-4FC9A9248BF9 232 | - 0F1EF848-5333-4610-96FE-97C180B2653C 233 | - 5854EC0D-70A8-4A45-ABD6-5654B036F831 234 | - B98B3ADE-3EAE-4C7B-BBF4-46258CAD9E76 235 | # FileMerge 236 | - 9F8B60D0-0535-4B92-8A02-A5AF47BE5306 237 | - 9029E141-4526-4ED8-95B2-2A4E19BAD402 238 | - F0B1A94F-3FC5-47B8-8771-FFF4EF230156 239 | - 3FA49AEC-79AA-4E3A-BFDA-FD7E4EF8D0FE 240 | - BA930D7C-7B5E-4BFE-9293-6B8FAF962990 241 | # GTDAlt 242 | - 40ABCA1E-A154-47C7-8EBC-D22DC078D295 243 | # GetBundle 244 | - 667B3ED4-CA2B-402D-9445-904798AE1AA0 245 | - 8C7398D7-1BC2-4F4D-9BA9-AE1520D764AD 246 | - E11461A2-B186-4278-9CB9-95AAC8D9D7C0 247 | - FBA5B6EB-2516-4940-9C8B-70645917F8BB 248 | - 19B3B518-4B71-4AD6-BC0B-7B5477ABD2D9 249 | - A952F27C-2200-4C2C-ABC9-69BD36FF76DF 250 | # Git 251 | - 7F8D2058-E106-40DC-9FBE-F32A1202D158 252 | - 41F8764A-63DE-4965-9192-918E49E15907 253 | - 37CC38F5-AF4C-4915-B925-1DC810C25C8A 254 | - 46662F92-7739-42A7-B7CD-0527A0474BDC 255 | - CDEA521C-8963-414F-8F8E-F9B81EF79ADA 256 | - FF012371-E6C2-4D97-BCD2-9B6237C9BF5B 257 | - E56D4990-B615-4788-A46C-5D0CDE750D56 258 | - 55CCBE51-3C13-46D8-92D9-52EAD7A5D2D6 259 | - 9CAC009F-9536-4FB3-96E5-84813C4A71F8 260 | - 9EAEC1C1-9979-4DB8-9877-A619580412AA 261 | - CFB9BB9D-4F47-47DA-819B-58F0B29FA560 262 | - 1CCC4394-A243-4E78-A720-B2DA1BC37DC0 263 | - 8FD8CC00-0A38-4472-9C3A-F22AE289B3A9 264 | - 917D405B-0488-4FDE-966A-54E1F922FCBD 265 | - 20F5C491-F71C-4963-9C61-DF7294976550 266 | - 5E37F050-85A0-4CAE-91D1-DC50E2F65024 267 | - 3F84F9EB-027A-4200-B29B-C99EFA09F453 268 | - 6494E41A-04CE-4D30-BD9A-B50056A7C13F 269 | - CD02EAD0-E14F-4FC1-8B54-994814B08239 270 | - 246BC5D6-F4DC-458B-8966-C601B65AA1E9 271 | - 7CE2C842-EBC4-443C-8DDB-3B16AC593D9A 272 | - 556EF65D-C59B-4A15-BA4A-D5D87C2695A0 273 | - 491D8DB3-8CB2-4888-ACD8-C94FAB125B38 274 | - 508C7FCD-E5DD-4E60-88C3-A668C48273B7 275 | - C6CD5A2A-E1DA-4D94-B561-331A2366AAC8 276 | - E9180CC9-BA7D-4271-A0A4-0263D8A71F46 277 | - 6AA96188-1428-4E09-94D8-755107CFC48E 278 | - B3577B4D-A3F1-4CB4-94B0-7A87CA658664 279 | - 47EB2C81-B093-4627-9DE7-454A60C3A98C 280 | - 3F77F0FC-F476-4B83-92D1-77D854A9D64D 281 | - 794C7EF9-B0A5-4B27-90BD-000837237B85 282 | # HTML 283 | - 2ED44A32-C353-447F-BAE4-E3522DB6944D 284 | - 0658019F-3635-462E-AAC2-74E4FE508A9B 285 | # Hotkey 286 | - 18C33747-DEB1-4F36-B1E3-EF1D544C1D96 287 | - 2AD289D4-FBE2-40D2-B12D-3D498486B881 288 | - 8BEF616A-19A7-4AE2-AC59-B812BF701269 289 | - 5CFF88D2-658D-4E81-9FCA-45673D3E74DD 290 | - 768F3AD8-30D7-4AFD-8041-5F02E5EADD44 291 | - 52991D39-38F1-4A33-9C7D-5D39EB289889 292 | # Hyperlink Helper 293 | - CA3F1BC7-8F8A-464F-BC3A-322B437F9E8E 294 | # ImageBrowser 295 | - B0869DF4-B5E2-48A5-8550-5BABE67F6D25 296 | # iTerm 297 | - 02E5581D-BCC8-4479-A9A9-A5E7CEE8293E 298 | - BED3AE43-7F29-4F92-B2F1-3361B4ACC71A 299 | - E7E68111-54E4-4C01-8DBA-9D9FFD38FF2C 300 | # Mail 301 | - B0F37DAC-6E52-11D9-AA12-000D93589AF6 302 | - 44B4C1CE-DD85-485A-B860-E4DFCDD0A4FE 303 | - 9FEC1836-6E52-11D9-AA12-000D93589AF6 304 | - 3E70551A-26B8-44FD-9D3F-25954E4ECDE4 305 | - 19A73EFD-E8D2-44D1-A3ED-EF604BB290EF 306 | # Man Pages 307 | - 71AB34F4-755D-4F16-A45F-93CD88246ED7 308 | # Math 309 | - F1541E0F-77EB-11D9-B807-000D93589AF6 310 | - BA9536B4-5A7E-46D2-A268-E0ADAB9782BC 311 | - C688B837-D48A-4088-9374-F93E7B4CCD3C 312 | - A8369DD4-4424-4A64-B0B1-FB8BD7D8E02C 313 | - 93A395CC-77E8-11D9-B5A8-000D93589AF6 314 | - D1DFE75D-EAAD-4662-8F1F-F5556402054B 315 | - 93992270-EA57-4AE0-BF91-16C9110A41E1 316 | - 6E8B4CDA-07CD-4BFA-ABFE-5ABA14F35B8A 317 | - D6EEB6EA-77E9-11D9-B36F-000D93589AF6 318 | # Maven 319 | - 2FF6439B-3FB8-4502-825C-D1ED23F4D982 320 | - C72F43DD-60E7-4F7C-B63B-84ADC3E1B67A 321 | - 2D3E0685-1F92-47E8-AE17-07F7B15AEDD2 322 | - E7AF434A-F2F7-431B-B796-403C35E2EBDF 323 | - AFC4DAFC-92ED-467D-89F1-F4ECFD784C4F 324 | - 73AF2F5B-353A-40C7-A72F-50D4AF95450D 325 | - DBCA3485-7EAE-46DE-ADA7-1CB754F6A7A8 326 | - 9F2DDE9A-18C6-43B1-8F1C-A05776AF3663 327 | - 1BFA4873-D0F9-47A1-B4D4-22325F5FD4F3 328 | - 862B0BB5-7D5D-42FC-BF41-E0A773A6590F 329 | - E7EA03BE-2FE5-45E7-A0C6-64B0BBCBA738 330 | - D421D75D-DBDE-4993-9686-E4208DD4A87E 331 | - F1DA338C-FD12-4EFF-9BA6-67EFA3DCDFF3 332 | - A2EAF58E-7C18-4E5A-93B9-6C249696CAFD 333 | - A3443F7C-CBE3-4698-BE25-040AF1297E29 334 | - BDD18676-3D30-41CD-A556-548838A41F3E 335 | - B1E0991E-106F-452B-8AA5-17564847EDA6 336 | - 797B1987-A4CD-48D9-BE92-56351F22F6AB 337 | # Mercurial 338 | - 83F27190-D52F-414C-8AC8-7ED3ADAF2FC6 339 | - B797AE83-EABD-4BB7-AD20-0FB24F824343 340 | - ED977BA9-3604-4EC9-999B-39C588CD4801 341 | - 11743544-9E2A-49BF-BA5D-655EAD6445AA 342 | - 819B19AC-758D-42CB-903F-73A5EDD716BD 343 | - 59DD3EDA-43DB-4819-8C50-CCBBEED5B0F7 344 | - 0210BC81-D701-4836-A188-42D9A79F292B 345 | - 75575B16-87B9-40A3-9101-B027DD43D31F 346 | - 46E15B5C-A621-48E5-AD2B-A893532695A6 347 | - 25A113EB-AA3B-40F0-B30E-ED2C2F9866C0 348 | - DF26FEB2-2E2C-4764-B766-869113AF6E00 349 | - CFC80127-ED10-465E-9CCE-D9282FD7893D 350 | - 60838383-D23C-465B-9414-A1EC148F6D1D 351 | - C8F5F526-4ED5-4E75-A0D1-D9B5143B20EE 352 | - 296CC34F-72CA-4720-A77D-0452EEB3813C 353 | - D8C78EA6-68A7-4625-826A-C64E51EF0724 354 | - 7D88D67B-C562-41DB-B25B-0AA8EAF3DC36 355 | - F56EB32C-F574-4865-83BF-976D8A826FC1 356 | - A60EB1AE-66C8-4791-940B-6601635A7899 357 | - A6254651-3866-4F78-8774-10FA1C1D7A6B 358 | - 2593B8FB-279E-4BD1-8935-0D9B1699526F 359 | - 865D7DE7-A07B-47C1-AEDC-4A88317A0EB1 360 | - A6F3AB3E-FB21-4E93-B672-E41100E88E41 361 | # MoinMoin 362 | - 880EE1CB-04F8-4944-946B-281BCD0B71B0 363 | # Navigation 364 | - 05A4D219-B3B9-4B74-B513-1F1CAC8B4AE0 365 | - 49408034-6D83-41D7-B4CF-B7B9801B5982 366 | # Outlines 367 | - F60652D5-8316-11D9-8D63-000D9332809C 368 | - E45D5856-8305-11D9-8AD4-000D9332809C 369 | - 3AE7D1AD-8300-11D9-B216-000D9332809C 370 | - DC7A2CCA-8301-11D9-9E93-000D9332809C 371 | - DBF2B50A-8303-11D9-8C1E-000D9332809C 372 | - 4B6A441D-8307-11D9-A10F-000D9332809C 373 | - 4BBD1C32-8316-11D9-968E-000D9332809C 374 | # Perforce 375 | - BE2B6161-2E23-4C08-B438-409BB1E82DA8 376 | - E73FA01C-7625-11D9-B58C-000A95A89C98 377 | - 9982EC7A-7577-11D9-A32D-000A95A89C98 378 | - A1DCDF0B-628B-4590-87C0-A551DC1F5F3A 379 | - 092CED4D-9C4C-4ED7-BB6A-5C80D929D9FD 380 | - 1194ED50-336C-45F8-9E73-C777FB3FAF88 381 | - 3E208CDF-268C-4A23-902B-5628596E4BC8 382 | - 97E895A4-B5B9-11D9-80D4-000A95A89C98 383 | - 38C6DE3A-7664-11D9-B58C-000A95A89C98 384 | - 556314B2-B3BF-11D9-9B1F-000A95A89C98 385 | - D6F5F368-C476-4882-82EA-D11E22A445BF 386 | - AD9B4CB8-7577-11D9-A32D-000A95A89C98 387 | - 80BD96D6-C41C-45F3-8CAE-E6D88B9D7339 388 | # RegularExpressions 389 | - 7EB957A4-A531-11D9-917B-000D9332809C 390 | - 8FDBC987-A543-11D9-B374-000D9332809C 391 | # Remind 392 | - C958CCC3-109D-40E0-ADB5-DFAA1A9DE8AF 393 | # Ruby 394 | - EE5F1FB2-6C02-11D9-92BA-0011242E4184 395 | # SQL 396 | - C3045596-791D-11D9-9130-000A95766570 397 | - CDD74FE0-32E1-4604-BFC9-96173A557550 398 | # SVK 399 | - D79E0650-C374-11D9-8A81-000A95BCAFA8 400 | - C17472A0-C36B-11D9-954B-000A95BCAFA8 401 | - 8FCB4C8F-23CD-4D2E-A9F2-C4564DFFEB2A 402 | - 9BF6E13C-C31A-11D9-820C-000A95BCAFA8 403 | - 70BCF12B-C35D-11D9-AB2C-000A95BCAFA8 404 | - 5263FCE3-C32A-11D9-BFEF-000A95BCAFA8 405 | - 0987069A-C370-11D9-AAA6-000A95BCAFA8 406 | - C03C7374-C371-11D9-AAA6-000A95BCAFA8 407 | - B37F2E1A-C35F-11D9-AB2C-000A95BCAFA8 408 | - F41366B2-C373-11D9-8A81-000A95BCAFA8 409 | # ShellScript 410 | - 7C0F8C08-8860-4DBB-AB24-652B53E63E13 411 | - 54CDB56E-85EA-11D9-B369-000A95E13C98 412 | - 776163E4-730B-11D9-BCD0-000D93589AF6 413 | - 200ED3B8-A64B-11D9-B384-000D93382786 414 | # Source 415 | - 7DE18A58-37A7-4F6B-8059-4365DCF27E46 416 | - AD6BAC7C-A52E-11D9-8CF2-000D93589AF6 417 | - 9D896CE5-A52E-11D9-8CF2-000D93589AF6 418 | - A72CBA80-5F10-11D9-9B72-000D93589AF6 419 | - 73EAE95D-A09C-4FC2-B4E3-42505678B57E 420 | - 0526D870-BE98-4931-8DBF-FDD3D405BB1B 421 | - 3050DE46-2337-476A-B733-8063B61ECB63 422 | - FCBE2215-19CA-470A-8D92-BB0D00491D62 423 | - 83560C23-63E2-4920-8E26-7EAC5FE86B2F 424 | # Subversion 425 | - E115C756-C345-49A2-B35A-6B97109D360E 426 | - DB57A67F-FD5D-49A2-98E6-8BEAB1D4686D 427 | - 9AC77FC1-5C08-43D6-8ECF-7E42BA71949D 428 | - 05DF9B5B-AB88-4597-ACD3-DD1DCEDC0BE8 429 | - 175D3D76-74CE-11D9-813D-000A95A89C98 430 | - A1DEEFE4-7E3A-11D9-81A1-000A95A89C98 431 | - 01F140D9-749F-11D9-8199-000A95A89C98 432 | - BA4B9C28-6566-46E8-8482-9A52DCB5384D 433 | - 18D4CF4B-2363-412E-B396-6E33868B2EE4 434 | - B9F3EC5C-B299-11D9-9356-0011242E4184 435 | - 8C299FDF-E050-4AFE-A306-491DC4C4A11A 436 | - E8EE6110-2DBA-4FC1-807B-9B19B5DE6737 437 | - 40EF180F-B8AE-40F7-8237-40A53314B57C 438 | - 55048B05-38AA-4B6C-A83C-7F6190F53B6C 439 | - 56BE2092-806D-11D9-A0FB-0011242E4184 440 | - 0CE6FB29-8467-11D9-ABBA-0011242E4184 441 | - 32E15B26-B444-11D9-8D63-000A95A89C98 442 | - 37135380-74CE-11D9-813D-000A95A89C98 443 | - DF784C33-74D7-11D9-813D-000A95A89C98 444 | - 11D4D7C2-7665-11D9-B58C-000A95A89C98 445 | - C7802039-B3C4-11D9-8D63-000A95A89C98 446 | - 5F2BCB27-7A5B-11D9-A61B-000A95A89C98 447 | - 03E4CAA8-0F74-4394-8709-4EF0E22F908B 448 | - 37113D20-778A-11D9-B053-0011242E4184 449 | - CB149C8E-74CD-11D9-813D-000A95A89C98 450 | # TODO 451 | - 14C1643E-7D51-11D9-859D-000D93B6E43C 452 | - D2F7F545-5149-47B9-AC62-DBDC6ACAB9BB 453 | - 46C3E5A1-7E04-11D9-AE69-000D93B6E43C 454 | - 65C4098C-BB16-4CA1-9297-B312BCD0433F 455 | # Text 456 | - BA9A2B17-DA89-49A5-809B-AC7510C24625 457 | - C9CAF012-6E50-11D9-AA12-000D93589AF6 458 | - BC8B89E4-5F16-11D9-B9C3-000D93589AF6 459 | - 3D7504EE-B927-4D3D-A3CC-BFB189027EE7 460 | - F22BEB71-2DE3-4183-BB10-0199CC328169 461 | - FB8960DB-AA2E-11D9-8E27-000D93589AF6 462 | - AA202E76-8A0A-11D9-B85D-000D93589AF6 463 | - 0F8C1F78-6E4C-11D9-91AF-000D93589AF6 464 | - BEC25DC3-6E4B-11D9-91AF-000D93589AF6 465 | - D26BEEE3-7439-4B7E-AD9D-9A144CDC5873 466 | - 273853DF-6E4F-11D9-A18D-000D93589AF6 467 | - 3010E2A8-6E4F-11D9-A18D-000D93589AF6 468 | - 8085013F-8DEA-11D9-B421-000D93589AF6 469 | - D39DC176-BC8D-11D9-8946-000D93589AF6 470 | - C46A9DBC-0B06-49DF-838B-491B529ECF22 471 | - DA5AD0D9-F7C0-4010-9FDC-FF01B0434F9A 472 | - 4B22577B-BC8E-11D9-8946-000D93589AF6 473 | - 8109F2C2-FF63-46F7-83F3-D2318290FC11 474 | - 965DF29E-4EBD-457A-9A61-56D920C35F72 475 | - 7C9736B2-B851-11D9-B05D-00039369B986 476 | - 3AA8A593-6E4C-11D9-91AF-000D93589AF6 477 | - 3E8C2307-8175-4A58-BE07-785713D5837A 478 | # TextMate 479 | - 970BA294-B667-11D9-8D53-00039369B986 480 | - E5142394-B07A-11D9-8EC4-000D93589AF6 481 | - 5F225755-5840-44CF-BC26-2D484DE833A0 482 | - 6E779E48-F146-49BF-B60C-EFDFD1380772 483 | - 61F92184-1A50-4310-9F75-C9CD2C8819FA 484 | - ADFED53B-16EC-4956-A6A7-3EA2B8140F86 485 | - 4981F52A-F663-45FC-AE25-EE211E88BA05 486 | - 950B3108-E2E3-414E-9C4C-EE068F59A895 487 | - 7AE6F783-F162-4063-850D-1441441849D8 488 | - ED204720-38FC-427C-B91E-D6AE866DAE3A 489 | # Transmit 490 | - C958B58A-D4D4-4055-89DF-22BCA3B8A9CA 491 | - C4006FCA-85FF-4476-BDA8-34EF355FD0E4 492 | - 91FC4F89-ADA9-4435-B159-9BA348FDE590 493 | - BF39FA53-3EFD-4CA8-9789-BA606C7883B9 494 | # Widget Creator 495 | - A0F5745D-6DC1-4D2B-B638-8A38AB18EE68 496 | - 907BF622-2B0E-43C7-85F6-369A67226CA4 497 | - 61B9EE59-3C49-45B8-94DE-7C0C8BCB965C 498 | # Xcode 499 | - 40D3C674-40A1-42A1-847A-FBEAE6E83CCC 500 | - 779DEA3C-D310-4B66-9531-DF9007434878 501 | - 8104FD3A-DD58-45CA-8FC8-F64680261F13 502 | - 73E356A1-87CF-4B8E-A4B5-B14F29683F12 503 | - F1FD7DF4-975A-4832-8A52-873AA0D32C44 504 | - 775EC3D9-4799-4454-85E5-5112EFCC2A15 505 | - 31F1A06C-0990-4BD7-8E63-D65E7BCD485D 506 | - 392068ED-4C79-42D8-9DE8-53867928B3B0 507 | - 9656317E-73EB-11D9-9848-000D93589AF6 508 | - B0254A99-7750-4A06-937A-9A453ECE3A6C 509 | - E435839A-880B-4E5F-9078-71BC595F2EA0 510 | - BA7499F1-F44C-43BC-9D81-AA1E889B35F7 511 | -------------------------------------------------------------------------------- /Syntaxes/TextMate Settings.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fileTypes 6 | 7 | name 8 | TextMate Settings 9 | patterns 10 | 11 | 12 | begin 13 | (?=\{) 14 | end 15 | (?=not)possible 16 | patterns 17 | 18 | 19 | include 20 | #dictionary_root 21 | 22 | 23 | include 24 | #stray 25 | 26 | 27 | 28 | 29 | include 30 | #stray 31 | 32 | 33 | repository 34 | 35 | array 36 | 37 | begin 38 | \G\( 39 | beginCaptures 40 | 41 | 0 42 | 43 | name 44 | punctuation.definition.array.begin.plist 45 | 46 | 47 | end 48 | \) 49 | endCaptures 50 | 51 | 0 52 | 53 | name 54 | punctuation.definition.array.end.plist 55 | 56 | 57 | name 58 | meta.scope.array.plist 59 | patterns 60 | 61 | 62 | include 63 | #array_item 64 | 65 | 66 | include 67 | #stray 68 | 69 | 70 | 71 | array_item 72 | 73 | begin 74 | (?=<|\(|\{|"|'|[-a-zA-Z0-9_.]) 75 | end 76 | ,|(?=\)) 77 | endCaptures 78 | 79 | 0 80 | 81 | name 82 | punctuation.separator.array.plist 83 | 84 | 85 | name 86 | meta.scope.array-item.plist 87 | patterns 88 | 89 | 90 | include 91 | #dictionary 92 | 93 | 94 | include 95 | #array 96 | 97 | 98 | include 99 | #string 100 | 101 | 102 | include 103 | #stray 104 | 105 | 106 | 107 | dictionary 108 | 109 | begin 110 | \G\{ 111 | beginCaptures 112 | 113 | 0 114 | 115 | name 116 | punctuation.definition.dictionary.begin.plist 117 | 118 | 119 | end 120 | \} 121 | endCaptures 122 | 123 | 0 124 | 125 | name 126 | punctuation.definition.dictionary.end.plist 127 | 128 | 129 | name 130 | meta.scope.dictionary.plist 131 | patterns 132 | 133 | 134 | include 135 | #dictionary_item 136 | 137 | 138 | include 139 | #stray 140 | 141 | 142 | 143 | dictionary_item 144 | 145 | begin 146 | (?>((")((?:[^"\\]|\\.)*)("))|((')((?:[^'\\]|\\.)*)('))|([-a-zA-Z0-9_.]+)) 147 | beginCaptures 148 | 149 | 1 150 | 151 | name 152 | string.quoted.double.plist 153 | 154 | 2 155 | 156 | name 157 | punctuation.definition.string.begin.plist 158 | 159 | 3 160 | 161 | name 162 | constant.other.key.plist 163 | 164 | 4 165 | 166 | name 167 | punctuation.definition.string.end.plist 168 | 169 | 5 170 | 171 | name 172 | string.quoted.single.plist 173 | 174 | 6 175 | 176 | name 177 | punctuation.definition.string.begin.plist 178 | 179 | 7 180 | 181 | name 182 | constant.other.key.plist 183 | 184 | 8 185 | 186 | name 187 | punctuation.definition.string.end.plist 188 | 189 | 9 190 | 191 | name 192 | constant.other.key.plist 193 | 194 | 195 | end 196 | ;|(?=\}) 197 | endCaptures 198 | 199 | 0 200 | 201 | name 202 | punctuation.separator.dictionary.plist 203 | 204 | 205 | name 206 | meta.scope.dictionary-item.${3/[[\s\x20-\x7F]&&[:^alnum:]]//g}${7/[[\s\x20-\x7F]&&[:^alnum:]]//g}${9/[[\s\x20-\x7F]&&[:^alnum:]]//g}.plist 207 | patterns 208 | 209 | 210 | include 211 | #dictionary_item_contents 212 | 213 | 214 | 215 | dictionary_item_contents 216 | 217 | patterns 218 | 219 | 220 | begin 221 | = 222 | end 223 | (?=;|\}) 224 | patterns 225 | 226 | 227 | begin 228 | (?=<|\(|\{|"|'|[-a-zA-Z0-9_.]) 229 | end 230 | (?=;|\}) 231 | patterns 232 | 233 | 234 | include 235 | #dictionary 236 | 237 | 238 | include 239 | #array 240 | 241 | 242 | include 243 | #string 244 | 245 | 246 | include 247 | #stray 248 | 249 | 250 | 251 | 252 | include 253 | #stray_alpha 254 | 255 | 256 | 257 | 258 | include 259 | #stray 260 | 261 | 262 | 263 | dictionary_root 264 | 265 | begin 266 | \G\{ 267 | beginCaptures 268 | 269 | 0 270 | 271 | name 272 | punctuation.definition.dictionary.begin.plist 273 | 274 | 275 | end 276 | \} 277 | endCaptures 278 | 279 | 0 280 | 281 | name 282 | punctuation.definition.dictionary.end.plist 283 | 284 | 285 | name 286 | meta.scope.dictionary.plist 287 | patterns 288 | 289 | 290 | begin 291 | comment 292 | beginCaptures 293 | 294 | 0 295 | 296 | name 297 | constant.other.key.plist 298 | 299 | 300 | end 301 | ;|(?=\}) 302 | endCaptures 303 | 304 | 0 305 | 306 | name 307 | punctuation.separator.dictionary.plist 308 | 309 | 310 | name 311 | meta.scope.dictionary-item.$0.plist 312 | patterns 313 | 314 | 315 | begin 316 | = 317 | end 318 | (?=;|\}) 319 | patterns 320 | 321 | 322 | begin 323 | (?="|') 324 | end 325 | (?=;|\}) 326 | patterns 327 | 328 | 329 | begin 330 | \G' 331 | beginCaptures 332 | 333 | 0 334 | 335 | name 336 | punctuation.definition.comment.begin.plist 337 | 338 | 339 | end 340 | '(?!') 341 | endCaptures 342 | 343 | 0 344 | 345 | name 346 | punctuation.definition.comment.end.plist 347 | 348 | 349 | name 350 | comment.block.plist 351 | patterns 352 | 353 | 354 | match 355 | '' 356 | name 357 | constant.character.escape.plist 358 | 359 | 360 | 361 | 362 | begin 363 | \G" 364 | beginCaptures 365 | 366 | 0 367 | 368 | name 369 | punctuation.definition.comment.begin.plist 370 | 371 | 372 | end 373 | " 374 | endCaptures 375 | 376 | 0 377 | 378 | name 379 | punctuation.definition.comment.end.plist 380 | 381 | 382 | name 383 | comment.block.plist 384 | patterns 385 | 386 | 387 | match 388 | \\("|\\) 389 | name 390 | constant.character.escape.plist 391 | 392 | 393 | 394 | 395 | include 396 | #stray 397 | 398 | 399 | 400 | 401 | include 402 | #stray 403 | 404 | 405 | 406 | 407 | include 408 | #stray 409 | 410 | 411 | 412 | 413 | begin 414 | completionCommand|characterClass|background|foreground|caret|invisibles|selection|fontStyle|fontName|indentOnPaste|wordCharacters 415 | beginCaptures 416 | 417 | 0 418 | 419 | name 420 | constant.other.key.plist 421 | 422 | 423 | end 424 | ;|(?=\}) 425 | endCaptures 426 | 427 | 0 428 | 429 | name 430 | punctuation.separator.dictionary.plist 431 | 432 | 433 | name 434 | meta.scope.dictionary-item.$0.plist 435 | patterns 436 | 437 | 438 | begin 439 | = 440 | end 441 | (?=;|\}) 442 | patterns 443 | 444 | 445 | begin 446 | (?="|'|[-a-zA-Z0-9_.]) 447 | end 448 | (?=;|\}) 449 | patterns 450 | 451 | 452 | include 453 | #string 454 | 455 | 456 | include 457 | #stray_alpha 458 | 459 | 460 | 461 | 462 | include 463 | #stray_alpha 464 | 465 | 466 | 467 | 468 | include 469 | #stray 470 | 471 | 472 | 473 | 474 | begin 475 | indentedSoftWrap 476 | beginCaptures 477 | 478 | 0 479 | 480 | name 481 | constant.other.key.plist 482 | 483 | 484 | end 485 | ;|(?=\}) 486 | endCaptures 487 | 488 | 0 489 | 490 | name 491 | punctuation.separator.dictionary.plist 492 | 493 | 494 | name 495 | meta.scope.dictionary-item.$0.plist 496 | patterns 497 | 498 | 499 | begin 500 | = 501 | end 502 | (?=;|\}) 503 | patterns 504 | 505 | 506 | begin 507 | (?=\{) 508 | end 509 | (?=;|\}) 510 | patterns 511 | 512 | 513 | begin 514 | \G\{ 515 | beginCaptures 516 | 517 | 0 518 | 519 | name 520 | punctuation.definition.dictionary.begin.plist 521 | 522 | 523 | end 524 | \} 525 | endCaptures 526 | 527 | 0 528 | 529 | name 530 | punctuation.definition.dictionary.end.plist 531 | 532 | 533 | name 534 | meta.scope.dictionary.plist 535 | patterns 536 | 537 | 538 | begin 539 | match 540 | beginCaptures 541 | 542 | 0 543 | 544 | name 545 | constant.other.key.plist 546 | 547 | 548 | end 549 | ;|(?=\}) 550 | endCaptures 551 | 552 | 0 553 | 554 | name 555 | punctuation.separator.dictionary.plist 556 | 557 | 558 | name 559 | meta.scope.dictionary-item.$0.plist 560 | patterns 561 | 562 | 563 | begin 564 | = 565 | end 566 | (?=;|\}) 567 | patterns 568 | 569 | 570 | begin 571 | (?="|') 572 | end 573 | (?=;|\}) 574 | patterns 575 | 576 | 577 | include 578 | #string_regexp 579 | 580 | 581 | include 582 | #stray 583 | 584 | 585 | 586 | 587 | include 588 | #stray_alpha 589 | 590 | 591 | 592 | 593 | include 594 | #stray 595 | 596 | 597 | 598 | 599 | begin 600 | format 601 | beginCaptures 602 | 603 | 0 604 | 605 | name 606 | constant.other.key.plist 607 | 608 | 609 | end 610 | ;|(?=\}) 611 | endCaptures 612 | 613 | 0 614 | 615 | name 616 | punctuation.separator.dictionary.plist 617 | 618 | 619 | name 620 | meta.scope.dictionary-item.$0.plist 621 | patterns 622 | 623 | 624 | begin 625 | = 626 | end 627 | (?=;|\}) 628 | patterns 629 | 630 | 631 | begin 632 | (?="|'|[-a-zA-Z0-9_.]) 633 | end 634 | (?=;|\}) 635 | patterns 636 | 637 | 638 | include 639 | #string 640 | 641 | 642 | include 643 | #stray_alpha 644 | 645 | 646 | 647 | 648 | include 649 | #stray_alpha 650 | 651 | 652 | 653 | 654 | include 655 | #stray 656 | 657 | 658 | 659 | 660 | begin 661 | (?>((")((?:[^"\\]|\\.)*)("))|((')((?:[^'\\]|\\.)*)('))|([-a-zA-Z0-9_.]+)) 662 | beginCaptures 663 | 664 | 1 665 | 666 | name 667 | string.quoted.double.plist 668 | 669 | 2 670 | 671 | name 672 | punctuation.definition.string.begin.plist 673 | 674 | 3 675 | 676 | name 677 | invalid.illegal.invalid_key.plist 678 | 679 | 4 680 | 681 | name 682 | punctuation.definition.string.end.plist 683 | 684 | 5 685 | 686 | name 687 | string.quoted.single.plist 688 | 689 | 6 690 | 691 | name 692 | punctuation.definition.string.begin.plist 693 | 694 | 7 695 | 696 | name 697 | invalid.illegal.invalid_key.plist 698 | 699 | 8 700 | 701 | name 702 | punctuation.definition.string.end.plist 703 | 704 | 9 705 | 706 | name 707 | invalid.illegal.invalid_key.plist 708 | 709 | 710 | end 711 | ;|(?=\}) 712 | endCaptures 713 | 714 | 0 715 | 716 | name 717 | punctuation.separator.dictionary.plist 718 | 719 | 720 | name 721 | meta.scope.dictionary-item.${3/[[\s\x20-\x7F]&&[:^alnum:]]//g}${7/[[\s\x20-\x7F]&&[:^alnum:]]//g}${9/[[\s\x20-\x7F]&&[:^alnum:]]//g}.plist 722 | patterns 723 | 724 | 725 | include 726 | #dictionary_item_contents 727 | 728 | 729 | 730 | 731 | include 732 | #stray 733 | 734 | 735 | 736 | 737 | include 738 | #stray 739 | 740 | 741 | 742 | 743 | include 744 | #stray 745 | 746 | 747 | 748 | 749 | include 750 | #stray 751 | 752 | 753 | 754 | 755 | begin 756 | fontSize 757 | beginCaptures 758 | 759 | 0 760 | 761 | name 762 | constant.other.key.plist 763 | 764 | 765 | end 766 | ;|(?=\}) 767 | endCaptures 768 | 769 | 0 770 | 771 | name 772 | punctuation.separator.dictionary.plist 773 | 774 | 775 | name 776 | meta.scope.dictionary-item.$0.plist 777 | patterns 778 | 779 | 780 | begin 781 | = 782 | end 783 | (?=;|\}) 784 | patterns 785 | 786 | 787 | begin 788 | (?="|'|[-a-zA-Z0-9_.]) 789 | end 790 | (?=;|\}) 791 | patterns 792 | 793 | 794 | begin 795 | \G' 796 | beginCaptures 797 | 798 | 0 799 | 800 | name 801 | punctuation.definition.string.begin.plist 802 | 803 | 804 | end 805 | '(?!') 806 | endCaptures 807 | 808 | 0 809 | 810 | name 811 | punctuation.definition.string.end.plist 812 | 813 | 814 | name 815 | string.quoted.single.plist 816 | patterns 817 | 818 | 819 | captures 820 | 821 | 1 822 | 823 | name 824 | constant.numeric.plist 825 | 826 | 3 827 | 828 | name 829 | keyword.other.unit.plist 830 | 831 | 832 | match 833 | \G([0-9]+(\.[0-9]+)?)([ ]?(%|pt|em))? 834 | 835 | 836 | 837 | 838 | begin 839 | \G" 840 | beginCaptures 841 | 842 | 0 843 | 844 | name 845 | punctuation.definition.string.begin.plist 846 | 847 | 848 | end 849 | " 850 | endCaptures 851 | 852 | 0 853 | 854 | name 855 | punctuation.definition.string.end.plist 856 | 857 | 858 | name 859 | string.quoted.double.plist 860 | patterns 861 | 862 | 863 | match 864 | \G[0-9]+(\.[0-9]+)?[ ]?(%|pt|em)? 865 | name 866 | constant.numeric.plist 867 | 868 | 869 | 870 | 871 | include 872 | #stray_alpha 873 | 874 | 875 | 876 | 877 | include 878 | #stray 879 | 880 | 881 | 882 | 883 | include 884 | #stray 885 | 886 | 887 | 888 | 889 | begin 890 | completions|highlightPairs|smartTypingPairs|shellVariables 891 | beginCaptures 892 | 893 | 0 894 | 895 | name 896 | constant.other.key.plist 897 | 898 | 899 | end 900 | ;|(?=\}) 901 | endCaptures 902 | 903 | 0 904 | 905 | name 906 | punctuation.separator.dictionary.plist 907 | 908 | 909 | name 910 | meta.scope.dictionary-item.$0.plist 911 | patterns 912 | 913 | 914 | begin 915 | = 916 | end 917 | (?=;|\}) 918 | patterns 919 | 920 | 921 | begin 922 | (?=\() 923 | end 924 | (?=;|\}) 925 | patterns 926 | 927 | 928 | include 929 | #array 930 | 931 | 932 | include 933 | #stray 934 | 935 | 936 | 937 | 938 | include 939 | #stray 940 | 941 | 942 | 943 | 944 | include 945 | #stray 946 | 947 | 948 | 949 | 950 | begin 951 | disableDefaultCompletion|showInSymbolList|spellChecking|misspelled|bold|italic|underline|softWrap 952 | beginCaptures 953 | 954 | 0 955 | 956 | name 957 | constant.other.key.plist 958 | 959 | 960 | end 961 | ;|(?=\}) 962 | endCaptures 963 | 964 | 0 965 | 966 | name 967 | punctuation.separator.dictionary.plist 968 | 969 | 970 | name 971 | meta.scope.dictionary-item.$0.plist 972 | patterns 973 | 974 | 975 | begin 976 | = 977 | end 978 | (?=;|\}) 979 | patterns 980 | 981 | 982 | begin 983 | (?=[01]) 984 | end 985 | (?=;|\}) 986 | patterns 987 | 988 | 989 | match 990 | \G[01] 991 | name 992 | constant.numeric.plist 993 | 994 | 995 | include 996 | #stray_alpha 997 | 998 | 999 | 1000 | 1001 | begin 1002 | (?=['"]) 1003 | end 1004 | (?=;|\}) 1005 | patterns 1006 | 1007 | 1008 | captures 1009 | 1010 | 1 1011 | 1012 | name 1013 | punctuation.definition.string.begin.plist 1014 | 1015 | 2 1016 | 1017 | name 1018 | constant.numeric.plist 1019 | 1020 | 3 1021 | 1022 | name 1023 | punctuation.definition.string.end.plist 1024 | 1025 | 1026 | match 1027 | (')([01])(') 1028 | name 1029 | string.quoted.single.plist 1030 | 1031 | 1032 | captures 1033 | 1034 | 1 1035 | 1036 | name 1037 | punctuation.definition.string.begin.plist 1038 | 1039 | 2 1040 | 1041 | name 1042 | constant.numeric.plist 1043 | 1044 | 3 1045 | 1046 | name 1047 | punctuation.definition.string.end.plist 1048 | 1049 | 1050 | match 1051 | (")([01])(") 1052 | name 1053 | string.quoted.double.plist 1054 | 1055 | 1056 | include 1057 | #stray_alpha 1058 | 1059 | 1060 | 1061 | 1062 | begin 1063 | (?=:) 1064 | end 1065 | (?=;|\}) 1066 | patterns 1067 | 1068 | 1069 | match 1070 | \G:(true|false) 1071 | name 1072 | constant.language.boolean.plist 1073 | 1074 | 1075 | include 1076 | #stray_alpha 1077 | 1078 | 1079 | 1080 | 1081 | include 1082 | #stray 1083 | 1084 | 1085 | 1086 | 1087 | include 1088 | #stray 1089 | 1090 | 1091 | 1092 | 1093 | begin 1094 | disableIndentCorrections 1095 | beginCaptures 1096 | 1097 | 0 1098 | 1099 | name 1100 | constant.other.key.plist 1101 | 1102 | 1103 | end 1104 | ;|(?=\}) 1105 | endCaptures 1106 | 1107 | 0 1108 | 1109 | name 1110 | punctuation.separator.dictionary.plist 1111 | 1112 | 1113 | name 1114 | meta.scope.dictionary-item.$0.plist 1115 | patterns 1116 | 1117 | 1118 | begin 1119 | = 1120 | end 1121 | (?=;|\}) 1122 | patterns 1123 | 1124 | 1125 | begin 1126 | (?=[01]) 1127 | end 1128 | (?=;|\}) 1129 | patterns 1130 | 1131 | 1132 | match 1133 | \G[01] 1134 | name 1135 | constant.numeric.plist 1136 | 1137 | 1138 | include 1139 | #stray_alpha 1140 | 1141 | 1142 | 1143 | 1144 | begin 1145 | (?=['"]) 1146 | end 1147 | (?=;|\}) 1148 | patterns 1149 | 1150 | 1151 | captures 1152 | 1153 | 1 1154 | 1155 | name 1156 | punctuation.definition.string.begin.plist 1157 | 1158 | 2 1159 | 1160 | name 1161 | constant.numeric.plist 1162 | 1163 | 4 1164 | 1165 | name 1166 | punctuation.definition.string.end.plist 1167 | 1168 | 1169 | match 1170 | (')(?:([01])|(emptyLines))(') 1171 | name 1172 | string.quoted.single.plist 1173 | 1174 | 1175 | captures 1176 | 1177 | 1 1178 | 1179 | name 1180 | punctuation.definition.string.begin.plist 1181 | 1182 | 2 1183 | 1184 | name 1185 | constant.numeric.plist 1186 | 1187 | 4 1188 | 1189 | name 1190 | punctuation.definition.string.end.plist 1191 | 1192 | 1193 | match 1194 | (")(?:([01])|(emptyLines))(") 1195 | name 1196 | string.quoted.double.plist 1197 | 1198 | 1199 | include 1200 | #stray_alpha 1201 | 1202 | 1203 | 1204 | 1205 | begin 1206 | (?=:) 1207 | end 1208 | (?=;|\}) 1209 | patterns 1210 | 1211 | 1212 | match 1213 | \G:(true|false) 1214 | name 1215 | constant.language.boolean.plist 1216 | 1217 | 1218 | include 1219 | #stray_alpha 1220 | 1221 | 1222 | 1223 | 1224 | include 1225 | #stray 1226 | 1227 | 1228 | 1229 | 1230 | include 1231 | #stray 1232 | 1233 | 1234 | 1235 | 1236 | begin 1237 | symbolTransformation|decreaseIndentPattern|increaseIndentPattern|indentNextLinePattern|unIndentedLinePattern|zeroIndentPattern|foldingStartMarker|foldingStopMarker|foldingIndentedBlockIgnore|foldingIndentedBlockStart 1238 | beginCaptures 1239 | 1240 | 0 1241 | 1242 | name 1243 | constant.other.key.plist 1244 | 1245 | 1246 | end 1247 | ;|(?=\}) 1248 | endCaptures 1249 | 1250 | 0 1251 | 1252 | name 1253 | punctuation.separator.dictionary.plist 1254 | 1255 | 1256 | name 1257 | meta.scope.dictionary-item.$0.plist 1258 | patterns 1259 | 1260 | 1261 | begin 1262 | = 1263 | end 1264 | (?=;|\}) 1265 | patterns 1266 | 1267 | 1268 | begin 1269 | (?="|') 1270 | end 1271 | (?=;|\}) 1272 | patterns 1273 | 1274 | 1275 | include 1276 | #string_regexp 1277 | 1278 | 1279 | include 1280 | #stray 1281 | 1282 | 1283 | 1284 | 1285 | include 1286 | #stray_alpha 1287 | 1288 | 1289 | 1290 | 1291 | include 1292 | #stray 1293 | 1294 | 1295 | 1296 | 1297 | begin 1298 | (?>((")((?:[^"\\]|\\.)*)("))|((')((?:[^'\\]|\\.)*)('))|([-a-zA-Z0-9_.]+)) 1299 | beginCaptures 1300 | 1301 | 1 1302 | 1303 | name 1304 | string.quoted.double.plist 1305 | 1306 | 2 1307 | 1308 | name 1309 | punctuation.definition.string.begin.plist 1310 | 1311 | 3 1312 | 1313 | name 1314 | invalid.illegal.invalid_key.plist 1315 | 1316 | 4 1317 | 1318 | name 1319 | punctuation.definition.string.end.plist 1320 | 1321 | 5 1322 | 1323 | name 1324 | string.quoted.single.plist 1325 | 1326 | 6 1327 | 1328 | name 1329 | punctuation.definition.string.begin.plist 1330 | 1331 | 7 1332 | 1333 | name 1334 | invalid.illegal.invalid_key.plist 1335 | 1336 | 8 1337 | 1338 | name 1339 | punctuation.definition.string.end.plist 1340 | 1341 | 9 1342 | 1343 | name 1344 | invalid.illegal.invalid_key.plist 1345 | 1346 | 1347 | end 1348 | ;|(?=\}) 1349 | endCaptures 1350 | 1351 | 0 1352 | 1353 | name 1354 | punctuation.separator.dictionary.plist 1355 | 1356 | 1357 | name 1358 | meta.scope.dictionary-item.${3/[[\s\x20-\x7F]&&[:^alnum:]]//g}${7/[[\s\x20-\x7F]&&[:^alnum:]]//g}${9/[[\s\x20-\x7F]&&[:^alnum:]]//g}.plist 1359 | patterns 1360 | 1361 | 1362 | include 1363 | #dictionary_item_contents 1364 | 1365 | 1366 | 1367 | 1368 | include 1369 | #stray 1370 | 1371 | 1372 | 1373 | stray 1374 | 1375 | begin 1376 | \S 1377 | end 1378 | (?=\{|\(|/\*|//|"|'|<|,|;|\)|\}|=) 1379 | name 1380 | invalid.illegal.character-not-allowed-here.plist 1381 | 1382 | stray_alpha 1383 | 1384 | begin 1385 | \S 1386 | end 1387 | (?=\{|\(|/\*|//|"|'|<|,|;|\)|\}|=|\b[a-zA-Z0-9]|[-_.]) 1388 | name 1389 | invalid.illegal.character-not-allowed-here.plist 1390 | 1391 | string 1392 | 1393 | patterns 1394 | 1395 | 1396 | begin 1397 | \G' 1398 | beginCaptures 1399 | 1400 | 0 1401 | 1402 | name 1403 | punctuation.definition.string.begin.plist 1404 | 1405 | 1406 | end 1407 | '(?!') 1408 | endCaptures 1409 | 1410 | 0 1411 | 1412 | name 1413 | punctuation.definition.string.end.plist 1414 | 1415 | 1416 | name 1417 | string.quoted.single.plist 1418 | patterns 1419 | 1420 | 1421 | match 1422 | '' 1423 | name 1424 | constant.character.escape.plist 1425 | 1426 | 1427 | 1428 | 1429 | begin 1430 | \G" 1431 | beginCaptures 1432 | 1433 | 0 1434 | 1435 | name 1436 | punctuation.definition.string.begin.plist 1437 | 1438 | 1439 | end 1440 | " 1441 | endCaptures 1442 | 1443 | 0 1444 | 1445 | name 1446 | punctuation.definition.string.end.plist 1447 | 1448 | 1449 | name 1450 | string.quoted.double.plist 1451 | patterns 1452 | 1453 | 1454 | match 1455 | \\("|\\) 1456 | name 1457 | constant.character.escape.plist 1458 | 1459 | 1460 | 1461 | 1462 | match 1463 | \G[-+]?\d+(\.\d*)?(E[-+]\d+)?(?!\w) 1464 | name 1465 | constant.numeric.plist 1466 | 1467 | 1468 | match 1469 | \G[-a-zA-Z0-9_.]+ 1470 | name 1471 | string.unquoted.plist 1472 | 1473 | 1474 | 1475 | string_regexp 1476 | 1477 | patterns 1478 | 1479 | 1480 | begin 1481 | \G' 1482 | beginCaptures 1483 | 1484 | 0 1485 | 1486 | name 1487 | punctuation.definition.string.begin.plist 1488 | 1489 | 1490 | end 1491 | '(?!') 1492 | endCaptures 1493 | 1494 | 0 1495 | 1496 | name 1497 | punctuation.definition.string.end.plist 1498 | 1499 | 1500 | name 1501 | string.regexp.plist 1502 | patterns 1503 | 1504 | 1505 | match 1506 | '' 1507 | name 1508 | constant.character.escape.plist 1509 | 1510 | 1511 | include 1512 | source.regexp.oniguruma 1513 | 1514 | 1515 | 1516 | 1517 | begin 1518 | \G" 1519 | beginCaptures 1520 | 1521 | 0 1522 | 1523 | name 1524 | punctuation.definition.string.begin.plist 1525 | 1526 | 1527 | end 1528 | " 1529 | endCaptures 1530 | 1531 | 0 1532 | 1533 | name 1534 | punctuation.definition.string.end.plist 1535 | 1536 | 1537 | name 1538 | string.regexp.plist 1539 | patterns 1540 | 1541 | 1542 | match 1543 | \\("|\\) 1544 | name 1545 | constant.character.escape.plist 1546 | 1547 | 1548 | include 1549 | source.regexp.oniguruma 1550 | 1551 | 1552 | 1553 | 1554 | 1555 | 1556 | scopeName 1557 | source.plist.textmate.settings 1558 | uuid 1559 | CF3947B5-C5CE-46A1-8E84-724C6C986861 1560 | 1561 | 1562 | -------------------------------------------------------------------------------- /Syntaxes/Language Grammar.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fileTypes 6 | 7 | textmate 8 | 9 | firstLineMatch 10 | ^\{\s*scopeName = .*$ 11 | keyEquivalent 12 | ^~L 13 | name 14 | Language Grammar 15 | patterns 16 | 17 | 18 | begin 19 | (\{) 20 | beginCaptures 21 | 22 | 1 23 | 24 | name 25 | punctuation.section.dictionary.begin.plist 26 | 27 | 28 | end 29 | (\}) 30 | endCaptures 31 | 32 | 1 33 | 34 | name 35 | punctuation.section.dictionary.end.plist 36 | 37 | 38 | patterns 39 | 40 | 41 | include 42 | #comment 43 | 44 | 45 | begin 46 | \b(scopeName)\s*(=) 47 | beginCaptures 48 | 49 | 1 50 | 51 | name 52 | support.constant.plist 53 | 54 | 2 55 | 56 | name 57 | punctuation.section.dictionary.plist 58 | 59 | 60 | comment 61 | scopeName 62 | end 63 | (;) 64 | endCaptures 65 | 66 | 1 67 | 68 | name 69 | punctuation.section.dictionary.plist 70 | 71 | 72 | name 73 | meta.value-pair.scopename.plist 74 | patterns 75 | 76 | 77 | include 78 | #comment 79 | 80 | 81 | include 82 | #scope-root 83 | 84 | 85 | include 86 | #catch-all 87 | 88 | 89 | 90 | 91 | begin 92 | \b(fileTypes)\s*(=) 93 | beginCaptures 94 | 95 | 1 96 | 97 | name 98 | support.constant.plist 99 | 100 | 2 101 | 102 | name 103 | punctuation.separator.key-value.plist 104 | 105 | 106 | comment 107 | fileTypes 108 | end 109 | (;) 110 | endCaptures 111 | 112 | 1 113 | 114 | name 115 | punctuation.terminator.dictionary.plist 116 | 117 | 118 | patterns 119 | 120 | 121 | begin 122 | (\() 123 | beginCaptures 124 | 125 | 1 126 | 127 | name 128 | punctuation.section.array.begin.plist 129 | 130 | 131 | end 132 | (\)) 133 | endCaptures 134 | 135 | 1 136 | 137 | name 138 | punctuation.section.array.end.plist 139 | 140 | 141 | patterns 142 | 143 | 144 | include 145 | #comment 146 | 147 | 148 | begin 149 | (?=[^\s,]) 150 | end 151 | (,)|(?=\)) 152 | endCaptures 153 | 154 | 1 155 | 156 | name 157 | punctuation.separator.array.plist 158 | 159 | 160 | patterns 161 | 162 | 163 | include 164 | #comment 165 | 166 | 167 | match 168 | \s+(?=//|/\*) 169 | 170 | 171 | begin 172 | [[^\n]&&\s](?!\s*(,|\)|$)).* 173 | end 174 | ^$not possible$^ 175 | name 176 | invalid.illegal.missing-comma.plist 177 | 178 | 179 | include 180 | #string 181 | 182 | 183 | 184 | 185 | include 186 | #catch-all 187 | 188 | 189 | 190 | 191 | 192 | 193 | begin 194 | \b(firstLineMatch|folding(Start|Stop)Marker)\s*(=) 195 | beginCaptures 196 | 197 | 1 198 | 199 | name 200 | support.constant.plist 201 | 202 | 3 203 | 204 | name 205 | punctuation.separator.key-value.plist 206 | 207 | 208 | comment 209 | firstLineMatch, foldingStartMarker, foldingStopMarker 210 | end 211 | (;) 212 | endCaptures 213 | 214 | 1 215 | 216 | name 217 | punctuation.terminator.dictionary.plist 218 | 219 | 220 | patterns 221 | 222 | 223 | include 224 | #comment 225 | 226 | 227 | include 228 | #regexp 229 | 230 | 231 | include 232 | #catch-all 233 | 234 | 235 | 236 | 237 | include 238 | #patterns 239 | 240 | 241 | include 242 | #repository 243 | 244 | 245 | include 246 | #injections 247 | 248 | 249 | include 250 | #comment-keyword 251 | 252 | 253 | include 254 | #invalid-keyword 255 | 256 | 257 | include 258 | #string 259 | 260 | 261 | begin 262 | (=) 263 | beginCaptures 264 | 265 | 1 266 | 267 | name 268 | punctuation.separator.key-value.plist 269 | 270 | 271 | end 272 | (;) 273 | endCaptures 274 | 275 | 1 276 | 277 | name 278 | punctuation.terminator.dictionary.plist 279 | 280 | 281 | patterns 282 | 283 | 284 | include 285 | #any 286 | 287 | 288 | 289 | 290 | match 291 | ; 292 | name 293 | punctuation.terminator.dictionary.plist 294 | 295 | 296 | include 297 | #catch-all 298 | 299 | 300 | 301 | 302 | repository 303 | 304 | any 305 | 306 | patterns 307 | 308 | 309 | include 310 | #comment 311 | 312 | 313 | include 314 | #string 315 | 316 | 317 | include 318 | #array 319 | 320 | 321 | include 322 | #dictionary 323 | 324 | 325 | include 326 | #catch-all 327 | 328 | 329 | 330 | array 331 | 332 | begin 333 | (\() 334 | beginCaptures 335 | 336 | 1 337 | 338 | name 339 | punctuation.section.array.begin.plist 340 | 341 | 342 | end 343 | (\)) 344 | endCaptures 345 | 346 | 1 347 | 348 | name 349 | punctuation.section.array.end.plist 350 | 351 | 352 | patterns 353 | 354 | 355 | include 356 | #comment 357 | 358 | 359 | begin 360 | (?=[^\s,]) 361 | end 362 | (,)|(?=\)) 363 | endCaptures 364 | 365 | 1 366 | 367 | name 368 | punctuation.separator.array.plist 369 | 370 | 371 | patterns 372 | 373 | 374 | include 375 | #comment 376 | 377 | 378 | match 379 | \s+(?=//|/\*) 380 | 381 | 382 | begin 383 | [[^\n]&&\s](?!\s*(,|\)|$)).* 384 | end 385 | ^$not possible$^ 386 | name 387 | invalid.illegal.missing-comma.plist 388 | 389 | 390 | include 391 | #any 392 | 393 | 394 | 395 | 396 | include 397 | #catch-all 398 | 399 | 400 | 401 | catch-all 402 | 403 | patterns 404 | 405 | 406 | match 407 | \s+ 408 | 409 | 410 | match 411 | . 412 | name 413 | invalid.illegal.unrecognized-character.plist 414 | 415 | 416 | 417 | comment 418 | 419 | patterns 420 | 421 | 422 | begin 423 | /\* 424 | end 425 | \*/ 426 | name 427 | comment.block.plist 428 | 429 | 430 | match 431 | //.*$\n? 432 | name 433 | comment.line.double-slash.plist 434 | 435 | 436 | 437 | comment-keyword 438 | 439 | begin 440 | \b(comment)\s*(=) 441 | beginCaptures 442 | 443 | 1 444 | 445 | name 446 | support.constant.plist 447 | 448 | 2 449 | 450 | name 451 | punctuation.separator.key-value.plist 452 | 453 | 454 | end 455 | (;) 456 | endCaptures 457 | 458 | 1 459 | 460 | name 461 | punctuation.terminator.dictionary.plist 462 | 463 | 464 | patterns 465 | 466 | 467 | include 468 | #comment 469 | 470 | 471 | applyEndPatternLast 472 | 1 473 | begin 474 | (') 475 | beginCaptures 476 | 477 | 1 478 | 479 | name 480 | punctuation.definition.string.begin.plist 481 | 482 | 483 | contentName 484 | comment.block.string.plist 485 | end 486 | (')(?!') 487 | endCaptures 488 | 489 | 1 490 | 491 | name 492 | punctuation.definition.string.end.plist 493 | 494 | 495 | name 496 | string.quoted.single.plist 497 | patterns 498 | 499 | 500 | match 501 | '' 502 | name 503 | constant.character.escape.apostrophe.plist 504 | 505 | 506 | 507 | 508 | begin 509 | (") 510 | beginCaptures 511 | 512 | 1 513 | 514 | name 515 | punctuation.definition.string.begin.plist 516 | 517 | 518 | contentName 519 | comment.block.string.plist 520 | end 521 | (") 522 | endCaptures 523 | 524 | 1 525 | 526 | name 527 | punctuation.definition.string.end.plist 528 | 529 | 530 | name 531 | string.quoted.double.plist 532 | patterns 533 | 534 | 535 | match 536 | \\[\\"] 537 | name 538 | constant.character.escape.plist 539 | 540 | 541 | 542 | 543 | include 544 | #catch-all 545 | 546 | 547 | 548 | dictionary 549 | 550 | begin 551 | (\{) 552 | beginCaptures 553 | 554 | 1 555 | 556 | name 557 | punctuation.section.dictionary.begin.plist 558 | 559 | 560 | end 561 | (\}) 562 | endCaptures 563 | 564 | 1 565 | 566 | name 567 | punctuation.section.dictionary.end.plist 568 | 569 | 570 | patterns 571 | 572 | 573 | include 574 | #comment 575 | 576 | 577 | include 578 | #string 579 | 580 | 581 | begin 582 | (=) 583 | beginCaptures 584 | 585 | 1 586 | 587 | name 588 | punctuation.separator.key-value.plist 589 | 590 | 591 | end 592 | (;) 593 | endCaptures 594 | 595 | 1 596 | 597 | name 598 | punctuation.terminator.dictionary.plist 599 | 600 | 601 | patterns 602 | 603 | 604 | include 605 | #any 606 | 607 | 608 | 609 | 610 | match 611 | ; 612 | name 613 | punctuation.terminator.dictionary.plist 614 | 615 | 616 | include 617 | #catch-all 618 | 619 | 620 | 621 | injections 622 | 623 | begin 624 | \b(injections)\s*(=) 625 | beginCaptures 626 | 627 | 1 628 | 629 | name 630 | support.constant.injections.plist 631 | 632 | 2 633 | 634 | name 635 | punctuation.separator.key-value.plist 636 | 637 | 638 | comment 639 | injections 640 | end 641 | (;) 642 | endCaptures 643 | 644 | 1 645 | 646 | name 647 | punctuation.terminator.dictionary.plist 648 | 649 | 650 | name 651 | meta.dictionary.injections.plist 652 | patterns 653 | 654 | 655 | begin 656 | (\{) 657 | beginCaptures 658 | 659 | 1 660 | 661 | name 662 | punctuation.section.dictionary.begin.plist 663 | 664 | 665 | end 666 | (\}) 667 | endCaptures 668 | 669 | 1 670 | 671 | name 672 | punctuation.section.dictionary.end.plist 673 | 674 | 675 | patterns 676 | 677 | 678 | include 679 | #comment 680 | 681 | 682 | begin 683 | (["']?)([^=]*)\1\s*(=) 684 | beginCaptures 685 | 686 | 2 687 | 688 | patterns 689 | 690 | 691 | include 692 | #scope 693 | 694 | 695 | 696 | 3 697 | 698 | name 699 | punctuation.separator.key-value.plist 700 | 701 | 702 | end 703 | (;) 704 | endCaptures 705 | 706 | 1 707 | 708 | name 709 | punctuation.terminator.dictionary.plist 710 | 711 | 712 | name 713 | meta.value-pair.repository-item.plist 714 | patterns 715 | 716 | 717 | include 718 | #comment 719 | 720 | 721 | include 722 | #rule 723 | 724 | 725 | include 726 | #catch-all 727 | 728 | 729 | 730 | 731 | include 732 | #catch-all 733 | 734 | 735 | 736 | 737 | 738 | invalid-keyword 739 | 740 | patterns 741 | 742 | 743 | match 744 | \b(fileTypes|foldingStartMarker|foldingStopMarker|patterns|match|begin|end|include|scopeName|captures|beginCaptures|endCaptures|firstLineMatch|comment|repository|disabled|contentName|applyEndPatternLast)\b(?=\s*=) 745 | name 746 | invalid.illegal.constant.misplaced-keyword.plist 747 | 748 | 749 | match 750 | \b(swallow|mode)\b(?=\s*=) 751 | name 752 | invalid.deprecated.constant.plist 753 | 754 | 755 | match 756 | \b(foregroundColor|backgroundColor|fontStyle|elementForegroundColor|elementBackgroundColor|elementFontStyle|highlightPairs|smartTypingPairs|increaseIndentPattern)\b(?=\s*=) 757 | name 758 | invalid.illegal.constant.outdated.plist 759 | 760 | 761 | match 762 | [-a-zA-Z_.]+(?=\s*=) 763 | name 764 | invalid.illegal.constant.unknown-keyword.plist 765 | 766 | 767 | 768 | patterns 769 | 770 | begin 771 | \b(patterns)\s*(=) 772 | beginCaptures 773 | 774 | 1 775 | 776 | name 777 | support.constant.plist 778 | 779 | 2 780 | 781 | name 782 | punctuation.separator.key-value.plist 783 | 784 | 785 | end 786 | (;) 787 | endCaptures 788 | 789 | 1 790 | 791 | name 792 | punctuation.terminator.dictionary.plist 793 | 794 | 795 | name 796 | meta.array.patterns.plist 797 | patterns 798 | 799 | 800 | include 801 | #comment 802 | 803 | 804 | begin 805 | (\() 806 | beginCaptures 807 | 808 | 1 809 | 810 | name 811 | punctuation.section.array.begin.plist 812 | 813 | 814 | end 815 | (\)) 816 | endCaptures 817 | 818 | 1 819 | 820 | name 821 | punctuation.section.array.end.plist 822 | 823 | 824 | patterns 825 | 826 | 827 | include 828 | #comment 829 | 830 | 831 | begin 832 | (?=[^\s,]) 833 | end 834 | (,)|(?=\)) 835 | endCaptures 836 | 837 | 1 838 | 839 | name 840 | punctuation.separator.array.plist 841 | 842 | 843 | patterns 844 | 845 | 846 | include 847 | #comment 848 | 849 | 850 | match 851 | \s+(?=//|/\*) 852 | 853 | 854 | begin 855 | [[^\n]&&\s](?!\s*(,|\)|$)).* 856 | end 857 | ^$not possible$^ 858 | name 859 | invalid.illegal.missing-comma.plist 860 | 861 | 862 | include 863 | #rule 864 | 865 | 866 | include 867 | #catch-all 868 | 869 | 870 | 871 | 872 | include 873 | #catch-all 874 | 875 | 876 | 877 | 878 | include 879 | #catch-all 880 | 881 | 882 | 883 | regexp 884 | 885 | patterns 886 | 887 | 888 | begin 889 | (') 890 | beginCaptures 891 | 892 | 1 893 | 894 | name 895 | punctuation.definition.string.begin.plist 896 | 897 | 898 | end 899 | (')(?!') 900 | endCaptures 901 | 902 | 1 903 | 904 | name 905 | punctuation.definition.string.end.plist 906 | 907 | 908 | name 909 | string.regexp.oniguruma.single.plist 910 | patterns 911 | 912 | 913 | match 914 | '' 915 | name 916 | constant.character.escape.apostrophe.plist 917 | 918 | 919 | include 920 | source.regexp.oniguruma 921 | 922 | 923 | 924 | 925 | begin 926 | (") 927 | beginCaptures 928 | 929 | 1 930 | 931 | name 932 | punctuation.definition.string.begin.plist 933 | 934 | 935 | end 936 | (") 937 | endCaptures 938 | 939 | 1 940 | 941 | name 942 | punctuation.definition.string.end.plist 943 | 944 | 945 | name 946 | string.regexp.oniguruma.double.plist 947 | patterns 948 | 949 | 950 | match 951 | \\\\|\\" 952 | name 953 | constant.character.escape.plist 954 | 955 | 956 | include 957 | source.regexp.oniguruma 958 | 959 | 960 | 961 | 962 | 963 | repository 964 | 965 | begin 966 | \b(repository)\s*(=) 967 | beginCaptures 968 | 969 | 1 970 | 971 | name 972 | support.constant.repository.plist 973 | 974 | 2 975 | 976 | name 977 | punctuation.separator.key-value.plist 978 | 979 | 980 | comment 981 | repository 982 | end 983 | (;) 984 | endCaptures 985 | 986 | 1 987 | 988 | name 989 | punctuation.terminator.dictionary.plist 990 | 991 | 992 | name 993 | meta.dictionary.repository.plist 994 | patterns 995 | 996 | 997 | begin 998 | (\{) 999 | beginCaptures 1000 | 1001 | 1 1002 | 1003 | name 1004 | punctuation.section.dictionary.begin.plist 1005 | 1006 | 1007 | end 1008 | (\}) 1009 | endCaptures 1010 | 1011 | 1 1012 | 1013 | name 1014 | punctuation.section.dictionary.end.plist 1015 | 1016 | 1017 | patterns 1018 | 1019 | 1020 | include 1021 | #comment 1022 | 1023 | 1024 | begin 1025 | (["']?)([-a-zA-Z0-9._]+)\1\s*(=) 1026 | beginCaptures 1027 | 1028 | 2 1029 | 1030 | name 1031 | entity.name.section.repository.plist 1032 | 1033 | 3 1034 | 1035 | name 1036 | punctuation.separator.key-value.plist 1037 | 1038 | 1039 | end 1040 | (;) 1041 | endCaptures 1042 | 1043 | 1 1044 | 1045 | name 1046 | punctuation.terminator.dictionary.plist 1047 | 1048 | 1049 | name 1050 | meta.value-pair.repository-item.plist 1051 | patterns 1052 | 1053 | 1054 | include 1055 | #comment 1056 | 1057 | 1058 | include 1059 | #rule 1060 | 1061 | 1062 | include 1063 | #catch-all 1064 | 1065 | 1066 | 1067 | 1068 | include 1069 | #string 1070 | 1071 | 1072 | begin 1073 | (=) 1074 | beginCaptures 1075 | 1076 | 1 1077 | 1078 | name 1079 | punctuation.separator.key-value.plist 1080 | 1081 | 1082 | end 1083 | (;) 1084 | endCaptures 1085 | 1086 | 1 1087 | 1088 | name 1089 | punctuation.terminator.dictionary.plist 1090 | 1091 | 1092 | patterns 1093 | 1094 | 1095 | include 1096 | #any 1097 | 1098 | 1099 | 1100 | 1101 | match 1102 | ; 1103 | name 1104 | punctuation.terminator.dictionary.plist 1105 | 1106 | 1107 | include 1108 | #catch-all 1109 | 1110 | 1111 | 1112 | 1113 | 1114 | rule 1115 | 1116 | begin 1117 | (\{) 1118 | beginCaptures 1119 | 1120 | 1 1121 | 1122 | name 1123 | punctuation.section.dictionary.begin.plist 1124 | 1125 | 1126 | end 1127 | (\}) 1128 | endCaptures 1129 | 1130 | 1 1131 | 1132 | name 1133 | punctuation.section.dictionary.end.plist 1134 | 1135 | 1136 | name 1137 | meta.dictionary.rule.plist 1138 | patterns 1139 | 1140 | 1141 | include 1142 | #comment 1143 | 1144 | 1145 | include 1146 | #repository 1147 | 1148 | 1149 | include 1150 | #injections 1151 | 1152 | 1153 | begin 1154 | \b((contentN|n)ame)\s*(=) 1155 | beginCaptures 1156 | 1157 | 1 1158 | 1159 | name 1160 | support.constant.plist 1161 | 1162 | 3 1163 | 1164 | name 1165 | punctuation.separator.key-value.plist 1166 | 1167 | 1168 | comment 1169 | name, contentName 1170 | end 1171 | (;) 1172 | endCaptures 1173 | 1174 | 1 1175 | 1176 | name 1177 | punctuation.terminator.dictionary.plist 1178 | 1179 | 1180 | name 1181 | meta.value-pair.plist 1182 | patterns 1183 | 1184 | 1185 | include 1186 | #comment 1187 | 1188 | 1189 | include 1190 | #scope 1191 | 1192 | 1193 | include 1194 | #catch-all 1195 | 1196 | 1197 | 1198 | 1199 | begin 1200 | \b(begin|end|while|match)\s*(=) 1201 | beginCaptures 1202 | 1203 | 1 1204 | 1205 | name 1206 | support.constant.plist 1207 | 1208 | 2 1209 | 1210 | name 1211 | punctuation.separator.key-value.plist 1212 | 1213 | 1214 | comment 1215 | begin, end, while, match 1216 | end 1217 | (;) 1218 | endCaptures 1219 | 1220 | 1 1221 | 1222 | name 1223 | punctuation.terminator.dictionary.plist 1224 | 1225 | 1226 | patterns 1227 | 1228 | 1229 | include 1230 | #comment 1231 | 1232 | 1233 | include 1234 | #regexp 1235 | 1236 | 1237 | include 1238 | #catch-all 1239 | 1240 | 1241 | 1242 | 1243 | begin 1244 | \b(include)\s*(=) 1245 | beginCaptures 1246 | 1247 | 1 1248 | 1249 | name 1250 | support.constant.plist 1251 | 1252 | 2 1253 | 1254 | name 1255 | punctuation.separator.key-value.plist 1256 | 1257 | 1258 | comment 1259 | include 1260 | end 1261 | (;) 1262 | endCaptures 1263 | 1264 | 1 1265 | 1266 | name 1267 | punctuation.terminator.dictionary.plist 1268 | 1269 | 1270 | patterns 1271 | 1272 | 1273 | include 1274 | #comment 1275 | 1276 | 1277 | captures 1278 | 1279 | 1 1280 | 1281 | name 1282 | punctuation.definition.string.begin.plist 1283 | 1284 | 2 1285 | 1286 | name 1287 | constant.other.reference.repository-item.plist 1288 | 1289 | 3 1290 | 1291 | name 1292 | punctuation.definition.constant.plist 1293 | 1294 | 4 1295 | 1296 | name 1297 | constant.other.reference.grammar.plist 1298 | 1299 | 5 1300 | 1301 | name 1302 | punctuation.definition.constant.plist 1303 | 1304 | 6 1305 | 1306 | name 1307 | punctuation.definition.string.end.plist 1308 | 1309 | 1310 | match 1311 | (')(?:((#)[-a-zA-Z0-9._]+)|((\$)(?:base|self)))?(') 1312 | name 1313 | string.quoted.single.include.plist 1314 | 1315 | 1316 | captures 1317 | 1318 | 1 1319 | 1320 | name 1321 | punctuation.definition.string.begin.plist 1322 | 1323 | 2 1324 | 1325 | name 1326 | constant.other.reference.repository-item.plist 1327 | 1328 | 3 1329 | 1330 | name 1331 | punctuation.definition.constant.plist 1332 | 1333 | 4 1334 | 1335 | name 1336 | constant.other.reference.grammar.plist 1337 | 1338 | 5 1339 | 1340 | name 1341 | punctuation.definition.constant.plist 1342 | 1343 | 6 1344 | 1345 | name 1346 | punctuation.definition.string.end.plist 1347 | 1348 | 1349 | match 1350 | (')(?:((#)[-a-zA-Z0-9._]+)|((\$)(?:base|self)))?(') 1351 | name 1352 | string.quoted.double.include.plist 1353 | 1354 | 1355 | include 1356 | #scope-root 1357 | 1358 | 1359 | include 1360 | #catch-all 1361 | 1362 | 1363 | 1364 | 1365 | begin 1366 | \b((beginC|endC|whileC|c)aptures)\s*(=) 1367 | beginCaptures 1368 | 1369 | 1 1370 | 1371 | name 1372 | support.constant.plist 1373 | 1374 | 3 1375 | 1376 | name 1377 | punctuation.separator.key-value.plist 1378 | 1379 | 1380 | comment 1381 | captures 1382 | end 1383 | (;) 1384 | endCaptures 1385 | 1386 | 1 1387 | 1388 | name 1389 | punctuation.terminator.dictionary.plist 1390 | 1391 | 1392 | name 1393 | meta.dictionary.captures.plist 1394 | patterns 1395 | 1396 | 1397 | begin 1398 | (\{) 1399 | beginCaptures 1400 | 1401 | 1 1402 | 1403 | name 1404 | punctuation.section.dictionary.begin.plist 1405 | 1406 | 1407 | end 1408 | (\}) 1409 | endCaptures 1410 | 1411 | 1 1412 | 1413 | name 1414 | punctuation.section.dictionary.end.plist 1415 | 1416 | 1417 | patterns 1418 | 1419 | 1420 | include 1421 | #comment 1422 | 1423 | 1424 | include 1425 | #string 1426 | 1427 | 1428 | begin 1429 | (=) 1430 | beginCaptures 1431 | 1432 | 1 1433 | 1434 | name 1435 | punctuation.separator.key-value.plist 1436 | 1437 | 1438 | end 1439 | (;) 1440 | endCaptures 1441 | 1442 | 1 1443 | 1444 | name 1445 | punctuation.terminator.dictionary.plist 1446 | 1447 | 1448 | patterns 1449 | 1450 | 1451 | include 1452 | #comment 1453 | 1454 | 1455 | begin 1456 | (\{) 1457 | beginCaptures 1458 | 1459 | 1 1460 | 1461 | name 1462 | punctuation.section.dictionary.begin.plist 1463 | 1464 | 1465 | end 1466 | (\}) 1467 | endCaptures 1468 | 1469 | 1 1470 | 1471 | name 1472 | punctuation.section.dictionary.end.plist 1473 | 1474 | 1475 | patterns 1476 | 1477 | 1478 | include 1479 | #comment 1480 | 1481 | 1482 | include 1483 | #comment-keyword 1484 | 1485 | 1486 | begin 1487 | \b(name)\s*(=) 1488 | beginCaptures 1489 | 1490 | 1 1491 | 1492 | name 1493 | support.constant.plist 1494 | 1495 | 2 1496 | 1497 | name 1498 | punctuation.separator.key-value.plist 1499 | 1500 | 1501 | comment 1502 | name 1503 | end 1504 | (;) 1505 | endCaptures 1506 | 1507 | 1 1508 | 1509 | name 1510 | punctuation.terminator.dictionary.plist 1511 | 1512 | 1513 | name 1514 | meta.value-pair.plist 1515 | patterns 1516 | 1517 | 1518 | include 1519 | #comment 1520 | 1521 | 1522 | include 1523 | #scope 1524 | 1525 | 1526 | include 1527 | #catch-all 1528 | 1529 | 1530 | 1531 | 1532 | include 1533 | #patterns 1534 | 1535 | 1536 | 1537 | 1538 | include 1539 | #catch-all 1540 | 1541 | 1542 | 1543 | 1544 | match 1545 | ; 1546 | name 1547 | punctuation.terminator.dictionary.plist 1548 | 1549 | 1550 | include 1551 | #catch-all 1552 | 1553 | 1554 | 1555 | 1556 | 1557 | 1558 | captures 1559 | 1560 | 1 1561 | 1562 | name 1563 | support.constant.plist 1564 | 1565 | 10 1566 | 1567 | name 1568 | constant.numeric.plist 1569 | 1570 | 11 1571 | 1572 | name 1573 | punctuation.definition.string.end.plist 1574 | 1575 | 12 1576 | 1577 | name 1578 | constant.language.boolean.true.plist 1579 | 1580 | 13 1581 | 1582 | name 1583 | constant.language.boolean.false.plist 1584 | 1585 | 14 1586 | 1587 | name 1588 | punctuation.terminator.dictionary.plist 1589 | 1590 | 2 1591 | 1592 | name 1593 | punctuation.separator.key-value.plist 1594 | 1595 | 3 1596 | 1597 | name 1598 | constant.numeric.plist 1599 | 1600 | 4 1601 | 1602 | name 1603 | string.quoted.double.plist 1604 | 1605 | 5 1606 | 1607 | name 1608 | punctuation.definition.string.begin.plist 1609 | 1610 | 6 1611 | 1612 | name 1613 | constant.numeric.plist 1614 | 1615 | 7 1616 | 1617 | name 1618 | punctuation.definition.string.end.plist 1619 | 1620 | 8 1621 | 1622 | name 1623 | string.quoted.single.plist 1624 | 1625 | 9 1626 | 1627 | name 1628 | punctuation.definition.string.begin.plist 1629 | 1630 | 1631 | comment 1632 | disabled, applyEndPatternLast 1633 | match 1634 | \b(disabled|applyEndPatternLast)\s*(=)\s*(?:(0|1)|((")(0|1)("))|((')(0|1)('))|(:true)|(:false))\s*(;) 1635 | 1636 | 1637 | include 1638 | #patterns 1639 | 1640 | 1641 | include 1642 | #comment-keyword 1643 | 1644 | 1645 | include 1646 | #invalid-keyword 1647 | 1648 | 1649 | include 1650 | #string 1651 | 1652 | 1653 | begin 1654 | (=) 1655 | beginCaptures 1656 | 1657 | 1 1658 | 1659 | name 1660 | punctuation.separator.key-value.plist 1661 | 1662 | 1663 | end 1664 | (;) 1665 | endCaptures 1666 | 1667 | 1 1668 | 1669 | name 1670 | punctuation.terminator.dictionary.plist 1671 | 1672 | 1673 | patterns 1674 | 1675 | 1676 | include 1677 | #any 1678 | 1679 | 1680 | 1681 | 1682 | match 1683 | ; 1684 | name 1685 | punctuation.terminator.dictionary.plist 1686 | 1687 | 1688 | include 1689 | #catch-all 1690 | 1691 | 1692 | 1693 | scope 1694 | 1695 | patterns 1696 | 1697 | 1698 | captures 1699 | 1700 | 1 1701 | 1702 | name 1703 | punctuation.definition.string.begin.plist 1704 | 1705 | 2 1706 | 1707 | patterns 1708 | 1709 | 1710 | include 1711 | text.tm-scope#scope_language 1712 | 1713 | 1714 | include 1715 | text.tm-scope#scope_root 1716 | 1717 | 1718 | 1719 | 3 1720 | 1721 | name 1722 | punctuation.definition.string.end.plist 1723 | 1724 | 1725 | match 1726 | (')([^']*)(') 1727 | name 1728 | string.quoted.single.scope.plist 1729 | 1730 | 1731 | captures 1732 | 1733 | 1 1734 | 1735 | name 1736 | punctuation.definition.string.begin.plist 1737 | 1738 | 2 1739 | 1740 | patterns 1741 | 1742 | 1743 | include 1744 | text.tm-scope#scope_language 1745 | 1746 | 1747 | include 1748 | text.tm-scope#scope_root 1749 | 1750 | 1751 | 1752 | 3 1753 | 1754 | name 1755 | punctuation.definition.string.end.plist 1756 | 1757 | 1758 | match 1759 | (")([^"]*)(") 1760 | name 1761 | string.quoted.double.scope.plist 1762 | 1763 | 1764 | 1765 | scope-root 1766 | 1767 | patterns 1768 | 1769 | 1770 | captures 1771 | 1772 | 1 1773 | 1774 | name 1775 | punctuation.definition.string.begin.plist 1776 | 1777 | 2 1778 | 1779 | name 1780 | constant.other.scope.plist 1781 | 1782 | 3 1783 | 1784 | name 1785 | invalid.deprecated.scope_not_allowed.plist 1786 | 1787 | 4 1788 | 1789 | name 1790 | invalid.deprecated.scope_not_allowed.plist 1791 | 1792 | 5 1793 | 1794 | name 1795 | punctuation.definition.string.end.plist 1796 | 1797 | 1798 | match 1799 | (')(?:((?:source|text)\.[^\s,()&|\[\]:"'{}<>*?=^;#]*)([^']*)|([^']*))(') 1800 | name 1801 | string.quoted.single.scope.root.plist 1802 | 1803 | 1804 | captures 1805 | 1806 | 1 1807 | 1808 | name 1809 | punctuation.definition.string.begin.plist 1810 | 1811 | 2 1812 | 1813 | name 1814 | constant.other.scope.plist 1815 | 1816 | 3 1817 | 1818 | name 1819 | invalid.deprecated.scope_not_allowed.plist 1820 | 1821 | 4 1822 | 1823 | name 1824 | invalid.deprecated.scope_not_allowed.plist 1825 | 1826 | 5 1827 | 1828 | name 1829 | punctuation.definition.string.end.plist 1830 | 1831 | 1832 | match 1833 | (")(?:((?:source|text)\.[^\s,()&|\[\]:"'{}<>*?=^;#]*)([^"]*)|([^"]*))(") 1834 | name 1835 | string.quoted.double.scope.root.plist 1836 | 1837 | 1838 | 1839 | string 1840 | 1841 | patterns 1842 | 1843 | 1844 | match 1845 | \b[0-9]+\b 1846 | name 1847 | constant.numeric.plist 1848 | 1849 | 1850 | match 1851 | [-a-zA-Z0-9_.]+ 1852 | name 1853 | string.unquoted.plist 1854 | 1855 | 1856 | applyEndPatternLast 1857 | 1 1858 | begin 1859 | (') 1860 | beginCaptures 1861 | 1862 | 1 1863 | 1864 | name 1865 | punctuation.definition.string.begin.plist 1866 | 1867 | 1868 | end 1869 | ('(?!')) 1870 | endCaptures 1871 | 1872 | 1 1873 | 1874 | name 1875 | punctuation.definition.string.end.plist 1876 | 1877 | 1878 | name 1879 | string.quoted.single.plist 1880 | patterns 1881 | 1882 | 1883 | match 1884 | '' 1885 | name 1886 | constant.character.escape.apostrophe.plist 1887 | 1888 | 1889 | 1890 | 1891 | begin 1892 | (") 1893 | beginCaptures 1894 | 1895 | 1 1896 | 1897 | name 1898 | punctuation.definition.string.begin.plist 1899 | 1900 | 1901 | end 1902 | (") 1903 | endCaptures 1904 | 1905 | 1 1906 | 1907 | name 1908 | punctuation.definition.string.end.plist 1909 | 1910 | 1911 | name 1912 | string.quoted.double.plist 1913 | patterns 1914 | 1915 | 1916 | match 1917 | \\[\\"] 1918 | name 1919 | constant.character.escape.plist 1920 | 1921 | 1922 | 1923 | 1924 | 1925 | 1926 | scopeName 1927 | source.plist.textmate.grammar 1928 | uuid 1929 | 101D6FC2-6CBD-11D9-B329-000D93347A42 1930 | 1931 | 1932 | --------------------------------------------------------------------------------