Sha256: c97005baa034170be57b1aea35c6050649d4b51342eca703f2a481853c9dabdf

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 KB

Contents

module Murdoc
  module Languages
    # Base language module
    #
    # Any new language module should inherit from Base, redefine .extensions
    # and .comment_symbols methods, if needed, and add itself to Languages.map
    # map.
    class Base
      def self.applies_for?(filename)
        if extensions.include?(File.extname(filename).sub(/^\./, ''))
          true
        else
          false
        end
      end

      def self.annotation_only?
        false
      end

      def self.extensions
        []
      end

      def self.comment_symbols
        {
          single_line: nil,
          multiline: nil
        }
      end

      def self.name
        super.sub(/^(.*::)?([^:]+)$/, '\\2').
              gsub(/([a-z])([A-Z])/, '\\1_\\2').
              downcase.to_sym
      end
    end

    def self.map
      @map ||= {}
    end

    def self.list
      map.values
    end

    def self.get(name)
      map.fetch(name, Base)
    end

    def self.detect(filename)
      name, lang = map.detect {|name, lang| lang.applies_for?(filename) }
      name
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
murdoc-0.2.1 lib/murdoc/languages/base.rb
murdoc-0.2.0 lib/murdoc/languages/base.rb