源码高亮
源代码高亮应用于被分配了source块样式(显式或隐式)和源代码语言的文本。源代码语言定义在块上或从source-language文档属性继承。
source-highlighter 属性
源代码高亮默认未启用。要启用源代码高亮,您必须在文档头部使用属性条目设置source-highlighter属性。
= Document Title
:source-highlighter: <value>
例如,以下是如何使用 Rouge 启用语法高亮
= Document Title
:source-highlighter: rouge
您也可以使用 CLI 或 API 声明此属性。
可用的源代码高亮器
表 1 列出了source-highlighter属性的识别值以及支持使用语法高亮库的工具链。
| 库 | 值 | 工具链 |
|---|---|---|
CodeRay |
|
Asciidoctor, AsciidoctorJ, Asciidoctor PDF |
highlight.js |
|
Asciidoctor, AsciidoctorJ, Asciidoctor.js |
Pygments |
|
Asciidoctor, Asciidoctor PDF |
Rouge |
|
Asciidoctor, AsciidoctorJ, Asciidoctor PDF |
如果您使用的是客户端库 Highlight.js,则无需安装其他库。生成的 HTML 将从 CDN、自定义 URL 或文件路径加载所需的源文件。
应用源代码高亮
要对源代码块应用高亮,您必须指定源代码语言。如果该块是字面量块或段落,您还必须指定source样式。
AsciiDoc 语言不指定有效的源代码语言值列表。相反,可用的源代码语言值由语法高亮库定义。
您可以在 Rouge 文档中找到 Rouge 支持的可用语言列表。您可以通过运行pygmentize -L formatters来打印 Pygments 支持的可用语言列表。highlight.js 支持的可用语言取决于您使用的 highlight.js 捆绑包。 |
通常,源代码语言值是语言的正确名称(小写)(例如,ruby、java)。大多数语法高亮器也接受使用源文件名扩展名(例如,js、rb),尽管保持一致很重要。如果语法高亮器不识别或不支持源代码语言,该块将不会被高亮。
[#hello,ruby] (1) (2) (3)
---- (4)
require 'sinatra'
get '/hi' do
"Hello World!"
end
----
| 1 | 由于指定了源代码语言,因此source块样式是隐式的。 |
| 2 | 可以通过使用id的简写语法(#)将其添加到样式中来为块添加可选的 ID。 |
| 3 | 将源代码语言分配给第二个位置。 |
| 4 | 隐式源代码块使用列表结构容器。 |
示例 1 的结果显示在下面。
require 'sinatra'
get '/hi' do
"Hello World!"
end
[source,xml] (1)
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
(2)
This is normal content.
| 1 | 将属性列表放在段落的正上方。在这种情况下,始终需要source样式。 |
| 2 | 遇到空行后,源代码块结束。 |
示例 2 的结果显示在下面。
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
这是正常内容。
shell vs console
shell 和 console 的源代码语言经常被混淆。shell语言用于 shell 脚本的内容,通常由通用的 shebang 指示。如果 shell 脚本是为特定 shell 编写的,您可能会改用该语言(例如,bash或zsh)。console语言用于表示输入到控制台(即终端应用程序)的文本。
以下是一个何时使用shell的示例
[,shell]
----
#!/bin/sh
fail () {
echo
echo "$*"
echo
exit 1
} >&2
JAVACMD=java
which java >/dev/null 2>&1 || fail "ERROR: no 'java' command could be found in your PATH.
exec "$JAVACMD" "$@"
----
以下是一个何时使用console的示例
[source,console]
$ asciidoctor -v
通常,语法高亮器会解析每行开头的提示符(例如,$),然后使用 shell 语言处理其余文本。
通常,基本的控制台命令使用字面量段落表示,因为在这种情况下,从语法高亮中获得的收益不大。
启用行号
如果源代码高亮器支持此功能,您可以通过在块上设置linenums选项来为源代码块启用行号。
行号由语法高亮器添加,而不是 AsciiDoc 转换器。因此,要在源代码块上获取行号,您必须设置source-highlighter属性,并且其引用的库必须支持行号。使用 Asciidoctor 时,唯一不支持行号的语法高亮器是 highlight.js。 |
linenums选项可以作为名为linenums的普通块选项指定,也可以作为块上的第三个位置属性指定。位置属性的值无关紧要,但通常使用linenums。
linenums选项启用行号[%linenums,ruby]
----
puts 1
puts 2
puts 3
----
[,ruby,linenums]
----
puts 1
puts 2
puts 3
----
source-language 属性
如果您的绝大多数源代码块使用相同的源代码语言,您可以在文档头部设置source-language属性并为其分配一个语言。设置source-language文档属性会隐式地将列表块提升为源代码块。
= Document Title
:source-highlighter: pygments
:source-language: java
----
public void setAttributes(Attributes attributes) {
this.options.put(ATTRIBUTES, attributes.map());
}
----
请注意,在这种情况下,不必在块上指定source样式或源代码语言。要制作一个列表块,您必须在块上设置listing样式。
您可以通过在块上直接指定源代码语言来覆盖全局源代码语言。
= Document Title
:source-highlighter: pygments
:source-language: java
[,ruby]
require 'sinatra'