我必须承认我是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

更新
tocsection 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,就可以很轻松地了解如何轻松定制事物。

07-24 09:35