如何在codemirror中以我的模式为特定颜色添加颜色注释

时间:2017-05-28 19:21:53

标签: javascript css codemirror

我想在codemirror中为特定颜色的 / * * / 之间的注释添加颜色...我搜索并找到样本为"之间的字符串着色。 " ,它运作良好。

当我更换" " 在代码中 / * * / ,然后代码不会为我的评论着色。

工作代码是:

CodeMirror.defineMode("strings", function() {
  return {
    startState: function() {return {inString: false};},
    token: function(stream, state) {
      // If a string starts here
      if (!state.inString && stream.peek() == '"') {
        stream.next();            // Skip quote
        state.inString = true;    // Update state
      }

      if (state.inString) {
        if (stream.skipTo('"')) { // Quote found on this line
          stream.next();          // Skip quote
          state.inString = false; // Clear flag
        } else {
           stream.skipToEnd();    // Rest of line is string
        }
        return "string";          // Token style
      } else {
        stream.skipTo('"') || stream.skipToEnd();
        return null;              // Unstyled token
      }
    }
  };
});

我的尝试: 注意我只能将" 替换为 / " / 但代码不起作用 这是我的在线试用jsbin but not work

那我错了什么?

1 个答案:

答案 0 :(得分:1)

documentation中所述,

  

peek()→string

     

返回流中的下一个字符而不推进它。将在行尾返回null。

stream.peek()只返回1个字符,您要匹配"/*",即2个字符。

您想使用stream.match()

  

匹配(pattern:string,?consume:boolean,?caseFold:boolean)→boolean
  匹配(模式:regexp,?消耗:布尔值)→数组

     

就像一个多角色吃 - 如果消费是真的或没有给出 - 或者是一个没有更新流位置的前瞻 - 如果它是假的。 pattern可以是字符串,也可以是以^开头的正则表达式。当它是一个字符串时,caseFold可以设置为true以使匹配不区分大小写。成功匹配正则表达式后,返回的值将是匹配返回的数组,以防您需要提取匹配的组。

如果当前流位置与true匹配并且将吃掉2个字符,则会返回"/*"

stream.match('/*', true)