mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 15:37:46 +03:00
Remove TextMatePackage
This commit is contained in:
parent
31480f92ce
commit
fa376d9543
@ -4,21 +4,17 @@ CSON = require 'season'
|
||||
module.exports =
|
||||
class Package
|
||||
@build: (path) ->
|
||||
TextMatePackage = require './text-mate-package'
|
||||
AtomPackage = require './atom-package'
|
||||
ThemePackage = require './theme-package'
|
||||
|
||||
if TextMatePackage.testName(path)
|
||||
pack = new TextMatePackage(path)
|
||||
else
|
||||
try
|
||||
metadata = @loadMetadata(path)
|
||||
if metadata.theme
|
||||
pack = new ThemePackage(path, {metadata})
|
||||
else
|
||||
pack = new AtomPackage(path, {metadata})
|
||||
catch e
|
||||
console.warn "Failed to load package.json '#{basename(path)}'", e.stack ? e
|
||||
try
|
||||
metadata = @loadMetadata(path)
|
||||
if metadata.theme
|
||||
pack = new ThemePackage(path, {metadata})
|
||||
else
|
||||
pack = new AtomPackage(path, {metadata})
|
||||
catch e
|
||||
console.warn "Failed to load package.json '#{basename(path)}'", e.stack ? e
|
||||
|
||||
pack
|
||||
|
||||
|
@ -1,135 +0,0 @@
|
||||
Package = require './package'
|
||||
path = require 'path'
|
||||
_ = require 'underscore-plus'
|
||||
fs = require 'fs-plus'
|
||||
Q = require 'q'
|
||||
|
||||
module.exports =
|
||||
class TextMatePackage extends Package
|
||||
@testName: (packageName) ->
|
||||
packageName = path.basename(packageName)
|
||||
/(^language-.+)|((\.|_|-)tmbundle$)/.test(packageName)
|
||||
|
||||
@addToActivationPromise = (pack) ->
|
||||
@activationPromise ?= Q()
|
||||
@activationPromise = @activationPromise.then =>
|
||||
pack.loadGrammars()
|
||||
.then -> pack.loadScopedProperties()
|
||||
.fail (error) -> console.log pack.name, error.stack ? error
|
||||
|
||||
constructor: ->
|
||||
super
|
||||
@grammars = []
|
||||
@scopedProperties = []
|
||||
@metadata = {@name}
|
||||
|
||||
getType: -> 'textmate'
|
||||
|
||||
load: ->
|
||||
@measure 'loadTime', =>
|
||||
@metadata = Package.loadMetadata(@path, true)
|
||||
|
||||
activate: ->
|
||||
@measure 'activateTime', =>
|
||||
TextMatePackage.addToActivationPromise(this)
|
||||
|
||||
activateConfig: -> # noop
|
||||
|
||||
deactivate: ->
|
||||
grammar.deactivate() for grammar in @grammars
|
||||
atom.syntax.removeProperties(@path)
|
||||
|
||||
loadGrammars: ->
|
||||
deferred = Q.defer()
|
||||
fs.isDirectory @getSyntaxesPath(), (isDirectory) =>
|
||||
return deferred.resolve() unless isDirectory
|
||||
|
||||
fs.list @getSyntaxesPath(), ['json', 'cson'], (error, paths) =>
|
||||
if error?
|
||||
console.log("Error loading grammars of TextMate package '#{@path}':", error.stack, error)
|
||||
deferred.resolve()
|
||||
else
|
||||
promises = paths.map (path) => @loadGrammarAtPath(path)
|
||||
Q.all(promises).then -> deferred.resolve()
|
||||
|
||||
deferred.promise
|
||||
|
||||
loadGrammarAtPath: (grammarPath) ->
|
||||
deferred = Q.defer()
|
||||
atom.syntax.readGrammar grammarPath, (error, grammar) =>
|
||||
if error?
|
||||
console.log("Error loading grammar at path '#{grammarPath}':", error.stack ? error)
|
||||
else
|
||||
@addGrammar(grammar)
|
||||
deferred.resolve()
|
||||
|
||||
deferred.promise
|
||||
|
||||
addGrammar: (grammar) ->
|
||||
@grammars.push(grammar)
|
||||
grammar.activate()
|
||||
|
||||
getGrammars: -> @grammars
|
||||
|
||||
getSyntaxesPath: ->
|
||||
path.join(@path, "syntaxes")
|
||||
|
||||
getPreferencesPath: ->
|
||||
path.join(@path, "preferences")
|
||||
|
||||
loadScopedProperties: ->
|
||||
scopedProperties = []
|
||||
|
||||
for grammar in @getGrammars()
|
||||
if properties = @propertiesFromTextMateSettings(grammar)
|
||||
selector = atom.syntax.cssSelectorFromScopeSelector(grammar.scopeName)
|
||||
scopedProperties.push({selector, properties})
|
||||
|
||||
@loadTextMatePreferenceObjects().then (preferenceObjects=[]) =>
|
||||
for {scope, settings} in preferenceObjects
|
||||
if properties = @propertiesFromTextMateSettings(settings)
|
||||
selector = atom.syntax.cssSelectorFromScopeSelector(scope) if scope?
|
||||
scopedProperties.push({selector, properties})
|
||||
|
||||
@scopedProperties = scopedProperties
|
||||
for {selector, properties} in @scopedProperties
|
||||
atom.syntax.addProperties(@path, selector, properties)
|
||||
|
||||
loadTextMatePreferenceObjects: ->
|
||||
deferred = Q.defer()
|
||||
fs.isDirectory @getPreferencesPath(), (isDirectory) =>
|
||||
return deferred.resolve() unless isDirectory
|
||||
fs.list @getPreferencesPath(), (error, paths) =>
|
||||
if error?
|
||||
console.log("Error loading preferences of TextMate package '#{@path}':", error.stack, error)
|
||||
deferred.resolve()
|
||||
else
|
||||
promises = paths.map (path) => @loadPreferencesAtPath(path)
|
||||
Q.all(promises).then (preferenceObjects) -> deferred.resolve(preferenceObjects)
|
||||
|
||||
deferred.promise
|
||||
|
||||
loadPreferencesAtPath: (preferencePath) ->
|
||||
deferred = Q.defer()
|
||||
fs.readObject preferencePath, (error, preference) ->
|
||||
if error?
|
||||
console.warn("Failed to parse preference at path '#{preferencePath}'", error.stack, error)
|
||||
deferred.resolve(preference)
|
||||
deferred.promise
|
||||
|
||||
propertiesFromTextMateSettings: (textMateSettings) ->
|
||||
if textMateSettings.shellVariables
|
||||
shellVariables = {}
|
||||
for {name, value} in textMateSettings.shellVariables
|
||||
shellVariables[name] = value
|
||||
textMateSettings.shellVariables = shellVariables
|
||||
|
||||
editorProperties = _.compactObject(
|
||||
commentStart: _.valueForKeyPath(textMateSettings, 'shellVariables.TM_COMMENT_START')
|
||||
commentEnd: _.valueForKeyPath(textMateSettings, 'shellVariables.TM_COMMENT_END')
|
||||
increaseIndentPattern: textMateSettings.increaseIndentPattern
|
||||
decreaseIndentPattern: textMateSettings.decreaseIndentPattern
|
||||
foldEndPattern: textMateSettings.foldingStopMarker
|
||||
completions: textMateSettings.completions
|
||||
)
|
||||
{ editor: editorProperties } if _.size(editorProperties) > 0
|
Loading…
Reference in New Issue
Block a user