首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在代码镜像编辑器中更改特定的令牌样式?

如何在代码镜像编辑器中更改特定的令牌样式?
EN

Stack Overflow用户
提问于 2020-11-16 21:25:11
回答 1查看 262关注 0票数 0
代码语言:javascript
复制
import React, { Component } from "react";
import { render } from "react-dom";
import CodeMirror from "react-codemirror";
import "./style.css";
import "codemirror/lib/codemirror.css";

class App extends Component {
  constructor() {
    super();
    this.state = {
      name: "CodeMirror",
      code: "Hello world Code Mirror"
    };
  }

  updateCode(newCode) {
    this.setState({
      code: newCode
    });
  }

  render() {
    let options = {
      lineNumbers: true
    };
    return (
      <div>
        <p>Start editing to see some magic happen :)</p>
        <CodeMirror
          value={this.state.code}
          onChange={this.updateCode.bind(this)}
          options={options}
        />
      </div>
    );
  }
}

render(<App />, document.getElementById("root"));

我正在开发一个记号赋予器,并希望从代码中突出显示一个特定的记号。

如何给特定的标记加下划线或加粗,比如本例中的world文本?

或者有没有其他的代码编辑库可以高亮显示给定开始和结束索引的任何子字符串?

EN

回答 1

Stack Overflow用户

发布于 2021-03-09 02:07:38

您可以使用CodeMirror.overlayMode来实现这一点。您需要定义自己的模式,该模式将解析codemirror的内容,并为您的自定义令牌设置一些类。

假设您在customHighlightsMode.js文件中定义了您的模式:

代码语言:javascript
复制
import CodeMirror from 'codemirror';
import 'codemirror/addon/mode/overlay';

CodeMirror.defineMode("customHighlights", function (config, parserConfig) {
    var myOverlay = {
        token: function (stream) {
            if (stream.match(/(world)/)) {
                return 'custom-keyword';
            } else {
                stream.next();
                return null;
            }
        }
    };
    return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop), myOverlay);
});

然后你需要为你的令牌设置一个带有样式的类:

代码语言:javascript
复制
.cm-custom-keyword {
  font-weight: bold;
  color: red;
}

然后你需要在CodeMirror选项中设置你的模式:

代码语言:javascript
复制
import React, { Component } from "react";
import CodeMirror from "react-codemirror";
import "codemirror/lib/codemirror.css";
import "./style.css"; // add .cm-custom-keyword class here
import "./customHighlightsMode";

class App extends Component {
  constructor() {
    super();
    this.state = {
      name: "CodeMirror",
      code: "Hello world Code Mirror"
    };
  }

  updateCode(newCode) {
    this.setState({
      code: newCode
    });
  }

  render() {
    let options = {
      lineNumbers: true,
      mode: { name: "customHighlights" },
    };
    return (
      <div>
        <p>Start editing to see some magic happen :)</p>
        <CodeMirror
          value={this.state.code}
          onChange={this.updateCode.bind(this)}
          options={options}
        />
      </div>
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64858883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档