默认属性值的优先级

属性赋值的优先级,从最高到最低依次是:

  1. 使用API或CLI定义的属性

  2. 文档中定义的属性

  3. 如果适用,该属性的默认值。

让我们使用`imagesdir`属性来展示优先级是如何工作的。

"`imagesdir` 属性的默认值是一个空字符串。因此,如果 imagesdir 属性没有被赋值(无论是在文档、API 还是 CLI 中),处理器将会给它赋上空字符串的默认值。如果在文档中设置了 imagesdir 属性(即被赋予了新的值,例如 images),那么这个值将覆盖默认值。最后,如果通过 API 或 CLI 给 imagesdir 属性赋值,那么这个值将覆盖默认值以及在文档中赋予的值。"

通过使用在下一节中介绍的修饰符,可以改变这个优先级顺序。

修改赋值的优先级

您可以允许文档重新分配通过API或CLI定义的属性,方法是在属性值的末尾或属性名称的末尾添加`@优先级修饰符。添加这个修饰符会降低优先级,以至于文档中的赋值仍然占主导地位。我们有时称这种做法为“`软设置”属性。这个特性对于给属性分配默认值很有用,同时仍然让文档控制自己的命运。

Note
@`修饰符在赋值之前被移除。

这是一个示例,展示了如何使用命令行界面(CLI)设置`imagesdir`,且具有较低的优先级:

asciidoctor -a imagesdir=images@ doc.adoc

或者,你可以将修饰符放在属性名的末尾:

$ asciidoctor -a imagesdir@=images doc.adoc

现在可以从文档内覆盖`imagesdir`属性的值。

= 文档标题
:imagesdir: new/path/to/images

要从CLI或API中软解除属性的设置,您可以使用以下语法:

!name=@

领先的`!用来取消设置属性,而@用来降低赋值的优先级。这种赋值几乎总是用来取消默认值,同时还允许文档分配一个新的值。一个这样的例子是`sectids,它默认是启用的。`!sectids=@`用来关闭这个设置。

让我们更新早先定义的属性赋值优先级列表,以反映这个额外的规则:

  1. 传递给API或CLI的属性值不以`@`结尾

  2. 文档中定义的属性

  3. 传递给API或CLI的属性,其值或名称以`@`结尾。

  4. 如果适用,该属性的默认值。

不管是否应用了优先级修饰符,属性赋值总是会覆盖默认值。