1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // 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')
- })
|