├── 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 |
--------------------------------------------------------------------------------