App-cloc
view release on metacpan or search on metacpan
'CMake' => '\\\\$' ,
'Cython' => '\\\\$' ,
'C#' => '\\\\$' ,
'D' => '\\\\$' ,
'Dart' => '\\\\$' ,
'Expect' => '\\\\$' ,
'Gencat NLS' => '\\\\$' ,
'Go' => '\\\\$' ,
'IDL' => '\$\\$' ,
'Java' => '\\\\$' ,
'JavaScript' => '\\\\$' ,
'JSX' => '\\\\$' ,
'LESS' => '\\\\$' ,
'Lua' => '\\\\$' ,
'make' => '\\\\$' ,
'MATLAB' => '\.\.\.\s*$' ,
'MXML' => '\\\\$' ,
'Objective C' => '\\\\$' ,
'Objective C++' => '\\\\$' ,
'OCaml' => '\\\\$' ,
'Octave' => '\.\.\.\s*$' ,
'Qt Project' => '\\\\$' ,
'Patran Command Language'=> '\\\\$' ,
'PowerBuilder' => '\\\\$' ,
'PowerShell' => '\\\\$' ,
'Python' => '\\\\$' ,
'R' => '\\\\$' ,
'Ruby' => '\\\\$' ,
'sed' => '\\\\$' ,
'Swift' => '\\\\$' ,
'Bourne Again Shell' => '\\\\$' ,
'Bourne Shell' => '\\\\$' ,
'C Shell' => '\\\\$' ,
'Kermit' => '\\\\$' ,
'Korn Shell' => '\\\\$' ,
'Skylark' => '\\\\$' ,
'Solidity' => '\\\\$' ,
'Stata' => '///$' ,
'Stylus' => '\\\\$' ,
'Tcl/Tk' => '\\\\$' ,
'TTCN' => '\\\\$' ,
'TypeScript' => '\\\\$' ,
'lex' => '\\\\$' ,
'Vala' => '\\\\$' ,
'Vala Header' => '\\\\$' ,
'zsh' => '\\\\$' ,
);
# 1}}}
%{$rh_Not_Code_Extension} = ( # {{{1
'1' => 1, # Man pages (documentation):
'2' => 1,
'3' => 1,
'4' => 1,
'5' => 1,
'6' => 1,
'7' => 1,
'8' => 1,
'9' => 1,
'a' => 1, # Static object code.
'ad' => 1, # X application default resource file.
'afm' => 1, # font metrics
'arc' => 1, # arc(1) archive
'arj' => 1, # arj(1) archive
'au' => 1, # Audio sound filearj(1) archive
'bak' => 1, # Backup files - we only want to count the "real" files.
'bdf' => 1,
'bmp' => 1,
'bz2' => 1, # bzip2(1) compressed file
'csv' => 1, # comma separated values
'desktop' => 1,
'dic' => 1,
'doc' => 1,
'elc' => 1,
'eps' => 1,
'fig' => 1,
'gif' => 1,
'gz' => 1,
'hdf' => 1, # hierarchical data format
'in' => 1, # Debatable.
'jpg' => 1,
'kdelnk' => 1,
'man' => 1,
'mf' => 1,
'mp3' => 1,
'n' => 1,
'o' => 1, # Object code is generated from source code.
'o.cmd' => 1, # not DOS Batch; Linux kernel compilation optimization file
'pbm' => 1,
'pdf' => 1,
'pfb' => 1,
'png' => 1,
'ps' => 1, # Postscript is _USUALLY_ generated automatically.
'sgm' => 1,
'sgml' => 1,
'so' => 1, # Dynamically-loaded object code.
'Tag' => 1,
'text' => 1,
'tfm' => 1,
'tgz' => 1, # gzipped tarball
'tiff' => 1,
'txt' => 1,
'vf' => 1,
'wav' => 1,
'xbm' => 1,
'xpm' => 1,
'Y' => 1, # file compressed with "Yabba"
'Z' => 1, # file compressed with "compress"
'zip' => 1, # zip archive
'gitignore' => 1,
); # 1}}}
%{$rh_Not_Code_Filename} = ( # {{{1
'AUTHORS' => 1,
'BUGS' => 1,
'BUGS' => 1,
'Changelog' => 1,
'ChangeLog' => 1,
'ChangeLog' => 1,
'Changes' => 1,
'CHANGES' => 1,
'COPYING' => 1,
'COPYING' => 1,
return $lang;
} # 1}}}
sub Csharp_or_Smalltalk { # {{{1
my ($file , # in
$rh_Err , # in hash of error codes
$raa_errors , # out
) = @_;
print "-> Csharp_or_Smalltalk($file)\n" if $opt_v > 2;
my $lang = undef;
my $IN = new IO::File $file, "r";
if (!defined $IN) {
push @{$raa_errors}, [$rh_Err->{'Unable to read'} , $file];
return $lang;
}
my $cs_points = 0;
my $smalltalk_points = 0;
while (<$IN>) {
s{//.*?$}{}; # strip inline C# comments for better clarity
next if /^\s*$/;
if (/[;}{]\s*$/) {
++$cs_points ;
} elsif (/^(using|namespace)\s/) {
$cs_points += 20;
} elsif (/^\s*(public|private|new)\s/) {
$cs_points += 20;
} elsif (/^\s*\[assembly:/) {
++$cs_points ;
} else {
++$smalltalk_points;
}
if (/(\!|\]\.)\s*$/) {
++$smalltalk_points;
--$cs_points ;
}
}
$IN->close;
if ($smalltalk_points > $cs_points) {
$lang = "Smalltalk";
} else {
$lang = "C#";
}
print "<- Csharp_or_Smalltalk($file)=$lang\n" if $opt_v > 2;
return $lang;
} # 1}}}
sub html_colored_text { # {{{1
# http://www.pagetutor.com/pagetutor/makapage/pics/net216-2.gif
my ($color, $text) = @_;
#?#die "html_colored_text($text)";
if ($color =~ /^red$/i) {
$color = "#ff0000";
} elsif ($color =~ /^green$/i) {
$color = "#00ff00";
} elsif ($color =~ /^blue$/i) {
$color = "#0000ff";
} elsif ($color =~ /^grey$/i) {
$color = "#cccccc";
}
# return "" unless $text;
return '<font color="' . $color . '">' . html_metachars($text) . "</font>";
} # 1}}}
sub xml_metachars { # {{{1
# http://en.wikipedia.org/wiki/Character_encodings_in_HTML#XML_character_references
my ($string, ) = shift @_;
my @in_chars = split(//, $string);
my @out_chars = ();
foreach my $c (@in_chars) {
if ($c eq '&') { push @out_chars, '&'
} elsif ($c eq '<') { push @out_chars, '<'
} elsif ($c eq '>') { push @out_chars, '>'
} elsif ($c eq '"') { push @out_chars, '"'
} elsif ($c eq "'") { push @out_chars, '''
} else {
push @out_chars, $c;
}
}
return join "", @out_chars;
} # 1}}}
sub html_metachars { # {{{1
# Replace HTML metacharacters with their printable forms.
# Future: use HTML-Encoder-0.00_04/lib/HTML/Encoder.pm
# from Fabiano Reese Righetti's HTML::Encoder module if
# this subroutine proves to be too simplistic.
my ($string, ) = shift @_;
my @in_chars = split(//, $string);
my @out_chars = ();
foreach my $c (@in_chars) {
if ($c eq '<') {
push @out_chars, '<'
} elsif ($c eq '>') {
push @out_chars, '>'
} elsif ($c eq '&') {
push @out_chars, '&'
} else {
push @out_chars, $c;
}
}
return join "", @out_chars;
} # 1}}}
sub test_alg_diff { # {{{1
my ($file_1 ,
$file_2 )
= @_;
my $fh_1 = new IO::File $file_1, "r";
die "Unable to read $file_1: $!\n" unless defined $fh_1;
chomp(my @lines_1 = <$fh_1>);
$fh_1->close;
my $fh_2 = new IO::File $file_2, "r";
die "Unable to read $file_2: $!\n" unless defined $fh_2;
chomp(my @lines_2 = <$fh_2>);
$fh_2->close;
my $n_no_change = 0;
my $n_modified = 0;
my $n_added = 0;
my $n_deleted = 0;
my @min_sdiff = ();
# Keys of the stripped_X arrays are canonical file names;
# should overlap mostly. Keys in stripped_L but not in
# stripped_R are files that have been deleted. Keys in
# stripped_R but not in stripped_L have been added.
my %stripped_L = ();
@stripped_L{ @files_L_minus_dir } = @files_L;
my %stripped_R = ();
@stripped_R{ @files_R_minus_dir } = @files_R;
my %common = ();
foreach my $f (keys %stripped_L) {
$common{$f} = 1 if defined $stripped_R{$f};
}
my %deleted = ();
foreach my $f (keys %stripped_L) {
$deleted{$stripped_L{$f}} = $f unless defined $stripped_R{$f};
}
my %added = ();
foreach my $f (keys %stripped_R) {
$added{$stripped_R{$f}} = $f unless defined $stripped_L{$f};
}
#use Data::Dumper::Simple;
#print Dumper("align_by_pairs", %stripped_L, %stripped_R);
#print Dumper("align_by_pairs", %common, %added, %deleted);
foreach my $f (keys %common) {
push @{$ra_compare_list}, [ $stripped_L{$f},
$stripped_R{$f} ];
}
@{$ra_added } = keys %added ;
@{$ra_removed } = keys %deleted;
print "<- align_by_pairs()\n" if $opt_v > 2;
return;
#print Dumper("align_by_pairs", @files_L_minus_dir, @files_R_minus_dir);
#die;
} # 1}}}
sub html_header { # {{{1
my ($title , ) = @_;
print "-> html_header\n" if $opt_v > 2;
return
'<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="GENERATOR" content="cloc http://github.com/AlDanial/cloc">
' .
"
<!-- Created by $script v$VERSION -->
<title>$title</title>
" .
'
<style TYPE="text/css">
<!--
body {
color: black;
background-color: white;
font-family: monospace
}
.whitespace {
background-color: gray;
}
.comment {
color: gray;
font-style: italic;
}
.clinenum {
color: red;
}
.linenum {
color: green;
}
-->
</style>
</head>
<body>
<pre><tt>
';
print "<- html_header\n" if $opt_v > 2;
} # 1}}}
sub html_end { # {{{1
return
'</tt></pre>
</body>
</html>
';
} # 1}}}
sub die_unknown_lang { # {{{1
my ($lang, $option_name) = @_;
die "Unknown language '$lang' used with $option_name option. " .
"The command\n $script --show-lang\n" .
"will print all recognized languages. Language names are " .
"case sensitive.\n" ;
} # 1}}}
sub unicode_file { # {{{1
my $file = shift @_;
print "-> unicode_file($file)\n" if $opt_v > 2;
return 0 if (-s $file > 2_000_000);
# don't bother trying to test binary files bigger than 2 MB
my $IN = new IO::File $file, "r";
if (!defined $IN) {
warn "Unable to read $file; ignoring.\n";
return 0;
}
my @lines = <$IN>;
$IN->close;
if (unicode_to_ascii( join('', @lines) )) {
print "<- unicode_file()\n" if $opt_v > 2;
return 1;
} else {
print "<- unicode_file()\n" if $opt_v > 2;
return 0;
}
} # 1}}}
sub unicode_to_ascii { # {{{1
my $string = shift @_;
# A trivial attempt to convert UTF-16 little or big endian
# files into ASCII. These files exhibit the following byte
( run in 1.609 second using v1.01-cache-2.11-cpan-ceb78f64989 )