mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-27 01:51:34 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // CodeMirror, copyright (c) by Marijn Haverbeke and others
 | |
| // Distributed under an MIT license: https://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")
 | |
| });
 | 
