笙默考试管理系统-MyExamTest----codemirror(71)

本文介绍了笙默考试管理系统中使用codemirror实现的代码编辑器,专注于CSS和HTML混合模式的语法解析,展示了如何处理标签嵌套和代码切换功能。
摘要由CSDN通过智能技术生成

笙默考试管理系统-MyExamTest----codemirror(71

  

目录

一、 笙默考试管理系统-MyExamTest----codemirror

二、 笙默考试管理系统-MyExamTest----codemirror

三、 笙默考试管理系统-MyExamTest----codemirror

四、 笙默考试管理系统-MyExamTest----codemirror

五、 笙默考试管理系统-MyExamTest----codemirror

 

  • 笙默考试管理系统-MyExamTest----codemirror

    return {

        startState: function(base) {

            return {tokenize: tokenBase,

                baseIndent: base || 0,

                stack: []};

        },

        token: function(stream, state) {

            if (stream.eatSpace()) return null;

            var style = state.tokenize(stream, state);

  • 笙默考试管理系统-MyExamTest----codemirror

            var context = state.stack[state.stack.length-1];

            if (type == "hash" && context == "rule") style = "atom";

            else if (style == "variable") {

                if (context == "rule") style = "number";

                else if (!context || context == "@media{") style = "tag";

            }

            if (context == "rule" && /^[\{\};]$/.test(type))

                state.stack.pop();

            if (type == "{") {

                if (context == "@media") state.stack[state.stack.length-1] = "@media{";

                else state.stack.push("{");

            }

            else if (type == "}") state.stack.pop();

            else if (type == "@media") state.stack.push("@media");

            else if (context == "{" && type != "comment") state.stack.push("rule");

            return style;

        },

  • 笙默考试管理系统-MyExamTest----codemirror

        indent: function(state, textAfter) {

            var n = state.stack.length;

            if (/^\}/.test(textAfter))

                n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1;

            return state.baseIndent + n * indentUnit;

        },

        electricChars: "}"

    };

});

  • 笙默考试管理系统-MyExamTest----codemirror

CodeMirror.defineMIME("text/css", "css");

CodeMirror.defineMode("htmlmixed", function(config, parserConfig) {

    var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true});

    var jsMode = CodeMirror.getMode(config, "javascript");

    var cssMode = CodeMirror.getMode(config, "css");

    function html(stream, state) {

        var style = htmlMode.token(stream, state.htmlState);

        if (style == "tag" && stream.current() == ">" && state.htmlState.context) {

            if (/^script$/i.test(state.htmlState.context.tagName)) {

                state.token = javascript;

                state.localState = jsMode.startState(htmlMode.indent(state.htmlState, ""));

                state.mode = "javascript";

            }

            else if (/^style$/i.test(state.htmlState.context.tagName)) {

                state.token = css;

                state.localState = cssMode.startState(htmlMode.indent(state.htmlState, ""));

                state.mode = "css";

            }

        }

        return style;

    }

    function maybeBackup(stream, pat, style) {

        var cur = stream.current();

        var close = cur.search(pat);

        if (close > -1) stream.backUp(cur.length - close);

        return style;

}

  • 笙默考试管理系统-MyExamTest----codemirror

    function javascript(stream, state) {

        if (stream.match(/^<\/\s*script\s*>/i, false)) {

            state.token = html;

            state.curState = null;

            state.mode = "html";

            return html(stream, state);

        }

        return maybeBackup(stream, /<\/\s*script\s*>/,

            jsMode.token(stream, state.localState));

    }

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N201871643

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值