FAQ

常见问题,其中包括我希望能经常提到的几个问题。

此页面在 Opera 中无法使用!

Prism 在 Opera 中可以正常使用。但是,此页面有时在 Opera 中似乎无法使用,这是因为主题切换器触发了 Opera 中的错误。此问题将很快得到修复。

使用正则表达式进行语法高亮不好吗?

的确,为了正确处理各种可能的语法场景,我们需要编写一个完全的解析程序。然而,在大多数 Web 应用程序和网站中,通常接受较小的误差范围,而偶尔出现的突出显示失败也并非世界末日。基于正则表达式的语法高亮器可能只有 99% 的精确度(实际百分比只是一个猜测​​),但作为误差范围小的交换条件,它提供了一些非常重要的优势

出于此原因,网络和桌面上的大多数语法高亮器都由正则表达式提供支持。其中包括编制本文时流行的原生应用程序(如 Espresso 和 Sublime Text)所使用的内部语法高亮器。当然,并非所有由正则表达式驱动的语法高亮器都是平等创建的。失败的次数和类型可能会有很大差异,具体取决于所使用的算法。 Prism 的已知故障记录在此页面上

默认情况下为什么会禁用异步高亮?

Web 工作线程适用于防止对大型代码块进行语法高亮时阻塞主 UI 线程。在大多数情况下,需要高亮合理大小的代码块,因此不需要此功能。此外,由于创建和终止工作线程需要开销,因此与同步高亮相比,使用 Web 工作线程实际上更新。在这些情况下,它只是看起来更快,因为它不会阻塞主线程。此外,由于 Web 工作线程以文件而不是对象的形式操作,因此挂接到 Prism 核心部分(例如修改语言定义)的插件在不在同一文件中包含的情况下(下载页面中的构建器将保护您免受此陷阱影响)无法使用。最后,Web 工作线程无法与 DOM 和大多数其他 API(例如控制台)交互,因此它们出了名的难以调试。

为什么移除预先存在的 HTML?

因为它会极大地复杂化代码,尽管它不是对大多数人而言至关重要的功能。如果它对你非常重要,你可以使用保持标记插件

如果预先存在的 HTML 被剥离,我如何突出代码的某些部分?

有很多方法可以解决它。你总是可以将代码块分解为多个部分,并在其周围包裹 HTML(或仅使用.highlight类)。你可以在主页的“基本用法”部分看到此操作的示例。

解决此限制的另一种方法是使用行高亮插件突出并链接到特定行和/或行范围。

我如何知道可以为每种语言设置哪些令牌样式?

每个高亮的令牌至少获得两个类:令牌和具有令牌类型(例如注释)的类以及任意数量的别名。别名可以看作是其他令牌类型,用于为特定令牌提供更通用的类以实现更简单的样式设置。你可以通过查看定义语言的对象的关键或使用下面的接口来查找不同类型的令牌。

语言

此外,你可以在此页面上找到标准令牌列表。

如何在不同的语言中对具有相同名称的令牌使用不同的高亮?

只需使用包含语言类的派生选择器。默认的prism.css执行此操作,为 JavaScript 字符串(非常常见)和 CSS 字符串(相对较少见)使用不同的颜色。以下是该代码的示例,其简化目的是为了说明该技术

.token.string {
	color: #690;
}

.language-css .token.string,
.style .token.string {
	color: #a67f59;
}

缩写的语言类(例如lang-css)将转换为其扩展形式,因此无需考虑它们。

相同的技术可用于区分 XML 标记名称空间和属性名称空间

.tag > .token.namespace {
	color: #b37298;
}
.attr-name > .token.namespace {
	color: #ab6;
}