support CWEB (literate programming for C)
[ohcount] / lib / ohcount / sloc_info.rb
1 # A generic data object for returning parsing results from Ohcount to Ohloh.
2 #
3 # This class has the additional job of declaring a "nice" (human readable) name
4 # for each language, as well as the category (procedural code vs. markup) for each
5 # language. These features should probably live elsewhere, and are currently
6 # not covered by unit tests.
7 class Ohcount::SlocInfo
8         attr_reader :language
9         attr_accessor :code_added, :code_removed, :comments_added, :comments_removed, :blanks_added, :blanks_removed
10
11         def initialize(language)
12                 raise ArgumentError.new('language can not be nil') unless language
13                 @language = language
14                 @code_added       = 0
15                 @code_removed     = 0
16                 @comments_added   = 0
17                 @comments_removed = 0
18                 @blanks_added     = 0
19                 @blanks_removed   = 0
20         end
21
22         def ==(b)
23                 @language         == b.language &&
24                 @code_added       == b.code_added &&
25                 @code_removed     == b.code_removed &&
26                 @comments_added   == b.comments_added &&
27                 @comments_removed == b.comments_removed &&
28                 @blanks_added     == b.blanks_added &&
29                 @blanks_removed   == b.blanks_removed
30         end
31
32         def empty?
33                 if (@code_added       == 0 && @code_removed     == 0 &&
34                           @comments_added   == 0 && @comments_removed == 0 &&
35                           @blanks_added     == 0 && @blanks_removed   == 0)
36                         return true
37                 end
38                 return false
39         end
40
41         @@lang_map = {
42                         'ada'           => {:nice_name => 'Ada'              , :category => 0},
43                         'assembler'     => {:nice_name => 'Assembler'        , :category => 0},
44                         'awk'           => {:nice_name => 'AWK'              , :category => 0},
45                         'bat'           => {:nice_name => 'DOS batch script' , :category => 0},
46                         'boo'           => {:nice_name => 'Boo'              , :category => 0},
47                         'c'             => {:nice_name => 'C'                , :category => 0},
48                         'cpp'           => {:nice_name => 'C++'              , :category => 0},
49                         'c_web'         => {:nice_name => 'CWEB'             , :category => 0},
50                         'clearsilver'   => {:nice_name => 'ClearSilver'      , :category => 0},
51                         'csharp'        => {:nice_name => 'C#'               , :category => 0},
52                         'css'           => {:nice_name => 'CSS'              , :category => 1},
53                         'dcl'           => {:nice_name => 'DCL'              , :category => 0},
54                         'dylan'         => {:nice_name => 'Dylan'            , :category => 0},
55                         'documentation' => {:nice_name => 'Documentation'    , :category => 1},
56                         'emacslisp'     => {:nice_name => 'Emacs Lisp'       , :category => 0},
57                         'erlang'        => {:nice_name => 'Erlang'           , :category => 0},
58                         'fortranfixed'  => {:nice_name => 'Fortran (Fixed-format)', :category => 0},
59                         'fortranfree'   => {:nice_name => 'Fortran (Free-format)',  :category => 0},
60                         'groovy'        => {:nice_name => 'Groovy'           , :category => 0},
61                         'html'          => {:nice_name => 'HTML'             , :category => 1},
62                         'java'          => {:nice_name => 'Java'             , :category => 0},
63                         'javascript'    => {:nice_name => 'JavaScript'       , :category => 0},
64                         'knuth_web'     => {:nice_name => 'WEB (Pascal)'     , :category => 0},
65                         'lisp'          => {:nice_name => 'Lisp'             , :category => 0},
66                         'lua'           => {:nice_name => 'Lua'              , :category => 0},
67                         'matlab'        => {:nice_name => 'Matlab'           , :category => 0},
68                         'metafont'      => {:nice_name => 'MetaFont'         , :category => 1},
69                         'metapost'      => {:nice_name => 'MetaPost'         , :category => 1},
70                         'objective_c'   => {:nice_name => 'Objective C'      , :category => 0},
71                         'pascal'        => {:nice_name => 'Pascal'           , :category => 0},
72                         'perl'          => {:nice_name => 'Perl'             , :category => 0},
73                         'php'           => {:nice_name => 'PHP'              , :category => 0},
74                         'pike'          => {:nice_name => 'Pike'             , :category => 0},
75                         'python'        => {:nice_name => 'Python'           , :category => 0},
76                         'rexx'          => {:nice_name => 'rexx'             , :category => 0},
77                         'ruby'          => {:nice_name => 'Ruby'             , :category => 0},
78                         'scheme'        => {:nice_name => 'Scheme'           , :category => 0},
79                         'shell'         => {:nice_name => 'shell script'     , :category => 0},
80                         'smalltalk'     => {:nice_name => 'Smalltalk'        , :category => 0},
81                         'sql'           => {:nice_name => 'SQL'              , :category => 0},
82                         'tcl'           => {:nice_name => 'Tcl'              , :category => 0},
83                         'vala'          => {:nice_name => 'Vala'             , :category => 0},
84                         'visualbasic'   => {:nice_name => 'Visual Basic'     , :category => 0},
85                         'xml'           => {:nice_name => 'XML'              , :category => 1},
86                         'xmlschema'     => {:nice_name => 'XML Schema'       , :category => 1},
87                         'xslt'          => {:nice_name => 'XSL Transformation',:category => 0},
88                         'dmd'           => {:nice_name => 'D'                , :category => 0},
89                         'tex'           => {:nice_name => 'TeX/LaTeX'        , :category => 1},
90                         'haskell'       => {:nice_name => 'Haskell'          , :category => 0}
91         }
92
93         # Returns the human readable name for a language.
94         def language_nice_name
95                 @@lang_map[self.language][:nice_name]
96         end
97
98         # Returns the category (procedural code vs. markup) for a language.
99         #
100         # Category 0 indicates procedural code (most languages).
101         # Category 1 indicates a markup file, such as XML.
102         def language_category
103                 @@lang_map[self.language][:category]
104         end
105
106 end