在赋值时更改替代品
如果你希望一个属性条目的值*按原样*使用(不受替换影响),或者你希望改变应用的替换规则,可以使用内联pass宏将该值包围起来(即`pass:[]`)。内联pass宏接受一个目标槽中的零个或多个替换列表,这可以用来控制对值应用哪些替换。如果没有指定替换,就不会应用任何替换。
为了让内联宏在这个上下文中起作用,它必须完全包围属性值。如果它用在值中的其他地方,将会被忽略。
避免对属性条目的值应用替换的方法如下:
:cols: pass:[.>2,.>4]
如果你在一个依赖未改变文本的地方引用属性,例如表格的`cols`属性值,这可能会有用。
这是我们如何应用引用替换到属性条目的值:
:app-name: pass:quotes[MyApp^2^]
在内部,值被存储为 MyApp<sup>2</sup>
。你可以使用这个技巧查看存储在属性中的值:
[subs=attributes+]
------
{app-name}
------
您也可以使用单字符别名`q`来指定替换。
:app-name: pass:q[MyApp^2^]
内联传递宏有点像是属性值预处理器。如果处理器检测到一个内联传递宏完全包围了属性值,它会:
-
从宏的目标槽读取替换列表
-
将宏中的值解开
-
将替代应用到值上
如果宏缺失,该值将通过头部替换组进行处理。
替换在文档外部定义的属性
与属性条目不同,替换项*不会*应用于传递给AsciiDoc处理器的属性值。可以使用`-a` CLI选项或`:attributes` API选项将属性传入AsciiDoc处理器。当属性在文档外部定义时,它们的值必须事先准备好,以便作为参考时可以直接使用。如果值包含XML特殊字符,这意味着这些字符必须预先转义。例外情况是,如果你打算保留值中的XML/HTML标签。如果值需要引用其他属性,那么这些值必须预先替换。
让我们考虑一种情况,即在文档外部定义的属性值包含有和号(&)。为了在AsciiDoc文档中安全地引用这个属性,必须转义这个和号:
$ asciidoctor -a equipment="a bat & ball" document.adoc
你可以按如下方式引用属性:
要玩,你需要{equipment}。
如果属性要在文档中定义,就不需要这种转义了。
设备:一只球拍和一个球
这是因为,相比之下,替换操作是应用于属性条目的值上。
在引用属性时更改替换项
您也可以在解析属性时更改应用于该属性的替换内容。这是通过操作应用于引用位置的文本的替换来完成的。例如,以下是我们如何让处理器对一个属性的值应用引号替换的方式:
应用名称:MyApp²
应用程序被称为 {app-name}。
注意到我们交换了`attributes`和`quotes`替换的顺序。这种策略类似于对属性值进行后处理。