Class: Milkode::PlangDetector

Inherits:
Object
  • Object
show all
Defined in:
lib/milkode/common/plang_detector.rb

Constant Summary collapse

LANGUAGES =
[
 # high priority
 { :name => 'README'        , :filepatterns  => ['README', 'readme']                              },

 # normal priority
 { :name => 'ActionScript'  , :suffixs   => ['as']                                                },
 { :name => 'Autotools'     , :suffixs   => ['am', 'in']                                          },
 { :name => 'AWK'           , :suffixs   => ['awk']                                               },
 { :name => 'Batch File'    , :suffixs   => ['bat']                                               },
 { :name => 'Bundler'       , :filenames => ['Gemfile', 'Gemfile.lock']                           },
 { :name => 'C'             , :suffixs   => ['c', 'h']                                            },
 { :name => 'C#'            , :suffixs   => ['cs']                                                },
 { :name => 'C++'           , :suffixs   => ['cc', 'cpp', 'hpp']                                  },
 { :name => 'CGI'           , :suffixs   => ['cgi']                                               },
 { :name => 'ChangeLog'     , :filenames => ['ChangeLog']                                         },
 { :name => 'Common Lisp'   , :suffixs   => ['cl']                                                },
 { :name => 'CSS'           , :suffixs   => ['css']                                               },
 { :name => 'CSV'           , :suffixs   => ['csv']                                               },
 { :name => 'Diff'          , :suffixs   => ['diff']                                              },
 { :name => 'Emacs Lisp'    , :suffixs   => ['el']                                                },
 { :name => 'Erlang'        , :suffixs   => ['erl']                                               },
 { :name => 'eRuby'         , :suffixs   => ['erb', 'rhtml']                                      },
 { :name => 'gitignore'     , :filenames => ['.gitignore']                                        },
 { :name => 'Haml'          , :suffixs   => ['haml']                                              },
 { :name => 'Haskell'       , :suffixs   => ['hs']                                                },
 { :name => 'HTML'          , :suffixs   => ['html']                                              },
 { :name => 'Java'          , :suffixs   => ['java']                                              },
 { :name => 'JavaScript'    , :suffixs   => ['js']                                                },
 { :name => 'JSON'          , :suffixs   => ['json']                                              },
 { :name => 'Lua'           , :suffixs   => ['lua']                                               },
 { :name => 'Makefile'      , :suffixs   => ['mk']       , :filenames => ['Makefile', 'makefile'] },
 { :name => 'Markdown'      , :suffixs   => ['md', 'markdown']                                    },
 { :name => 'M4'            , :suffixs   => ['m4']                                                },
 { :name => 'Objective-C'   , :suffixs   => ['m', 'mm']                                           },
 { :name => 'PEM'           , :suffixs   => ['pem']                                               },
 { :name => 'Perl'          , :suffixs   => ['pl', 'PL', 'pm', 't']                               },
 { :name => 'POD'           , :suffixs   => ['pod']                                               },
 { :name => 'PHP'           , :suffixs   => ['php']                                               },
 { :name => 'Python'        , :suffixs   => ['py']                                                },
 { :name => 'Rackup'        , :suffixs   => ['ru']                                                },
 { :name => 'Rakefile'      , :suffixs   => ['rake']     , :filenames => ['Rakefile']             },
 { :name => 'RD'            , :suffixs   => ['rd']       , :filepatterns => [/rd.ja\Z/]           },
 { :name => 'RDoc'          , :suffixs   => ['rdoc']                                              },
 { :name => 'Ruby'          , :suffixs   => ['rb']                                                },
 { :name => 'RubyGems'      , :suffixs   => ['gemspec']                                           },
 { :name => 'Scheme'        , :suffixs   => ['scm']                                               },
 { :name => 'sed'           , :suffixs   => ['sed']                                               },
 { :name => 'Shell'         , :suffixs   => ['sh']                                                },
 { :name => 'SVG'           , :suffixs   => ['svg']                                               },
 { :name => 'Tcl'           , :suffixs   => ['tcl']                                               },
 { :name => 'Text'          , :suffixs   => ['txt']                                               },
 { :name => 'Visual Studio' , :suffixs   => ['csproj', 'vbproj', 'sln']                           },
 { :name => 'XML'           , :suffixs   => ['xml']                                               },
 { :name => 'Yaml'          , :suffixs   => ['yml', 'yaml']                                       },
 # { :name => ''              , :suffixs   => []          , :filenames => [] },
]
UNKNOWN =
'unknown'
UNKNOWN_LANGUAGE =
{:name => UNKNOWN}

Instance Method Summary collapse

Constructor Details

#initialize(filename) ⇒ PlangDetector

Returns a new instance of PlangDetector.



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/milkode/common/plang_detector.rb', line 71

def initialize(filename)
  suffix = File.extname(filename)
  suffix = suffix[1..-1]

  filename = File.basename(filename)

  @lang = LANGUAGES.find {|v|
    is_found = false

    if v[:suffixs]
      is_found = v[:suffixs].include?(suffix)
    end
    
    if !is_found && v[:filenames]
      is_found = v[:filenames].include?(filename)
    end

    if !is_found && v[:filepatterns]
      v[:filepatterns].each do |pattern|
        if filename.match pattern
          is_found = true
          break
        end
      end
    end

    is_found
  }

  if @lang.nil?
    if suffix
      @lang = {:name => "." + suffix, :suffixs => [suffix]}
    else
      @lang = UNKNOWN_LANGUAGE
    end
  end
end

Instance Method Details

#filenamesObject



117
118
119
# File 'lib/milkode/common/plang_detector.rb', line 117

def filenames
  @lang[:filenames]
end

#filepatternsObject



121
122
123
# File 'lib/milkode/common/plang_detector.rb', line 121

def filepatterns
  @lang[:filepatterns]
end

#nameObject



109
110
111
# File 'lib/milkode/common/plang_detector.rb', line 109

def name
  @lang[:name]
end

#suffixsObject



113
114
115
# File 'lib/milkode/common/plang_detector.rb', line 113

def suffixs
  @lang[:suffixs]
end

#unknown?Boolean

Returns:

  • (Boolean)


125
126
127
# File 'lib/milkode/common/plang_detector.rb', line 125

def unknown?
  name == UNKNOWN
end