openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

brainfuck.js (2174B)


      1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
      2 // Distributed under an MIT license: http://codemirror.net/LICENSE
      3 
      4 // Brainfuck mode created by Michael Kaminsky https://github.com/mkaminsky11
      5 
      6 (function(mod) {
      7   if (typeof exports == "object" && typeof module == "object")
      8     mod(require("../../lib/codemirror"))
      9   else if (typeof define == "function" && define.amd)
     10     define(["../../lib/codemirror"], mod)
     11   else
     12     mod(CodeMirror)
     13 })(function(CodeMirror) {
     14   "use strict"
     15   var reserve = "><+-.,[]".split("");
     16   /*
     17   comments can be either:
     18   placed behind lines
     19 
     20         +++    this is a comment
     21 
     22   where reserved characters cannot be used
     23   or in a loop
     24   [
     25     this is ok to use [ ] and stuff
     26   ]
     27   or preceded by #
     28   */
     29   CodeMirror.defineMode("brainfuck", function() {
     30     return {
     31       startState: function() {
     32         return {
     33           commentLine: false,
     34           left: 0,
     35           right: 0,
     36           commentLoop: false
     37         }
     38       },
     39       token: function(stream, state) {
     40         if (stream.eatSpace()) return null
     41         if(stream.sol()){
     42           state.commentLine = false;
     43         }
     44         var ch = stream.next().toString();
     45         if(reserve.indexOf(ch) !== -1){
     46           if(state.commentLine === true){
     47             if(stream.eol()){
     48               state.commentLine = false;
     49             }
     50             return "comment";
     51           }
     52           if(ch === "]" || ch === "["){
     53             if(ch === "["){
     54               state.left++;
     55             }
     56             else{
     57               state.right++;
     58             }
     59             return "bracket";
     60           }
     61           else if(ch === "+" || ch === "-"){
     62             return "keyword";
     63           }
     64           else if(ch === "<" || ch === ">"){
     65             return "atom";
     66           }
     67           else if(ch === "." || ch === ","){
     68             return "def";
     69           }
     70         }
     71         else{
     72           state.commentLine = true;
     73           if(stream.eol()){
     74             state.commentLine = false;
     75           }
     76           return "comment";
     77         }
     78         if(stream.eol()){
     79           state.commentLine = false;
     80         }
     81       }
     82     };
     83   });
     84 CodeMirror.defineMIME("text/x-brainfuck","brainfuck")
     85 });