Atom packages can load cson grammars and TextMate packages can't

This commit is contained in:
Corey Johnson & Nathan Sobo
2013-03-21 13:25:52 -07:00
parent 1929899365
commit 0b719bfecf
20 changed files with 67 additions and 60 deletions

View File

@@ -1,3 +1,4 @@
TextMateGrammar = require 'text-mate-grammar'
Package = require 'package'
fs = require 'fs-utils'
_ = require 'underscore'
@@ -15,6 +16,7 @@ class AtomPackage extends Package
@loadMetadata()
@loadKeymaps()
@loadStylesheets()
@loadGrammars()
if @deferActivation = @metadata.activationEvents?
@registerDeferredDeserializers()
else
@@ -43,6 +45,20 @@ class AtomPackage extends Package
for stylesheetPath in fs.list(stylesheetDirPath)
requireStylesheet(stylesheetPath)
loadGrammars: ->
grammarsDirPath = fs.join(@path, 'grammars')
for grammarPath in fs.list(grammarsDirPath)
continue unless fs.extension(grammarPath) in ['.cson', '.json']
grammarContent = fs.readObject(grammarPath)
grammar = new TextMateGrammar(grammarContent)
syntax.addGrammar(grammar)
@loadPropertiesFromGrammar(grammarContent.scopeName, grammarContent.properties)
loadPropertiesFromGrammar: (scopeSelector, properties) ->
return unless properties
cssSelector = syntax.cssSelectorFromScopeSelector(scopeSelector)
syntax.addProperties(cssSelector, properties)
activate: ->
if @deferActivation
@subscribeToActivationEvents()

View File

@@ -125,4 +125,13 @@ class Syntax
else
element[0]
cssSelectorFromScopeSelector: (scopeSelector) ->
scopeSelector.split(', ').map((commaFragment) ->
commaFragment.split(' ').map((spaceFragment) ->
spaceFragment.split('.').map((dotFragment) ->
'.' + dotFragment.replace(/\+/g, '\\+')
).join('')
).join(' ')
).join(', ')
_.extend(Syntax.prototype, EventEmitter)

View File

@@ -8,7 +8,7 @@ CSON = require 'cson'
module.exports =
class TextMateGrammar
@readFromPath: (path) ->
fs.readObject(path)
fs.readPlist(path)
name: null
fileTypes: null

View File

@@ -10,15 +10,6 @@ class TextMatePackage extends Package
@testName: (packageName) ->
/(\.|_|-)tmbundle$/.test(packageName)
@cssSelectorFromScopeSelector: (scopeSelector) ->
scopeSelector.split(', ').map((commaFragment) ->
commaFragment.split(' ').map((spaceFragment) ->
spaceFragment.split('.').map((dotFragment) ->
'.' + dotFragment.replace(/\+/g, '\\+')
).join('')
).join(' ')
).join(', ')
constructor: ->
super
@preferencesPath = fs.join(@path, "Preferences")
@@ -66,12 +57,12 @@ class TextMatePackage extends Package
for grammar in @getGrammars()
if properties = @propertiesFromTextMateSettings(grammar)
selector = @cssSelectorFromScopeSelector(grammar.scopeName)
selector = syntax.cssSelectorFromScopeSelector(grammar.scopeName)
scopedProperties.push({selector, properties})
for {scope, settings} in @getTextMatePreferenceObjects()
if properties = @propertiesFromTextMateSettings(settings)
selector = @cssSelectorFromScopeSelector(scope) if scope?
selector = syntax.cssSelectorFromScopeSelector(scope) if scope?
scopedProperties.push({selector, properties})
scopedProperties
@@ -101,6 +92,3 @@ class TextMatePackage extends Package
foldEndPattern: textMateSettings.foldingStopMarker
)
{ editor: editorProperties } if _.size(editorProperties) > 0
cssSelectorFromScopeSelector: (scopeSelector) ->
@constructor.cssSelectorFromScopeSelector(scopeSelector)