Skip to content

Commit

Permalink
distinguish TeX from VB files for .cls, #341
Browse files Browse the repository at this point in the history
  • Loading branch information
AlDanial committed Nov 2, 2018
1 parent 88be056 commit cf96f71
Show file tree
Hide file tree
Showing 6 changed files with 380 additions and 2 deletions.
43 changes: 42 additions & 1 deletion Unix/cloc
Original file line number Diff line number Diff line change
Expand Up @@ -1045,6 +1045,7 @@ my %Extension_Collision = (
'Qt/Glade' => [ 'ui' ] ,
'TypeScript/Qt Linguist' => [ 'ts' ] ,
'Verilog-SystemVerilog/Coq' => [ 'v' ] ,
'Visual Basic/TeX' => [ 'cls' ] ,
);
my @Autogen_to_ignore = no_autogen_files($list_no_autogen);
if ($opt_force_lang_def) {
Expand Down Expand Up @@ -4305,6 +4306,11 @@ sub print_language_info { # {{{1
push @{$extensions{'Smalltalk'}} , "cs";
delete $extensions{'C#/Smalltalk'};
}
if (!$language or $language =~ /^(Visual Basic|TeX)$/i) {
push @{$extensions{'Visual Basic'}} , "cls";
push @{$extensions{'TeX'}} , "cls";
delete $extensions{'Visual Basic/TeX'};
}
if (!$language or $language =~ /^(Ant)$/i) {
push @{$extensions{'Ant'}} , "build.xml";
delete $extensions{'Ant/XML'};
Expand Down Expand Up @@ -5185,6 +5191,8 @@ sub classify_file { # {{{1
return Qt_or_Glade( $full_file, $rh_Err, $raa_errors);
} elsif ($Language_by_Extension{$extension} eq 'C#/Smalltalk') {
return Csharp_or_Smalltalk( $full_file, $rh_Err, $raa_errors);
} elsif ($Language_by_Extension{$extension} eq 'Visual Basic/TeX') {
return Visual_Basic_or_TeX( $full_file, $rh_Err, $raa_errors);
} elsif ($Language_by_Extension{$extension} eq 'Brainfuck') {
if (really_is_bf($full_file)) {
return $Language_by_Extension{$extension};
Expand Down Expand Up @@ -6624,7 +6632,7 @@ sub set_constants { # {{{1
'clj' => 'Clojure' ,
'cljs' => 'ClojureScript' ,
'cljc' => 'ClojureC' ,
'cls' => 'Visual Basic' , # also Apex Class
'cls' => 'Visual Basic/TeX' , # also Apex Class
'CMakeLists.txt' => 'CMake' ,
'cmake' => 'CMake' ,
'cob' => 'COBOL' ,
Expand Down Expand Up @@ -9813,6 +9821,39 @@ sub Csharp_or_Smalltalk { # {{{1
print "<- Csharp_or_Smalltalk($file)=$lang\n" if $opt_v > 2;
return $lang;
} # 1}}}
sub Visual_Basic_or_TeX { # {{{1
my ($file , # in
$rh_Err , # in hash of error codes
$raa_errors , # out
) = @_;

print "-> Visual_Basic_or_TeX($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 $VB_points = 0;
my $tex_points = 0;
while (<$IN>) {
next if /^\s*$/;
if (/\s*%/ or /\s*\\/) {
++$tex_points ;
} elsif (/^\s*(public|private|end|attribute|version)\s/i) {
++$VB_points ;
}
}
$IN->close;
if ($tex_points > $VB_points) {
$lang = "TeX";
} else {
$lang = "Visual Basic";
}
print "<- Visual_Basic_or_TeX($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) = @_;
Expand Down
7 changes: 7 additions & 0 deletions Unix/t/01_opts.t
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,13 @@ my @Tests = (
'ref' => '../tests/inputs/issues/318/Rcs.yaml', # results in input dir
},

{
'name' => 'distinguish TeX from VB (github issue #341)',
'cd' => '../tests/inputs/issues/341',
'args' => '.',
'ref' => '../tests/outputs/issues/341/results.yaml',
},


# {
# 'name' => '--count-and--diff with --out',
Expand Down
43 changes: 42 additions & 1 deletion cloc
Original file line number Diff line number Diff line change
Expand Up @@ -1035,6 +1035,7 @@ my %Extension_Collision = (
'Qt/Glade' => [ 'ui' ] ,
'TypeScript/Qt Linguist' => [ 'ts' ] ,
'Verilog-SystemVerilog/Coq' => [ 'v' ] ,
'Visual Basic/TeX' => [ 'cls' ] ,
);
my @Autogen_to_ignore = no_autogen_files($list_no_autogen);
if ($opt_force_lang_def) {
Expand Down Expand Up @@ -4295,6 +4296,11 @@ sub print_language_info { # {{{1
push @{$extensions{'Smalltalk'}} , "cs";
delete $extensions{'C#/Smalltalk'};
}
if (!$language or $language =~ /^(Visual Basic|TeX)$/i) {
push @{$extensions{'Visual Basic'}} , "cls";
push @{$extensions{'TeX'}} , "cls";
delete $extensions{'Visual Basic/TeX'};
}
if (!$language or $language =~ /^(Ant)$/i) {
push @{$extensions{'Ant'}} , "build.xml";
delete $extensions{'Ant/XML'};
Expand Down Expand Up @@ -5175,6 +5181,8 @@ sub classify_file { # {{{1
return Qt_or_Glade( $full_file, $rh_Err, $raa_errors);
} elsif ($Language_by_Extension{$extension} eq 'C#/Smalltalk') {
return Csharp_or_Smalltalk( $full_file, $rh_Err, $raa_errors);
} elsif ($Language_by_Extension{$extension} eq 'Visual Basic/TeX') {
return Visual_Basic_or_TeX( $full_file, $rh_Err, $raa_errors);
} elsif ($Language_by_Extension{$extension} eq 'Brainfuck') {
if (really_is_bf($full_file)) {
return $Language_by_Extension{$extension};
Expand Down Expand Up @@ -6614,7 +6622,7 @@ sub set_constants { # {{{1
'clj' => 'Clojure' ,
'cljs' => 'ClojureScript' ,
'cljc' => 'ClojureC' ,
'cls' => 'Visual Basic' , # also Apex Class
'cls' => 'Visual Basic/TeX' , # also Apex Class
'CMakeLists.txt' => 'CMake' ,
'cmake' => 'CMake' ,
'cob' => 'COBOL' ,
Expand Down Expand Up @@ -11479,6 +11487,39 @@ sub Csharp_or_Smalltalk { # {{{1
print "<- Csharp_or_Smalltalk($file)=$lang\n" if $opt_v > 2;
return $lang;
} # 1}}}
sub Visual_Basic_or_TeX { # {{{1
my ($file , # in
$rh_Err , # in hash of error codes
$raa_errors , # out
) = @_;

print "-> Visual_Basic_or_TeX($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 $VB_points = 0;
my $tex_points = 0;
while (<$IN>) {
next if /^\s*$/;
if (/\s*%/ or /\s*\\/) {
++$tex_points ;
} elsif (/^\s*(public|private|end|attribute|version)\s/i) {
++$VB_points ;
}
}
$IN->close;
if ($tex_points > $VB_points) {
$lang = "TeX";
} else {
$lang = "Visual Basic";
}
print "<- Visual_Basic_or_TeX($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) = @_;
Expand Down
103 changes: 103 additions & 0 deletions tests/inputs/issues/341/cItems.cls
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END

'http://www.vbforums.com/showthread.php?374132-A-basic-example-of-Class-Modules
'file = Class Sample (game).zip

Attribute VB_Name = "cItems"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
Attribute VB_Ext_KEY = "Collection" ,"cItem"
Attribute VB_Ext_KEY = "Member0" ,"cItem"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
Option Explicit

'local variable to hold collection
Private mCol As Collection

Public Function Add( _
ItemType As eItemTypes, _
Value As Long, _
Rarity As Long, _
Optional ItemName As String, _
Optional sKey As String) As cItem
'create a new object
Dim objNewMember As cItem
Set objNewMember = New cItem


'set the properties passed into the method
objNewMember.Value = Value
objNewMember.Rarity = Rarity
If Len(sKey) = 0 Then
mCol.Add objNewMember
Else
mCol.Add objNewMember, sKey
End If


'return the object created
Set Add = objNewMember
Set objNewMember = Nothing


End Function

Public Property Get Item(vntIndexKey As Variant) As cItem
Attribute Item.VB_UserMemId = 0
'used when referencing an element in the collection
'vntIndexKey contains either the Index or Key to the collection,
'this is why it is declared as a Variant
'Syntax: Set foo = x.Item(xyz) or Set foo = x.Item(5)
Set Item = mCol(vntIndexKey)
End Property



Public Property Get Count() As Long
'used when retrieving the number of elements in the
'collection. Syntax: Debug.Print x.Count
Count = mCol.Count
End Property


Public Sub Remove(vntIndexKey As Variant)
'used when removing an element from the collection
'vntIndexKey contains either the Index or Key, which is why
'it is declared as a Variant
'Syntax: x.Remove(xyz)


mCol.Remove vntIndexKey
End Sub


Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
'this property allows you to enumerate
'this collection with the For...Each syntax
Set NewEnum = mCol.[_NewEnum]
End Property


Private Sub Class_Initialize()
'creates the collection when this class is created
Set mCol = New Collection
End Sub


Private Sub Class_Terminate()
'destroys collection when this class is terminated
Set mCol = Nothing
End Sub

Loading

0 comments on commit cf96f71

Please sign in to comment.