npm 包 highlight.js-tokens 使用教程

介绍

highlight.js-tokens 是一个在 JavaScript 中使用 highlight.js 包的解析器。它可以将代码解析成 highlight.js 高亮所需要的 tokens 序列。

如果你想在页面中渲染比 <pre> 标签或 <code> 标签更具可读性的代码块,或者你是一个开发者,正在寻找一种简单、易于使用的方法来将代码解析成 tokens 序列以进行自定义渲染或其他用途,那么 highlight.js-tokens 可能是你需要的解决方案。

安装

首先,你需要安装 highlight.js-tokens npm 包。你可以在你的项目中运行以下命令安装它:

--- ------- ------------------- ------

使用

一旦你已经安装了 highlight.js-tokens 包,你就可以在你的代码中使用它了。

字符串模式

highlight.js-tokens 最简单的用法是将它作为一个函数来调用,并将需要解析的代码字符串作为其唯一参数。它返回一个 tokens 序列数组,可以供使用 highlight.js 和其他库和插件使用。

例如,假设你想解析下面的 HTML 代码块:

--------- -----
------
  ------
    -----------------------
  -------
  ------
    --------- -----------
  -------
-------

你可以使用以下代码片段将其解析成一个 tokens 序列:

------ - -------- - ---- ----------------------

----- ---- - ---------- -----
------
  ------
    -----------------------
  -------
  ------
    --------- -----------
  -------
---------

----- ------ - ---------------
--------------------

解析结果将会是一个数组,包含所有的 tokens 序列:

-
  - ----- --------- ------ ---------- ------ --
  - ----- ------------- ------ ---- --
  - ----- --------- ------ -------- --
  - ----- ------------- ------ ---  - --
  - ----- --------- ------ -------- --
  - ----- ------------- ------ ---    - --
  - ----- --------- ------ --------- --
  - ----- ---------- ------ ---------- --
  - ----- --------- ------ ---------- --
  - ----- ------------- ------ ---  - --
  - ----- --------- ------ --------- --
  - ----- ------------- ------ ---  - --
  - ----- --------- ------ -------- --
  - ----- ------------- ------ ---    - --
  - ----- --------- ------ ------ --
  - ----- ---------- ------ ------ ------- --
  - ----- --------- ------ ------- --
  - ----- ------------- ------ ---  - --
  - ----- --------- ------ --------- --
  - ----- ------------- ------ ---- --
  - ----- --------- ------ --------- -
-

流模式

除了字符串模式之外,highlight.js-tokens 还支持 stream 模式,你可以像处理文件一样去处理输入,并且在解析的同时生成 tokens 序列。

为了在 stream 模式下使用 highlight.js-tokens,你需要创建一个可读流,该流将在每个 chunk 内部返回解析后的 tokens 序列。可读流的 chunk 是一个字符串或 Buffer,可以是完整的代码字符串,也可以是代码文件的一部分。

以下是使用 stream 模式解析代码的简单示例:

------ - ----------- - ---- ----------------------
------ -- ---- -----

----- -------- - ---------------

----- ------ - ----------------------------- - --------- ------- ---
------------------ ----- -- --------------------

----- ------ - --- --------------

------
  ----------- -------- -- -
    --------------------
  --
  ------------ ----- -- -------------------
  ---------- -- -- ---------------- -- ----------

--------------------

在这个例子中,当读取器读取 example.html 中的数据块时,可读流会自动将其解析为代码的 tokens 序列,并返回解析结果。

定制

你可以在 highlight.js-tokens 中定制处理程序,例如更改某些 tokens 类型的名称或值,或自定义处理代码字符串的方法。

为此,你可以指定自己的 options 对象,该对象将传递给 tokenize 函数。这个选项对象有以下属性:

属性 类型 默 认 描 述
language string null 语言的名称,可以是 highlight.js 中支持的任何语言
handlers object {} 处理程序的对象,用于处理 tokens 序列中的每个 tokens
batch number null 批量解析的数据块大小(流模式使用)
source string null 原始代码的文件名或文件路径(流模式使用)

自定义处理程序

处理程序允许你自定义 tokens 序列的处理方法。例如,你可能想将所有字符串类型的 token 转换为大写或小写。

以下是一个自定义处理程序的例子,它将所有字符串类型的 token 转为大写:

------ - -------- - ---- ----------------------

----- ---- - ------ --- - ------- ----------

----- -------- - -
  ------------- -
    ------ -
      ----- -----------
      ------ -------------------------
    --
  -
--

----- ------ - -------------- - -------- ---
--------------------

