mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.1 KiB
85 lines
2.1 KiB
// CodeMirror, copyright (c) by Marijn Haverbeke and others |
|
// Distributed under an MIT license: http://codemirror.net/LICENSE |
|
|
|
// Brainfuck mode created by Michael Kaminsky https://github.com/mkaminsky11 |
|
|
|
(function(mod) { |
|
if (typeof exports == "object" && typeof module == "object") |
|
mod(require("../../lib/codemirror")) |
|
else if (typeof define == "function" && define.amd) |
|
define(["../../lib/codemirror"], mod) |
|
else |
|
mod(CodeMirror) |
|
})(function(CodeMirror) { |
|
"use strict" |
|
var reserve = "><+-.,[]".split(""); |
|
/* |
|
comments can be either: |
|
placed behind lines |
|
|
|
+++ this is a comment |
|
|
|
where reserved characters cannot be used |
|
or in a loop |
|
[ |
|
this is ok to use [ ] and stuff |
|
] |
|
or preceded by # |
|
*/ |
|
CodeMirror.defineMode("brainfuck", function() { |
|
return { |
|
startState: function() { |
|
return { |
|
commentLine: false, |
|
left: 0, |
|
right: 0, |
|
commentLoop: false |
|
} |
|
}, |
|
token: function(stream, state) { |
|
if (stream.eatSpace()) return null |
|
if(stream.sol()){ |
|
state.commentLine = false; |
|
} |
|
var ch = stream.next().toString(); |
|
if(reserve.indexOf(ch) !== -1){ |
|
if(state.commentLine === true){ |
|
if(stream.eol()){ |
|
state.commentLine = false; |
|
} |
|
return "comment"; |
|
} |
|
if(ch === "]" || ch === "["){ |
|
if(ch === "["){ |
|
state.left++; |
|
} |
|
else{ |
|
state.right++; |
|
} |
|
return "bracket"; |
|
} |
|
else if(ch === "+" || ch === "-"){ |
|
return "keyword"; |
|
} |
|
else if(ch === "<" || ch === ">"){ |
|
return "atom"; |
|
} |
|
else if(ch === "." || ch === ","){ |
|
return "def"; |
|
} |
|
} |
|
else{ |
|
state.commentLine = true; |
|
if(stream.eol()){ |
|
state.commentLine = false; |
|
} |
|
return "comment"; |
|
} |
|
if(stream.eol()){ |
|
state.commentLine = false; |
|
} |
|
} |
|
}; |
|
}); |
|
CodeMirror.defineMIME("text/x-brainfuck","brainfuck") |
|
});
|
|
|