class Pygments::LexerCache

Attributes

alias_index[R]

@return [Map<String, Lexer]

extname_index[R]

@return [Map<String, Lexer>]

index[R]

@return [Map<String, Lexer>]

lexers[R]

@return [Array<Lexer>]

mimetypes_index[R]

@return [Map<String, Lexer>]

name_index[R]

@return [Map<String, Lexer>]

raw_lexers[R]

Public Class Methods

new() click to toggle source
# File lib/pygments/lexer.rb, line 127
def initialize
  @lexers = []
  @index = {}
  @name_index = {}
  @alias_index = {}
  @extname_index = {}
  @mimetypes_index = {}
  @raw_lexers = Pygments.lexers!

  @raw_lexers.each_value do |hash|
    lexer = Lexer.new(hash[:name], hash[:aliases], hash[:filenames], hash[:mimetypes])

    @lexers << lexer

    @index[lexer.name.downcase] = @name_index[lexer.name] = lexer

    lexer.aliases.each do |name|
      @alias_index[name] = lexer
      @index[name.downcase] ||= lexer
    end

    lexer.filenames.each do |filename|
      extnames = []

      extname = File.extname(filename)
      if (m = extname.match(/\[(.+)\]/))
        m[1].scan(/./).each do |s|
          extnames << extname.sub(m[0], s)
        end
      elsif extname != ''
        extnames << extname
      end

      extnames.each do |the_extname|
        @extname_index[the_extname] = lexer
        @index[the_extname.downcase.sub(/^\./, '')] ||= lexer
      end
    end

    lexer.mimetypes.each do |type|
      @mimetypes_index[type] = lexer
    end
  end
end