[](name)
click to toggle source
Public: Look up Language by its name or lexer.
name - The String name of the Language
Examples
Language['Ruby']
# => #<Language name="Ruby">
Language['ruby']
# => #<Language name="Ruby">
Returns the Language or nil if none was found.
def self.[](name)
@index[name]
end
ace_modes()
click to toggle source
Public: A List of languages compatible with Ace.
Returns an Array of Languages.
def self.ace_modes
@ace_modes ||= all.select(&:ace_mode).sort_by { |lang| lang.name.downcase }
end
all()
click to toggle source
Public: Get all Languages
Returns an Array of Languages
def self.all
@languages
end
by_type(type)
click to toggle source
Detect languages by a specific type
type - A symbol that exists within TYPES
Returns an array
def self.by_type(type)
all.select { |h| h.type == type }
end
colors()
click to toggle source
Public: A List of languages with assigned colors.
Returns an Array of Languages.
def self.colors
@colors ||= all.select(&:color).sort_by { |lang| lang.name.downcase }
end
create(attributes = {})
click to toggle source
Internal: Create a new Language object
attributes - A hash of attributes
Returns a Language object
def self.create(attributes = {})
language = new(attributes)
@languages << language
if @name_index.key?(language.name)
raise ArgumentError, "Duplicate language name: #{language.name}"
end
@index[language.name] = @name_index[language.name] = language
language.aliases.each do |name|
if @alias_index.key?(name)
raise ArgumentError, "Duplicate alias: #{name}"
end
@index[name] = @alias_index[name] = language
end
language.extensions.each do |extension|
if extension !~ /^\./
raise ArgumentError, "Extension is missing a '.': #{extension.inspect}"
end
@extension_index[extension] << language
end
language.interpreters.each do |interpreter|
@interpreter_index[interpreter] << language
end
language.filenames.each do |filename|
@filename_index[filename] << language
end
language
end
detect(blob)
click to toggle source
Public: Detects the Language of the blob.
blob - an object that includes the Linguist
`BlobHelper` interface;
see Linguist::LazyBlob and Linguist::FileBlob for examples
Returns Language or nil.
def self.detect(blob)
name = blob.name.to_s
return nil if blob.likely_binary? || blob.binary?
extension = FileBlob.new(name).extension
if extension.empty? && blob.mode && (blob.mode.to_i(8) & 05) == 05
name += ".script!"
end
possible_languages = find_by_filename(name)
if possible_languages.length > 1
data = blob.data
possible_language_names = possible_languages.map(&:name)
if data.nil? || data == ""
nil
elsif (result = find_by_shebang(data)) && !result.empty?
result.first
elsif (determined = Heuristics.find_by_heuristics(data, possible_language_names)) && !determined.empty?
determined.first
elsif classified = Classifier.classify(Samples::DATA, data, possible_language_names ).first
Language[classified[0]]
end
else
possible_languages.first
end
end
detectable_markup()
click to toggle source
Names of non-programming languages that we will still detect
Returns an array
def self.detectable_markup
["CSS", "Less", "Sass", "SCSS", "Stylus", "TeX"]
end
find_by_alias(name)
click to toggle source
Public: Look up Language by one of its aliases.
name - A String alias of the Language
Examples
Language.find_by_alias('cpp')
# => #<Language name="C++">
Returns the Lexer or nil if none was found.
def self.find_by_alias(name)
@alias_index[name]
end
find_by_filename(filename)
click to toggle source
Public: Look up Languages by filename.
filename - The path String.
Examples
Language.find_by_filename('foo.rb')
# => [#<Language name="Ruby">]
Returns all matching Languages or [] if none were found.
def self.find_by_filename(filename)
basename = File.basename(filename)
extname = FileBlob.new(filename).extension
langs = @filename_index[basename] +
@extension_index[extname]
langs.compact.uniq
end
find_by_name(name)
click to toggle source
Public: Look up Language by its proper name.
name - The String name of the Language
Examples
Language.find_by_name('Ruby')
# => #<Language name="Ruby">
Returns the Language or nil if none was found.
def self.find_by_name(name)
@name_index[name]
end
find_by_shebang(data)
click to toggle source
Public: Look up Languages by shebang line.
data - Array of tokens or String data to analyze.
Examples
Language.find_by_shebang("#!/bin/bash\ndate;")
# => [#<Language name="Bash">]
Returns the matching Language
def self.find_by_shebang(data)
@interpreter_index[Linguist.interpreter_from_shebang(data)]
end
new(attributes = {})
click to toggle source
Internal: Initialize a new Language
attributes - A hash of attributes
def initialize(attributes = {})
@name = attributes[:name] || raise(ArgumentError, "missing name")
@type = attributes[:type] ? attributes[:type].to_sym : nil
if @type && !TYPES.include?(@type)
raise ArgumentError, "invalid type: #{@type}"
end
@color = attributes[:color]
@aliases = [default_alias_name] + (attributes[:aliases] || [])
@lexer = Pygments::Lexer.find_by_name(attributes[:lexer] || name) ||
raise(ArgumentError, "#{@name} is missing lexer")
@ace_mode = attributes[:ace_mode]
@wrap = attributes[:wrap] || false
@search_term = attributes[:search_term] || default_alias_name
@extensions = attributes[:extensions] || []
@interpreters = attributes[:interpreters] || []
@filenames = attributes[:filenames] || []
@popular = attributes.key?(:popular) ? attributes[:popular] : false
@searchable = attributes.key?(:searchable) ? attributes[:searchable] : true
if attributes[:group_name]
@group = nil
@group_name = attributes[:group_name]
else
@group = self
end
end
popular()
click to toggle source
Public: A List of popular languages
Popular languages are sorted to the top of language chooser dropdowns.
This list is configured in “popular.yml”.
Returns an Array of Lexers.
def self.popular
@popular ||= all.select(&:popular?).sort_by { |lang| lang.name.downcase }
end
unpopular()
click to toggle source
Public: A List of non-popular languages
Unpopular languages appear below popular ones in language chooser
dropdowns.
This list is created from all the languages not listed in “popular.yml”.
Returns an Array of Lexers.
def self.unpopular
@unpopular ||= all.select(&:unpopular?).sort_by { |lang| lang.name.downcase }
end
==(other)
click to toggle source
def ==(other)
eql?(other)
end
all_extensions()
click to toggle source
Public: Return all possible extensions for language
def all_extensions
(extensions + [primary_extension]).uniq
end
colorize(text, options = {})
click to toggle source
Public: Highlight syntax of text
text - String of code to be highlighted options - A Hash of options
(defaults to {})
Returns html String
def colorize(text, options = {})
lexer.highlight(text, options)
end
default_alias_name()
click to toggle source
Internal: Get default alias name
Returns the alias name String
def default_alias_name
name.downcase.gsub(/\s/, '-')
end
eql?(other)
click to toggle source
def eql?(other)
equal?(other)
end
escaped_name()
click to toggle source
Public: Get URL escaped name.
Examples
"C%23"
"C%2B%2B"
"Common%20Lisp"
Returns the escaped String.
def escaped_name
EscapeUtils.escape_url(name).gsub('+', '%20')
end
group()
click to toggle source
Public: Get Language group
Returns a Language
def group
@group ||= Language.find_by_name(@group_name)
end
hash()
click to toggle source
inspect()
click to toggle source
def inspect
"#<#{self.class} name=#{name}>"
end
popular?()
click to toggle source
Public: Is it popular?
Returns true or false
def popular?
@popular
end
primary_extension()
click to toggle source
Deprecated: Get primary extension
Defaults to the first extension but can be overridden in the languages.yml.
The primary extension can not be nil. Tests should verify this.
This method is only used by app/helpers/gists_helper.rb for creating the
language dropdown. It really should be using `name` instead. Would like to
drop primary extension.
Returns the extension String.
def primary_extension
extensions.first
end
searchable?()
click to toggle source
Public: Is it searchable?
Unsearchable languages won’t by indexed by solr and won’t show up in the
code search dropdown.
Returns true or false
def searchable?
@searchable
end
to_s()
click to toggle source
Public: Return name as String representation
unpopular?()
click to toggle source
Public: Is it not popular?
Returns true or false
def unpopular?
!popular?
end