0

我正在尝试制作适用于颜色代码的 CodeMirror 模式。颜色代码标记定义为&x,x为数字或字母 (af)。标记之后的所有东西都应该是那种颜色,直到它遇到另一个标记。

着色工作,但整个输入是着色的,而不是仅在颜色代码标记之后。整个输入用输入中最后出现的颜色着色。

这是我的代码:

CodeMirror.defineMode("colorCodes", function () {
    return {
        startState: () => {
            return {
                color: null
            };
        },
        token: function (stream, state) {
            if (!state.color) {
                console.log(stream.peek());
                if (stream.skipTo('&0')) {
                    stream.next();
                    stream.next();
                    state.color = 'black';
                } else if (stream.skipTo('&1')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_blue';
                } else if (stream.skipTo('&2')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_green';
                } else if (stream.skipTo('&3')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_aqua';
                } else if (stream.skipTo('&4')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_red';
                } else if (stream.skipTo('&5')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_purple';
                } else if (stream.skipTo('&6')) {
                    stream.next();
                    stream.next();
                    state.color = 'gold';
                } else if (stream.skipTo('&7')) {
                    stream.next();
                    stream.next();
                    state.color = 'gray';
                } else if (stream.skipTo('&8')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_gray';
                } else if (stream.skipTo('&9')) {
                    stream.next();
                    stream.next();
                    state.color = 'blue';
                } else if (stream.skipTo('&a')) {
                    stream.next();
                    stream.next();
                    state.color = 'green';
                } else if (stream.skipTo('&b')) {
                    stream.next();
                    stream.next();
                    state.color = 'aqua';
                } else if (stream.skipTo('&c')) {
                    stream.skipTo('&c');
                    stream.next();
                    stream.next();
                    state.color = 'red';
                } else if (stream.skipTo('&d')) {
                    stream.next();
                    stream.next();
                    state.color = 'light_purple';
                } else if (stream.skipTo('&e')) {
                    stream.next();
                    stream.next();
                    state.color = 'yellow';
                } else if (stream.skipTo('&f')) {
                    stream.next();
                    stream.next();
                    state.color = 'white';
                }
            }
            if (state.color) {
                if (stream.skipTo('&0')) {
                    stream.next();
                    stream.next();
                    state.color = 'black';
                } else if (stream.skipTo('&1')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_blue';
                } else if (stream.skipTo('&2')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_green';
                } else if (stream.skipTo('&3')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_aqua';
                } else if (stream.skipTo('&4')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_red';
                } else if (stream.skipTo('&5')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_purple';
                } else if (stream.skipTo('&6')) {
                    stream.next();
                    stream.next();
                    state.color = 'gold';
                } else if (stream.skipTo('&7')) {
                    stream.next();
                    stream.next();
                    state.color = 'gray';
                } else if (stream.skipTo('&8')) {
                    stream.next();
                    stream.next();
                    state.color = 'dark_gray';
                } else if (stream.skipTo('&9')) {
                    stream.next();
                    stream.next();
                    state.color = 'blue';
                } else if (stream.skipTo('&a')) {
                    stream.next();
                    stream.next();
                    state.color = 'green';
                } else if (stream.skipTo('&b')) {
                    stream.next();
                    stream.next();
                    state.color = 'aqua';
                } else if (stream.skipTo('&c')) {
                    stream.next();
                    stream.next();
                    state.color = 'red';
                } else if (stream.skipTo('&d')) {
                    stream.next();
                    stream.next();
                    state.color = 'light_purple';
                } else if (stream.skipTo('&e')) {
                    stream.next();
                    stream.next();
                    state.color = 'yellow';
                } else if (stream.skipTo('&f')) {
                    stream.next();
                    stream.next();
                    state.color = 'white';
                } else {
                    stream.skipToEnd();
                }
                return state.color;
            } else {
                return null;
            }
        }
    };
});

var editor = CodeMirror.fromTextArea(document.getElementById('editor-name'), {
    mode: "colorCodes",
});

这是输出的一些图像:用一个颜色代码标记输出 带有两个颜色代码标记的输出

4

0 回答 0