More robust heuristics for .m files and 3 new Matlab tests. Support for Obj-C detection fully intact; all tests pass. Detection of Obj-C keywords @implementation, @property, @interface, and @synthesize removed to avoid possible conflicts with user-created Matlab function handles. Only @end is needed, which is not valid in Matlab. Matlab class files supported. Comments preceded by whitespace detected for Obj-C and Matlab.

Signed-off-by: Andrew D. Horchler <adh9@case.edu>
This commit is contained in:
Andrew D. Horchler
2012-05-08 18:29:34 -04:00
parent f0eace7f86
commit 354e1fc85e
5 changed files with 90 additions and 10 deletions

29
test/fixtures/matlab_class.m vendored Normal file
View File

@@ -0,0 +1,29 @@
classdef matlab_class
properties
R;
G;
B;
end
methods
function obj = matlab_class(r,g,b)
obj.R = r;
obj.G = g;
obj.B = b;
end
function disp(obj)
disp(['Red: ' num2str(obj.R) ...
', Green: ' num2str(obj.G) ...
', Blue: ' num2str(obj.B)]);
end
end
enumeration
red (1,0,0)
green (0,1,0)
blue (0,0,1)
cyan (0,1,1)
magenta (1,0,1)
yellow (1,1,0)
black (0,0,0)
white (1,1,1)
end
end

33
test/fixtures/matlab_function2.m vendored Normal file
View File

@@ -0,0 +1,33 @@
function ret = matlab_function2(A,B)
% Simple function that combines two values using function handles and displays
% the return value
% create function handles
fun1=@interface;
fun2=@implementation;
fun3=@property;
fun4=@synthesize;
% use function handles
ret = fun1(A)+fun2(A)+fun3(B)+fun4(B);
% Display the return value
disp('Return value in function');
disp(ret);
function A=interface(A)
% simple sub-function with same name Objective-C @keyword
A=2*A;
function A=implementation(A)
% simple sub-function with same name Objective-C @keyword
A=A^2;
function B=property(B)
% simple sub-function with same name Objective-C @keyword
B=2*B;
function B=synthesize(B)
% simple sub-function with same name Objective-C @keyword
B=B^2;

13
test/fixtures/matlab_script2.m vendored Normal file
View File

@@ -0,0 +1,13 @@
% Matlab example script 2
% Comments precended with arbitrary whitespace (spaces or tabs)
%Call matlab_function function which resides in the same directory
value1 = 5 % semicolon at end of line is not mandatory, only suppresses output to command line.
value2 = 3
% Calculate sum of value1 and value2
result = matlab_function(value1,value2);
disp('called from script')
disp(result);

View File

@@ -311,6 +311,9 @@ class TestBlob < Test::Unit::TestCase
assert_equal Language['Objective-C'], blob("hello.m").language
assert_equal Language['Matlab'], blob("matlab_function.m").language
assert_equal Language['Matlab'], blob("matlab_script.m").language
assert_equal Language['Matlab'], blob("matlab_function2.m").language
assert_equal Language['Matlab'], blob("matlab_script2.m").language
assert_equal Language['Matlab'], blob("matlab_class.m").language
# .r disambiguation
assert_equal Language['R'], blob("hello-r.R").language