Sha256: 0a92d1c33dba1f1903e5d554c06178800eb6294654abd0b6fec51eb238bb0b15
Contents?: true
Size: 1.27 KB
Versions: 7
Compression:
Stored size: 1.27 KB
Contents
# frozen_string_literal: true require_relative 'lexers_db' module Snibbets # Lexer definitions module Lexers class << self def lexers @lexers ||= build_lexers end def build_lexers lex = [] LEXERS_DB.split(/\n/).each do |line| key = line.match(/(?mi)^((, )?[^,]+?)+?(?=\[)/)[0] keys = key.split(/,/).map(&:strip) value = line.match(/\[(.*?)\]/)[1] values = value.split(/,/).map(&:strip) lex << { lexer: keys.shift, aliases: keys, extensions: values } end lex end def ext_to_lang(ext) return nil if ext.nil? matches = lexers.select { |lex| lex[:extensions].map(&:downcase).include?(ext.downcase) } matches.map { |lex| lex[:lexer] }.first || ext end def lang_to_ext(lexer) return nil if lexer.nil? matches = lexers.select { |lex| lex[:lexer] == lexer || lex[:aliases].map(&:downcase).include?(lexer.downcase) } matches.map { |lex| lex[:extensions].first }.first || lexer end def syntax_from_extension(filename) exts = filename.split(/\./)[1..-2] return nil if exts.count.zero? ext_to_lang(exts[-1]) end end end end
Version data entries
7 entries across 7 versions & 1 rubygems