mirror of
https://github.com/KevinMidboe/linguist.git
synced 2026-02-12 11:19:31 +00:00
Merge pull request #2306 from powerman/limbo
add Limbo: language, samples
This commit is contained in:
@@ -184,7 +184,7 @@ module Linguist
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
disambiguate "M", "MUF", "Mathematica", "Matlab", "Mercury", "Objective-C" do |data|
|
disambiguate "Limbo", "M", "MUF", "Mathematica", "Matlab", "Mercury", "Objective-C" do |data|
|
||||||
if ObjectiveCRegex.match(data)
|
if ObjectiveCRegex.match(data)
|
||||||
Language["Objective-C"]
|
Language["Objective-C"]
|
||||||
elsif data.include?(":- module")
|
elsif data.include?(":- module")
|
||||||
@@ -197,6 +197,8 @@ module Linguist
|
|||||||
Language["Mathematica"]
|
Language["Mathematica"]
|
||||||
elsif /^\s*%/.match(data)
|
elsif /^\s*%/.match(data)
|
||||||
Language["Matlab"]
|
Language["Matlab"]
|
||||||
|
elsif /^\w+\s*:\s*module\s*{/.match(data)
|
||||||
|
Language["Limbo"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1670,6 +1670,14 @@ LilyPond:
|
|||||||
- .ily
|
- .ily
|
||||||
ace_mode: text
|
ace_mode: text
|
||||||
|
|
||||||
|
Limbo:
|
||||||
|
type: programming
|
||||||
|
extensions:
|
||||||
|
- .b
|
||||||
|
- .m
|
||||||
|
tm_scope: none
|
||||||
|
ace_mode: text
|
||||||
|
|
||||||
Liquid:
|
Liquid:
|
||||||
type: markup
|
type: markup
|
||||||
extensions:
|
extensions:
|
||||||
|
|||||||
195
samples/Brainfuck/factor.b
Normal file
195
samples/Brainfuck/factor.b
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
* factor an arbitrarily large positive integer
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 by Brian Raiter
|
||||||
|
* under the GNU General Public License
|
||||||
|
|
||||||
|
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-
|
||||||
|
|
||||||
|
*
|
||||||
|
* read in the number
|
||||||
|
*
|
||||||
|
|
||||||
|
<<<<<<<<<+
|
||||||
|
[-[>>>>>>>>>>][-]<<<<<<<<<<[[->>>>>>>>>>+<<<<<<<<<<]<<<<<<<<<<]
|
||||||
|
>>>>>>>>>>,----------]
|
||||||
|
>>>>>>>>>>[------------------------------------->>>>>>>>>->]
|
||||||
|
<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
|
||||||
|
|
||||||
|
*
|
||||||
|
* display the number and initialize the loop variable to two
|
||||||
|
*
|
||||||
|
|
||||||
|
[>++++++++++++++++++++++++++++++++++++++++++++++++.
|
||||||
|
------------------------------------------------<<<<<<<<<<<]
|
||||||
|
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
|
||||||
|
--------------------------.[-]
|
||||||
|
>>>>>>>>>>>>++<<<<+
|
||||||
|
|
||||||
|
*
|
||||||
|
* the main loop
|
||||||
|
*
|
||||||
|
|
||||||
|
[ [-]>>
|
||||||
|
|
||||||
|
*
|
||||||
|
* make copies of the number and the loop variable
|
||||||
|
*
|
||||||
|
|
||||||
|
[>>>>[-]>[-]>[-]>[-]
|
||||||
|
>[-]>[-]
|
||||||
|
<<<<<<<[->>>+>+<<<<]>>>>>>>>]
|
||||||
|
<<<<<<<<<<[>>>>>>[-<<<<+>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
[>[->>>+>>+<<<<<]>>>>>>>>>]
|
||||||
|
<<<<<<<<<<[>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
|
||||||
|
*
|
||||||
|
* divide the number by the loop variable
|
||||||
|
*
|
||||||
|
|
||||||
|
[>>>[-]>>>[-]>[-]>>>] initialize
|
||||||
|
<<<<<<<<<<[<<<<<<<<<<]
|
||||||
|
>>>>>>>>>[-]>>>>>>>+<<<<<<<<[+]+
|
||||||
|
[ ->> double divisor until above dividend
|
||||||
|
[>>>>>>[->++<]>>>>]<<<<<<<<<<
|
||||||
|
[>>>>>>>>[-]>[-]
|
||||||
|
<<<<[->>>++<<<]<<<<<<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
[>>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<
|
||||||
|
[->--------->>>>>>>>>+<<<<<<<<<<[->+<]]]]]]]]]]]>>]
|
||||||
|
<<<<<<<<<<[>>>>>>>>>[-<+<<<+>>>>]<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
[>>>>>>>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>
|
||||||
|
[-<--------->>>>>>>>>>>+<<<<<<<<<<[-<+>]]]]]]]]]]]>>>]
|
||||||
|
<<<<<<<<<<
|
||||||
|
[>>>>[->>>+>>+<<<<<]<<<<<<<<<<<<<<]
|
||||||
|
>>>>>>>>>>[>>>>>>>[-<<<+>>>]>>>]<<<<<<<<<<
|
||||||
|
[>>>>>>>>[->-<]>
|
||||||
|
[<<<<<<<<<[<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<]
|
||||||
|
>>>>>>>>>>>>>>>>>>>]
|
||||||
|
<<<<<<<<<<<<<<<<<<<]
|
||||||
|
>>>>>>>>>[+[+[+[+[+[+[+[+[+[+[[-]<+>]]]]]]]]]]]<
|
||||||
|
]
|
||||||
|
>>>>>>>>
|
||||||
|
[ subtract divisor from dividend
|
||||||
|
<<<<<<
|
||||||
|
[>>>>>>>>[-]>[-]<<<<<[->>>+>+<<<<]>>>>>>]<<<<<<<<<<
|
||||||
|
[>>>>>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]<<<<<<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
[>>>>>>>>>[-<<<<+>>>>]>]<<<<<<<<<<
|
||||||
|
[>>>>>>>>[-<->]<<<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
[>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<
|
||||||
|
[++++++++++[+>-<]>>>>>>>>>>-<<<<<<<<<<]]]]]]]]]]]>>>]
|
||||||
|
>>>>>>>+
|
||||||
|
[ if difference is nonnegative then
|
||||||
|
[-]<<<<<<<<<<<<<<<<< replace dividend and increment quotient
|
||||||
|
[>>>>[-]>>>>[-<<<<+>>>>]<<[->>+<<]<<<<<<<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
[>>>>>>>>[->+<<<+>>]>>]<<<<<<<<<<
|
||||||
|
[>>>[->>>>>>+<<<<<<]<<<<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
[>>>>>>>>>[-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
|
||||||
|
[-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
|
||||||
|
[-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
|
||||||
|
[-<<<<<<+>>>>>>[-<<<<<<+>>>>>>
|
||||||
|
[-<<<<<<+>>>>>>[-<<<<<<--------->>>>>>>>>>>>>>>>+<<<<<<<<<<
|
||||||
|
[-<<<<<<+>>>>>>]]]]]]]]]]]>]
|
||||||
|
>>>>>>>
|
||||||
|
] halve divisor and loop until zero
|
||||||
|
<<<<<<<<<<<<<<<<<[<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
[>>>>>>>>[-]<<[->+<]<[->>>+<<<]>>>>>]<<<<<<<<<<
|
||||||
|
[+>>>>>>>[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
|
||||||
|
[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
|
||||||
|
[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
|
||||||
|
[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+>
|
||||||
|
[-<<<<<<<+>>>>>>>]]]]]]]]]<<<<<<<
|
||||||
|
[->>>>>>>+<<<<<<<]-<<<<<<<<<<]
|
||||||
|
>>>>>>>
|
||||||
|
[-<<<<<<<<<<<+>>>>>>>>>>>]
|
||||||
|
>>>[>>>>>>>[-<<<<<<<<<<<+++++>>>>>>>>>>>]>>>]<<<<<<<<<<
|
||||||
|
[+>>>>>>>>[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
|
||||||
|
[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
|
||||||
|
[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
|
||||||
|
[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>>
|
||||||
|
[-<<<<<<<<+>>>>>>>>]]]]]]]]]<<<<<<<<
|
||||||
|
[->>>>>>>>+<<<<<<<<]-<<<<<<<<<<]
|
||||||
|
>>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]>>
|
||||||
|
[>>>>>>>>[-<<<<<<<<<<<<<+++++>>>>>>>>>>>>>]>>]<<<<<<<<<<
|
||||||
|
[<<<<<<<<<<]>>>>>>>>>>
|
||||||
|
>>>>>>
|
||||||
|
]
|
||||||
|
<<<<<<
|
||||||
|
|
||||||
|
*
|
||||||
|
* make copies of the loop variable and the quotient
|
||||||
|
*
|
||||||
|
|
||||||
|
[>>>[->>>>+>+<<<<<]>>>>>>>]
|
||||||
|
<<<<<<<<<<
|
||||||
|
[>>>>>>>[-<<<<+>>>>]<<<<<[->>>>>+>>+<<<<<<<]<<<<<<<<<<<<]
|
||||||
|
>>>>>>>>>>[>>>>>>>[-<<<<<+>>>>>]>>>]<<<<<<<<<<
|
||||||
|
|
||||||
|
*
|
||||||
|
* break out of the loop if the quotient is larger than the loop variable
|
||||||
|
*
|
||||||
|
|
||||||
|
[>>>>>>>>>[-<->]<
|
||||||
|
[<<<<<<<<
|
||||||
|
[<<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<]
|
||||||
|
>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<]
|
||||||
|
>>>>>>>>[>-<[+[+[+[+[+[+[+[+[+[[-]>+<]]]]]]]]]]]>+
|
||||||
|
|
||||||
|
[ [-]
|
||||||
|
|
||||||
|
*
|
||||||
|
* partially increment the loop variable
|
||||||
|
*
|
||||||
|
|
||||||
|
<[-]+>>>>+>>>>>>>>[>>>>>>>>>>]<<<<<<<<<<
|
||||||
|
|
||||||
|
*
|
||||||
|
* examine the remainder for nonzero digits
|
||||||
|
*
|
||||||
|
|
||||||
|
[<<<<<<[<<<<[<<<<<<<<<<]>>>>+<<<<<<<<<<]<<<<]
|
||||||
|
>>>>>>>>>>>>>>>>>>>>[>>>>>>>>>>]<<<<<<<<<<[<<<<<<<<<<]
|
||||||
|
>>>>-
|
||||||
|
|
||||||
|
[ [+]
|
||||||
|
|
||||||
|
*
|
||||||
|
* decrement the loop variable and replace the number with the quotient
|
||||||
|
*
|
||||||
|
|
||||||
|
>>>>>>>>-<<[>[-]>>[-<<+>>]>>>>>>>]<<<<<<<<<<
|
||||||
|
|
||||||
|
*
|
||||||
|
* display the loop variable
|
||||||
|
*
|
||||||
|
|
||||||
|
[+>>[>>>>>>>>+>>]<<-<<<<<<<<<<]-
|
||||||
|
[>>++++++++++++++++++++++++++++++++++++++++++++++++.
|
||||||
|
------------------------------------------------<<<<<<<<<<<<]
|
||||||
|
++++++++++++++++++++++++++++++++.[-]>>>>
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
*
|
||||||
|
* normalize the loop variable
|
||||||
|
*
|
||||||
|
|
||||||
|
>>>>>>
|
||||||
|
[>>[->>>>>+<<<<<[->>>>>+<<<<<
|
||||||
|
[->>>>>+<<<<<[->>>>>+<<<<<
|
||||||
|
[->>>>>+<<<<<[->>>>>+<<<<<
|
||||||
|
[->>>>>+<<<<<[->>>>>+<<<<<
|
||||||
|
[->>>>>+<<<<<[->>>>>--------->>>>>+<<<<<<<<<<
|
||||||
|
[->>>>>+<<<<<]]]]]]]]]]]>>>>>>>>]
|
||||||
|
<<<<<<<<<<[>>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<<]
|
||||||
|
>>>>>>>>>
|
||||||
|
|
||||||
|
]<
|
||||||
|
|
||||||
|
]>>
|
||||||
|
|
||||||
|
*
|
||||||
|
* display the number and end
|
||||||
|
*
|
||||||
|
|
||||||
|
[>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]-
|
||||||
|
[>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<]
|
||||||
|
++++++++++.
|
||||||
48
samples/Limbo/cat.b
Normal file
48
samples/Limbo/cat.b
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
implement Cat;
|
||||||
|
|
||||||
|
include "sys.m";
|
||||||
|
sys: Sys;
|
||||||
|
|
||||||
|
include "draw.m";
|
||||||
|
|
||||||
|
Cat: module
|
||||||
|
{
|
||||||
|
init: fn(ctxt: ref Draw->Context, argv: list of string);
|
||||||
|
};
|
||||||
|
|
||||||
|
stdout: ref Sys->FD;
|
||||||
|
|
||||||
|
init(nil: ref Draw->Context, args: list of string)
|
||||||
|
{
|
||||||
|
sys = load Sys Sys->PATH;
|
||||||
|
stdout = sys->fildes(1);
|
||||||
|
args = tl args;
|
||||||
|
if(args == nil)
|
||||||
|
args = "-" :: nil;
|
||||||
|
for(; args != nil; args = tl args){
|
||||||
|
file := hd args;
|
||||||
|
if(file != "-"){
|
||||||
|
fd := sys->open(file, Sys->OREAD);
|
||||||
|
if(fd == nil){
|
||||||
|
sys->fprint(sys->fildes(2), "cat: cannot open %s: %r\n", file);
|
||||||
|
raise "fail:bad open";
|
||||||
|
}
|
||||||
|
cat(fd, file);
|
||||||
|
}else
|
||||||
|
cat(sys->fildes(0), "<stdin>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cat(fd: ref Sys->FD, file: string)
|
||||||
|
{
|
||||||
|
buf := array[Sys->ATOMICIO] of byte;
|
||||||
|
while((n := sys->read(fd, buf, len buf)) > 0)
|
||||||
|
if(sys->write(stdout, buf, n) < n) {
|
||||||
|
sys->fprint(sys->fildes(2), "cat: write error: %r\n");
|
||||||
|
raise "fail:write error";
|
||||||
|
}
|
||||||
|
if(n < 0) {
|
||||||
|
sys->fprint(sys->fildes(2), "cat: error reading %s: %r\n", file);
|
||||||
|
raise "fail:read error";
|
||||||
|
}
|
||||||
|
}
|
||||||
26
samples/Limbo/lock.b
Normal file
26
samples/Limbo/lock.b
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
implement Lock;
|
||||||
|
|
||||||
|
include "sys.m";
|
||||||
|
sys: Sys;
|
||||||
|
include "lock.m";
|
||||||
|
|
||||||
|
Semaphore.obtain(l: self ref Semaphore)
|
||||||
|
{
|
||||||
|
l.c <-= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Semaphore.release(l: self ref Semaphore)
|
||||||
|
{
|
||||||
|
<-l.c;
|
||||||
|
}
|
||||||
|
|
||||||
|
Semaphore.new(): ref Semaphore
|
||||||
|
{
|
||||||
|
l := ref Semaphore;
|
||||||
|
l.c = chan[1] of int;
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
init()
|
||||||
|
{
|
||||||
|
}
|
||||||
13
samples/Limbo/lock.m
Normal file
13
samples/Limbo/lock.m
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Lock: module
|
||||||
|
{
|
||||||
|
PATH: con "/dis/lib/lock.dis";
|
||||||
|
|
||||||
|
Semaphore: adt {
|
||||||
|
c: chan of int;
|
||||||
|
obtain: fn(nil: self ref Semaphore);
|
||||||
|
release: fn(nil: self ref Semaphore);
|
||||||
|
new: fn(): ref Semaphore;
|
||||||
|
};
|
||||||
|
|
||||||
|
init: fn();
|
||||||
|
};
|
||||||
@@ -188,7 +188,7 @@ class TestLanguage < Minitest::Test
|
|||||||
assert_equal [], Language.find_by_extension('foo.rb')
|
assert_equal [], Language.find_by_extension('foo.rb')
|
||||||
assert_equal [Language['Ruby']], Language.find_by_extension('rb')
|
assert_equal [Language['Ruby']], Language.find_by_extension('rb')
|
||||||
assert_equal [Language['Ruby']], Language.find_by_extension('.rb')
|
assert_equal [Language['Ruby']], Language.find_by_extension('.rb')
|
||||||
assert_equal [Language['M'], Language['MUF'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m')
|
assert_equal [Language['Limbo'], Language['M'], Language['MUF'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_find_all_by_extension
|
def test_find_all_by_extension
|
||||||
|
|||||||
Reference in New Issue
Block a user