module Docks::Languages

Public Class Methods

<<(language) click to toggle source
# File lib/docks/languages.rb, line 35
def self.<<(language)
  register(language)
end
extension_for_file(file) click to toggle source
# File lib/docks/languages.rb, line 73
def self.extension_for_file(file)
  file.to_s.split(".").last
end
extensions() click to toggle source
# File lib/docks/languages.rb, line 39
def self.extensions
  @extensions.values.inject([]) { |all, all_of_type| all.concat(all_of_type.to_a) }
end
file_type(file) click to toggle source
# File lib/docks/languages.rb, line 55
def self.file_type(file)
  extension = extension_for_file(file)
  type = nil

  @extensions.each do |extensions_type, the_extensions|
    if the_extensions.include?(extension)
      type = extensions_type
      break
    end
  end

  type
end
language_for(file) click to toggle source
# File lib/docks/languages.rb, line 15
def self.language_for(file)
  language = @languages[extension_for_file(file)]
  language.nil? ? nil : language.instance
end
most_common_markup_language() click to toggle source
# File lib/docks/languages.rb, line 48
def self.most_common_markup_language
  markup_files = Grouper.source_files_of_type(Types::Languages::MARKUP)
  return if markup_files.empty?
  most_common = markup_files.map { |file| extension_for_file(file) }.group_by { |ext| ext }.values.max_by(&:size).first
  language_for(most_common)
end
register(language) click to toggle source
# File lib/docks/languages.rb, line 24
def self.register(language)
  Array(language.extensions).each do |extension|
    @extensions[language.type].add(extension)
    @languages[extension] = language
  end

  Array(language.symbol_sources).each do |source|
    SymbolSources.register(source)
  end
end
register_bundled_languages() click to toggle source
# File lib/docks/languages.rb, line 20
def self.register_bundled_languages
  bundled_languages.each { |language| register(language) }
end
supported_file?(file) click to toggle source
# File lib/docks/languages.rb, line 69
def self.supported_file?(file)
  extensions.include?(extension_for_file(file))
end

Private Class Methods

bundled_languages() click to toggle source
# File lib/docks/languages.rb, line 79
def self.bundled_languages
  if @bundled_languages.nil?
    bundled = constants.select do |const|
      klass = const_get(const)
      Class === klass && !(klass.eql?(Base))
    end

    @bundled_languages = bundled.map { |const| const_get(const) }
  end

  @bundled_languages
end
clean() click to toggle source
# File lib/docks/languages.rb, line 92
def self.clean
  @languages = Hash.new
  @bundled_languages = nil
  @extensions = Types::Languages.constants.inject(Hash.new) do |exts, const|
    exts[Types::Languages.const_get(const)] = Set.new
    exts
  end
end