Skip to content

Instantly share code, notes, and snippets.

@sessa
Created April 7, 2012 16:25
Show Gist options
  • Select an option

  • Save sessa/2330118 to your computer and use it in GitHub Desktop.

Select an option

Save sessa/2330118 to your computer and use it in GitHub Desktop.
Dump scopes used by a TextMate grammar
#!/usr/bin/env python
import plistlib
class Grammar(object):
def __init__(self, grammar):
self._grammar = grammar
self.names = []
self.includes = []
patterns = self._grammar['patterns']
self._parse_patterns(patterns)
def _parse_patterns(self, patterns):
for p in patterns:
if 'name' in p:
self.names.append( ('name', p['name']) )
if 'contentName' in p:
self.names.append( ('contentName', p['contentName']) )
for x in ['captures', 'beginCaptures', 'endCaptures']:
if x not in p:
continue
group = p[x]
for match in group:
g = group[match]
self.names.append( ('name', g['name']) )
if 'patterns' in x:
self._parse_patterns(x['patterns'])
def main():
plist = plistlib.readPlist("./Python.tmLanguage")
g = Grammar(plist)
print "\n".join(sorted((n[1] for n in g.names)))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment