mirror of
https://github.com/atom/atom.git
synced 2026-02-10 14:45:11 -05:00
Atom packages can load cson grammars and TextMate packages can't
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -8,7 +8,7 @@ CSON = require 'cson'
|
||||
module.exports =
|
||||
class TextMateGrammar
|
||||
@readFromPath: (path) ->
|
||||
fs.readObject(path)
|
||||
fs.readPlist(path)
|
||||
|
||||
name: null
|
||||
fileTypes: null
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user