默认属性值的优先级
属性赋值的优先级,从最高到最低依次是:
-
使用API或CLI定义的属性
-
文档中定义的属性
-
如果适用,该属性的默认值。
让我们使用`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=@`用来关闭这个设置。
让我们更新早先定义的属性赋值优先级列表,以反映这个额外的规则:
-
传递给API或CLI的属性值不以`@`结尾
-
文档中定义的属性
-
传递给API或CLI的属性,其值或名称以`@`结尾。
-
如果适用,该属性的默认值。
不管是否应用了优先级修饰符,属性赋值总是会覆盖默认值。