首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Highlight.js自定义语言定义

Highlight.js自定义语言定义
EN

Stack Overflow用户
提问于 2015-02-20 13:41:49
回答 1查看 6.2K关注 0票数 7

我正在尝试为highlight.js创建语言定义。但不起作用。我有个例子。

在本例中,我试图创建自定义的"aaa“语言,它与JSON相同。registerLanguage函数接收与默认JSON突出显示函数相同的函数(来自highlight.js源)。

hljs.listLanguages()显示,该语言已经注册。

之后,我给hljs.highlightBlock(block)打电话。

<code class="aaa">强制使用自定义的"aaa“语言,在这种情况下,hljs.highlightBlock(block)不会更改内容。

代码语言:javascript
复制
$(document).ready(function() {
  // registering aaa language (JSON alias)
  // code from https://github.com/isagalaev/highlight.js/blob/master/src/languages/json.js
  hljs.registerLanguage("aaa", function(hljs) {
    var LITERALS = {
      literal: 'true false null'
    };
    var TYPES = [
      hljs.QUOTE_STRING_MODE,
      hljs.C_NUMBER_MODE
    ];
    var VALUE_CONTAINER = {
      className: 'value',
      end: ',',
      endsWithParent: true,
      excludeEnd: true,
      contains: TYPES,
      keywords: LITERALS
    };
    var OBJECT = {
      begin: '{',
      end: '}',
      contains: [{
        className: 'attribute',
        begin: '\\s*"',
        end: '"\\s*:\\s*',
        excludeBegin: true,
        excludeEnd: true,
        contains: [hljs.BACKSLASH_ESCAPE],
        illegal: '\\n',
        starts: VALUE_CONTAINER
      }],
      illegal: '\\S'
    };
    var ARRAY = {
      begin: '\\[',
      end: '\\]',
      contains: [hljs.inherit(VALUE_CONTAINER, {
        className: null
      })], // inherit is also a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents
      illegal: '\\S'
    };
    TYPES.splice(TYPES.length, 0, OBJECT, ARRAY);
    return {
      contains: TYPES,
      keywords: LITERALS,
      illegal: '\\S'
    };
  });
  console.log(hljs.listLanguages()); // aaa in the list
  $('pre code').each(function(i, block) {
    hljs.highlightBlock(block);
  });
});
代码语言:javascript
复制
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/styles/tomorrow.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/highlight.min.js"></script>
<pre><code class="aaa"> 
{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}
</code></pre>

EN

回答 1

Stack Overflow用户

发布于 2015-10-22 10:04:24

Highlight.js在构建过程中有一个小型化/打包过程,重新命名语言定义对象的字段。这意味着它们在http://highlightjs.readthedocs.org/en/latest/language-guide.html中描述的对象不能用于分布式库。只有在构建时之前定义的语言才会这样工作。

您可以在缩小的荧光try文件中查找registerLanguage的用法,以尝试并反向工程字段的名称。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28630379

复制
相关文章

相似问题

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