我必须承认我是AsciiDoc和ASciiDoctor的新手。
我要完成的工作是使用groovy渲染给定的AsciiDoc模板(https://github.com/masch70/arc42-template-asciidoc)。我的解决方案是利用AsciiDoctor Java接口,它似乎是对用jRuby运行的AsciiDoc的重写。
到目前为止,代码运行良好:
@Grab('org.asciidoctor:asciidoctor-java-integration:0.1.4')
import org.asciidoctor.*
def asciidoctor = Asciidoctor.Factory.create()
def output = asciidoctor.renderFile(new File('index.ad'),[
'in_place':true,
'section-numbers':true,
'header_footer':true,
])
但似乎忽略了对我来说还不错的include部分:
include::sections/02_architecture_constraints.ad[]
代替包含文件,而是呈现到文件的链接。
AsciiDoctor手册说支持以下内容:http://asciidoctor.org/docs/user-manual/#include-directive,所以问题是,我在做什么错?
最佳答案
也添加一个safe
选项。默认情况下,API的safe
选项为SECURE
或20(整数值),这将禁用要呈现的include
指令。您可以使用以下任何键/值对:
'safe':'SAFE'
'safe': 1
'safe':'SERVER'
'safe': 10
'safe':'UNSAFE' //If you want
'safe': 0
下面应该工作。
def output = asciidoctor.renderFile(new File('index.ad'),[
'in_place':true,
'header_footer':true,
'safe':'SAFE'
])
有关更多详细信息,请参考Running AsciiDoctor Securely。
更新
toc
和section numbers
是CLI中的属性,因此我们只需要在选项中添加必需的属性即可。最简单的方法:
def output = asciidoctor.renderFile(new File('index.ad'),[
'in_place':true,
'header_footer':true,
'safe':'SAFE',
'attributes': [toc: true, numbered: true] //I suppose
])
但是以上内容与我们首先要抽象的底层ascii doc实现紧密结合。 Asciidoctor提供了有用的Builder模式来克服这种混乱情况。
import static org.asciidoctor.AttributesBuilder.attributes
import static org.asciidoctor.OptionsBuilder.options
import org.asciidoctor.Placement
Attributes attributes = attributes().tableOfContents(true)
.tableOfContents2(Placement.LEFT)
.sectionNumbers(true)
.get()
Options options = options().inPlace(true)
.headerFooter(true)
.attributes(attributes)
.get()
def output = asciidoctor.renderFile(new File('index.ad'), options)
访问此package from asciidoctor java integration,就可以很轻松地了解如何轻松定制事物。