在这个例子中,我们定义了一个名为 handlers 的选项对象并将其传递给 tokenize 函数。我们在 handlers 对象中定义了一个 string 处理程序,它将所有类型为 string 的 token 转换为大写并返回新 tokens。

自定义语法

如果 highlight.js 中的语言定义不符合你的需要,或者你有自己定义的语言,你可以在 highlight.js-tokens 中自定义新的语法。

你可以通过传递新的语言选项来自定义新语法。这个选项对象应该具有以下属性:

属性 类型 描 述
id string 语言的唯一识别符
scopeName string 用于与 highlight.js 中的语言定义配置文件匹配的范围名称
aliases array 与此语言相关的别名
contains array 该语言定义的 tokens 序列,及每个 token 的语法信息和样式信息
keywords object 该语言定义的关键字及其样式信息
case_insensitive boolean 指定检查关键字是否区分大小写(默认为 false
subLanguage string 可选,用于指定包含在这个语言中的子语言,以便在其语法中解析代码

以下是一个自定义语法的例子。

假设我们自己定义了一个名为 foo 的语言,它具有一种特殊的类型的 tokens,即 foobar-ended,它表示经过特殊操作后的字符串结尾标记。

我们可以借助 highlight.js-tokens 定义这个语言。首先,我们需要在 highlight.js 中定义一个规则,以便它可以高亮我们需要的 tokens:

---------------------------- -- -- --
  --------- -
    -
      ---------- ---------
      ------ ----
      ---- ----
      --------- -
        -
          ------ -------
          ---- -------
          ------------ ------
        -
      -
    --
    -
      ---------- ---------
      ------ ----
      ---- ----
      ------------- -----
      ----------- -----
      --------- -
        -
          ---------- ---------------
          ------ ------
          ---- -----
        -
      -
    -
  -
----

然后,我们可以定义一个名为 foo 的新语言选项,这个选项可以告诉 highlight.js-tokens 如何解析我们的语言。我们可以将以下代码添加到我们的项目中:

----- --- - -
  --- ------
  ---------- -------------
  -------- --------
  --------- -
    -
      ---------- ---------------
      ------ ------
      ---- -----
    --
    -
      ---------- ---------
      ------ ----
      ---- ----
      --------- -
        -
          ------ -------
          ---- -------
          ------------ ------
        -
      -
    -
  -
--

最后,我们只需要传递自定义语言选项到 tokenize 函数,就可以解析自定义语言的代码了。这是一个例子:

------ - -------- - ---- ----------------------

----- ---- - ----- --- - -- ------
----- ------- - - --------- --- --

----- ------ - -------------- ---------
--------------------

这将会输出以下 tokens 形式的结果:

-
  - ----- --------- ------ --- --
  - ----- --------- ------ ---- - --
  - ----- --------------- ------ ----- --
  - ----- --------- ------ --- -
-

总结

highlight.js-tokens 提供了一种简单、灵活、易于使用的方法来将代码解析成 tokens 序列。你可以将其作为一个函数调用,传递一个代码字符串并返回一个 tokens 序列数组,或者你可以在流模式下使用它,以便逐块解析大型数据。

你可以使用选项对象来自定义处理程序、自定义语法或提供其他定制选项。这让 highlight.js-tokens 变得非常灵活,可以满足大多数开发者的需求。

希望这篇文章对你有帮助,如果你有任何问题或反馈,请在评论区留言。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/5eedae94b5cbfe1ea0610e74


猜你喜欢

  • npm包@activfinancial/middleware使用教程

    在前端领域,有很多常用功能都有对应的npm包,我们可以轻松地借用这些包的代码来完成我们的开发。@activfinancial/middleware就是这样的一个npm包,它为我们提供了一种非常简便的数...

    4 年前
  • npm 包 @types/promise.prototype.finally 使用教程

    前言 Promise.prototype.finally() 是 ES2018 规范引入的 Promise 原型链上的方法,由于 Promise 的状态一旦确定,就无法更改,因此需要使用 Promis...

    4 年前
  • npm 包 @file-services/path 使用教程

    在前端开发过程中,路径处理是一个非常常见的操作。而 @file-services/path 是一个非常实用的 npm 包,它提供了一些简单但非常实用的函数来处理路径,以便我们更轻松地进行相关操作。

    4 年前
  • npm 包 @file-services/memory 使用教程

    在前端开发中,我们经常需要处理文件和文件系统相关的操作。而 @file-services/memory 是一个非常方便的 npm 包,它提供了内存中的文件系统,可以在内存中快速的读写文件,不需要实际的...

    4 年前
  • npm 包 @angular-builders/jest 使用教程

    前言 在前端开发过程中,测试是非常重要的环节。而在 Angular 应用中,使用 Jest 进行单元测试的需求是非常普遍的。@angular-builders/jest 是一个能够使我们在 Angul...

    4 年前
  • npm 包 @abp/utils 使用教程

    在前端开发过程中,我们经常需要使用一些工具包来帮助我们快速开发。可以说,这些工具包是前端开发的必需品。一个好用的工具包不仅能够提高我们的开发效率,而且能够减少我们的重复劳动,提升我们的工作质量。

    4 年前
  • npm 包 @file-services/node 使用教程

    什么是 @file-services/node @file-services/node 是一个 Node.js 包,它提供了一组跨平台的文件系统 API,方便我们在 Node.js 环境下对文件进行操...

    4 年前
  • npm 包 @ngxs/router-plugin 使用教程

    在前端开发中,路由是页面导航的核心,它可以让用户在页面间快速切换,完成所需操作。@ngxs/router-plugin 是一个用于 Angular 应用中的路由插件,它可以帮助我们更加便捷和高效地管理...

    4 年前
  • npm 包 @file-services/types 使用教程

    在前端开发中,我们经常需要使用不同的文件操作工具来处理文件。为了更好地管理文件操作相关的代码,我们可以使用 npm 包 @file-services/types 提供的文件类型定义实现更高效的编码。

    4 年前
  • npm 包 @file-services/utils 使用教程

    在前端开发中,文件操作是一个必不可少的环节,而在实现文件操作时使用一些工具包可以大大的提高开发效率。@file-services/utils 就是这样一个优秀的工具包, 它提供了一系列在文件操作中常用...

    4 年前
  • npm 包 @file-services/overlay 使用教程

    简介 @file-services/overlay 是一个非常实用的 npm 包。它可以让开发者在文件系统中动态创建一个虚拟文件系统,以便方便地管理、操作文件和目录。

    4 年前
  • npm 包 @ngxs/storage-plugin 使用教程

    在 Angular 应用中使用状态管理工具 NGXS 时,我们时常需要将一些状态信息存储在浏览器的本地 Storage 中,以便实现数据的持久化。而 npm 包 @ngxs/storage-plugi...

    4 年前
  • npm 包 @jsdevtools/coverage-istanbul-loader 使用教程

    简介 在前端开发中,代码覆盖率是一项非常重要的指标。通过统计代码覆盖率,可以确定哪些代码没有被测试,从而提高代码质量,减少可能出现的 bug。而要统计代码覆盖率,就需要用到一些工具,比如 Istanb...

    4 年前
  • npm 包 parse5-sax-parser 使用教程

    npm 包 parse5-sax-parser 使用教程 在前端开发过程中,解析 HTML 这一过程显得尤为重要。而 parse5-sax-parser 这个 npm 包便是解析 HTML 的一个好帮...

    4 年前
  • npm 包 @ngxs/store 使用教程

    在现代的前端开发中,状态管理是一个非常关键的问题。前端实现的复杂性越来越高,数据状态的维护会变得越来越困难,这个时候我们就需要一个可靠、高效的状态管理方案。@ngxs/store 是一个非常优秀的状态...

    4 年前
  • npm 包 just-clone 使用教程

    相信前端工程师都知道,代码复用是非常重要的一件事情,它可以提高代码的可维护性和开发效率。在前端开发中,我们会经常用到一些优秀的第三方库和插件,这也就需要我们了解 npm 包管理工具和它的使用方法。

    4 年前
  • npm 包 just-compare 使用教程

    在前端开发中,我们经常需要对两个对象或数组进行比较,以实现不同的功能。通常我们会写大量重复的代码来比较它们,这会浪费我们大量的时间和精力。为此,我们可以使用 npm 包 just-compare 来帮...

    4 年前
  • npm 包 snq 使用教程

    在 JavaScript 开发中,我们经常需要处理复杂的嵌套数据。snq 是一个非常方便的 npm 包,它可以让我们轻松地对嵌套数据进行数据提取操作。本文将详细介绍 snq 的使用方法,包括基本用法、...

    4 年前
  • npm 包 @vue/cli-test-utils 使用教程

    前言 随着前端技术的不断发展,测试也成为 web 应用开发中不可缺少的一部分。而在 Vue 项目中,@vue/cli-test-utils 是一个非常好用的测试工具。

    4 年前
  • npm包 @babel/helper-compilation-targets使用教程

    前言 在前端开发中,我们经常需要对源代码进行转换和编译操作,以便适配不同的浏览器和环境。而在这个过程中,Babel 作为一款强大的 JavaScript 编译器,在前端开发中起到了不可替代的作用。

    4 年前

相关推荐

    暂无文章