我们很高兴宣布http://rubygems.org/gems/asciidoctor[Asciidoctor 0.1.3]的发布。阅读安装或更新Asciidoctor以了解如何进行设置。

Asciidoctor是一个开源文本处理器和发布工具链,使用Ruby编写,用于将AsciiDoc标记转换为HTML 5、DocBook 4.5和自定义格式。Asciidoctor是用Ruby编写的,但可以通过Java集成库被任何JVM语言使用。

这个版本标志着一个重要的里程碑。自从Dan开始使用Asciidoctor并推动它向前发展,至今已经整整6个月了。从那时起,项目确实已经走了很长的路。通过这次发布,我们不仅仅是在实现AsciiDoc,更是在推进它,正如这篇文章所强调的那样。

概述

这个发布周期的焦点是:

  • AsciiDoc 符合性(是的,仍然)

  • 新的速记语法和宏

  • 改进的样式

  • Markdown 兼容性

  • 修复错误

我们收到的宝贵反馈已帮助 Asciidoctor 达到了 99.5% 的 AsciiDoc 语法符合度,并且涵盖了 Markdown 语法的关键部分。这些改进为 Asciidoctor 与前一版本相比增加了 10% 的速度提升,几乎是原生 AsciiDoc 处理器的 40倍速

本文档涵盖了大多数新颖而值得注意的修复和增强。如果你急着想了解,这里有个简短的版本。

  • 文件编码和Windows路径错误已修复!

  • 受Haml/Slim/Jade启发的语法,用于定义块内容的id和角色。

  • 使用块定界符的第一个位置来设置表格格式的速记语法。

  • 在定义块引用时使用替代的“气引号”定界符。

  • 对Markdown块引用和标题的支持(与围栏代码块一起使用)

  • 基于字体的警告图标由http://fortawesome.github.io/Font-Awesome[Font Awesome^]提供支持,CSS 基于的标号图标。

  • 作为浮动锚点或链接的标题文本的相关部分标题

  • 链接的目标窗口和角色(即CSS类)属性

  • 使用 google-code-prettify 来高亮源代码块的选项

  • include 宏目标中解析的属性

  • 对包含内容的块缩进进行控制

  • 目录侧边栏的放置(toc2

  • 键盘快捷键、菜单选择以及UI按钮的宏(实验性的)

  • 目录按照节标题的编号设置进行排版

  • 内联文档类型用于渲染简单、非结构化的内容

  • 传递属性给Asciidoctor API的简写语法

  • 默认样式表中的一般样式改进

  • 更新了asciidoc.conf兼容性配置

  • 测试套件中有1000多个测试

  • 解决了超过 40个问题

继续阅读以了解这些重大改进!

使用新的速记语法更快地编写!

快捷方式设置+id+和+role+块属性

在Haml、Jade和Slim的精神指导下,Asciidoctor允许你使用属性快捷方式为块分配+id+和+role+属性。这种简写语法对于用AsciiDoc创建演示文稿非常有用,因为在标记中需要大量的样式类。

考虑以下AsciiDoc标记:

[[goals]]
[role="incremental"]
* Goal 1
* Goal 2

在Asciidoctor中,现在可以写成:

[#goals.incremental]
* Goal 1
* Goal 2

''The prefix is recognized as shorthand for id=, and the . prefix is recognized as shorthand for role=.'' 翻译成中文是:识别 '' 前缀作为 '+id=' 的简写,识别 '.' 前缀作为 'role=' 的简写。

两段源代码生成了以下的HTML:

<div id="goals" class="ulist incremental">
<ul>
<li><p>Goal 1</p></li>
<li><p>Goal 2</p></li>
</ul>
</div>

这种简写符号是块样式的一部分。因此,它充分利用了第一个属性位置。

假设你想要从一个开放的区块创建一个块引用,并且为其分配一个id和角色。你需要在第一个属性位置前加上样式 quote ,然后把+#+ (id)和+.(+role)分别对应添加,正如这个例子所示:

“路?我们要去的地方,不需要道路。”

这生成以下HTML代码:

<div id="roads" class="quoteblock dramatic">
<blockquote>
<div class="paragraph">
<p>Roads? Where we're going, we don't need roads.</p>
</div>
</blockquote>
<div class="attribution">
&#8212; Dr. Emmett Brown
</div>
</div>

关于这种记法,你还需要了解一些其他事项:

  • 要使用简写语法指定多个角色,请用点分隔它们。

    例如,+[.summary.incremental]+ 会发出HTML属性 +class="summary incremental"+

  • 在简写语法中,id和role值的顺序并不重要。

    例如,[#goals.incremental][.incremental#goals] 生成的输出是相同的。

了解更多关于Asciidoctor文档的信息:块属性

简写记法用于设置 csvdsv 表格格式

表格块定界符的第一个位置(即,|===)可以被数据定界符替换,以设定表格格式。

如下所示,不是使用块属性来指定+csv+格式:

|===
[format="csv"]
a,b,c
|===

你可以简单地将开头的竖线 (|) 替换为逗号 (,):

=== a,b,c ,===

同样地,通过将前导的管道符号(|)替换为冒号(:),可以指定+dsv+格式。

a:b:c

现在,您只需要区块属性列表来设置任何其他选项。

在Asciidoctor文档中学习更多关于表格的信息

替代的引用块语法

Asciidoctor 0.1.3带来了三种新的语法变体,用于标记引用块:

引用段落。空气引号。Markdown风格。

这是一个传统的AsciiDoc引用块的例子,包含三个部分(引用文本、归属和来源):

[quote, "托马斯·杰斐逊", "托马斯·杰斐逊文集:第11卷"]
____
我认为,偶尔的小叛乱是一件好事,这在政治世界中就像风暴在自然界中一样必要。
____

这里有三个新的选择。

引用段落引文区块

你可以通过以下方式将单个段落变成引用块:

  1. 将它用双引号包围起来 b. 在引用文本下方添加一个可选的署名(前缀为两个破折号)。

我认为,偶尔的小反抗是一件好事,它在政治世界中就像自然界中的风暴一样必要。
-- 托马斯·杰斐逊,托马斯·杰斐逊文集:第11卷

这是缩写引用语法的结果:

我认为,偶尔的小范围叛乱是一件好事,这在政治世界中就像自然界的风暴一样必要。
— 托马斯·杰弗逊,《托马斯·杰弗逊文集:第11卷》

手指引号

Asciidoctor识别两个"`"之间的文本作为引用块。空气引号是自围栏代码块以来最好的东西。

[]
如果你不知道自己要去哪里,任何道路都能带你到达那里。

这种语法灵感来自于人们在引用某人时用手指做的手势,比如著名的http://knowyourmeme.com/memes/dr-evil-air-quotes[Dr. Evil]空中引号。

Markdown风格的引用区块

Asciidoctor 甚至支持 Markdown 风格的区块引用:

> 我认为偶尔的小反叛是一件好事,
> 和在政治世界中一样必要,就像在物理世界中的风暴。
> -- 托马斯·杰斐逊,《托马斯·杰斐逊文集:第11卷》

这种标记的渲染效果与上面的例子相同。

就像Markdown一样,Asciidoctor支持在块引用中嵌入块内容,包括嵌套的块引用:

Markdown风格的引用块包含块内容
> > 有什么新鲜事吗?
>
> 我的AsciiDoc里有了Markdown!
>
> > 比如说有什么?
>
> * 引用块
> * 标题
> * 围栏代码块
>
> > 还有更多吗?
>
> 有的。AsciiDoc和Markdown已经有很多共同的语法了。

这是这段对话的呈现方式:

有什么新鲜事吗?

我的AsciiDoc中有Markdown语法啦!

比如说呢?

  • 引用块

  • 标题

  • 代码块围栏

还有更多吗?

有的。AsciiDoc和Markdown已经有很多共同的语法了。只管试试看。

在Asciidoctor文档中了解更多信息:blocks

目标窗口和链接的角色属性

你经常需要在链接元素(<a>)上设置target属性,以便链接在新窗口中打开(例如,<a href="..." target="_blank">)。

这种类型的配置通常使用属性来指定。但是,默认情况下AsciiDoc不解析链接宏中的属性。在Asciidoctor中,您现在可以通过在头部设置+linkattrs+文档属性来启用对链接宏属性的解析。

您可以使用 +window+ 属性来指定目标窗口的名称:
http://google.com[Google, window="_blank"]

既然 _blank 是最常见的窗口名称,我们引入了一个简写方式。 只需在链接文本末尾加上一个插入符号(^):

http://google.com[Google^]

注意:如果你在一个段落中多次使用尖角符号语法,你可能需要用反斜杠转义第一次出现的地方。 如果链接文本包含逗号,那么你需要用双引号将链接文本包围起来。

由于Asciidoctor正在解析属性,这为在链接中添加角色(也就是CSS类)打开了大门:

http://google.com[Google^, role="external"]

尽情设计你的链接样式吧!

Font awesome图标、花哨章节锚点和其他样式选项

你不再需要到处携带图标了!Asciidoctor 0.1.3引入了基于字体的警告图标和基于CSS的标注图标。

警告图标由 Font Awesome 提供支持

图标可以让你的文档看起来很精致,但管理起来却很麻烦。就是,到现在为止!Asciidoctor可以使用[Font Awesome^](http://fortawesome.github.io/Font-Awesome)和CSS“绘制”图标。

要使用这个功能,只需将+icons+文档属性的值设置为+font+。然后Asciidoctor会发出HTML标记,从Font Awesome字体中为每个警告块选择一个适当的字体字符。

这是一个例子,从AsciiDoc源码开始:

:icons: font

NOTE: Asciidoctor 现在支持基于字体的警示图标,由 Font Awesome 提供支持!

它生成的HTML是:

<div class="admonitionblock note"> <table> <tr> <td class="icon"> <i class="icon-note" title="Note"></i> </td> <td class="content"> Asciidoctor now supports font-based admonition icons, powered by Font Awesome! </td> </tr> </table> </div>

这里是它的渲染预览:

Asciidoctor now supports font-based admonition icons, powered by Font Awesome!

Asciidoctor会在文档头部添加一个引用,该引用通过CDN提供的Font Awesome样式表。 然后样式表从同一服务器导入字体。

<link rel="stylesheet"
  href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/3.1.0/css/font-awesome.min.css">

重要提示:默认样式表(或由Asciidoctor样式表工厂生成的任何样式表)是使用此功能所必需的。

在Asciidoctor文档中学习更多信息:警告块 | Asciidoctor样式表

基于CSS的提示图标

字体图标设置也启用了使用CSS绘制的标注图标。

:icons: font (1)

NOTE: Asciidoctor 现在支持基于字体的警示图标,由 Font Awesome 提供支持! (2)
1 在HTML5后端激活基于字体的图标
2 使用基于字体图标的警告区块

把那个图标目录踢到一边去。 你现在自由了!

将章节标题设置为链接并用浮动图标进行样式设计

有两个文档属性可用于控制部分链接:

当在文档上启用这个属性时,在章节标题之前会添加一个锚点(空链接)。默认的Asciidoctor样式表将锚点渲染为一个章节符号(§),它浮动在章节标题的左侧。

启用此属性后,文档中的章节标题将变成链接。Asciidoctor默认样式表将链接的章节标题显示为与普通章节标题相同的颜色。

注意:章节标题锚点依赖于默认的Asciidoctor样式表来正确渲染。

在Asciidoctor文档中了解更多:节标题

铅字段落样式

在任何段落上应用 role="lead"(或 .lead),它就会以引导段落的样式显示(即,更大的字体)。

清洁的引用块和诗句

如果引用或诗歌块没有归属标记,在HTML5输出中不再显示空的归属div。这将纠正由空div导致的任何输出样式不一致性。

AsciiDoc引用块语法,不带出处。

[quote]
____
智慧语录。
____
HTML output using Asciidoctor 0.1.2 and older versions
<div class="quoteblock"> <blockquote> <div class="paragraph"> <p>Words of wisdom.</p> </div> </blockquote>

<div class="attribution"> </div>

</div>
------

[source, html]
.使用Asciidoctor 0.1.3生成HTML输出

<div class="quoteblock"> <blockquote> <div class="paragraph"> <p>Words of wisdom.</p> </div> </blockquote> </div>

默认的样式表已经更新以配合调整。此外,诗歌块也进行了样式改造,因此它们应该与默认的外观和感觉保持一致。

样式表也更新了,加入了一些新样式,用于实验性用户输入宏。

== 宏观回归:明确读者应当按下的是什么

IMPORTANT: 你*必须*设置 +experimental+ 属性以启用这些宏。

=== 键盘快捷键

Asciidoctor 现在能识别用来创建键盘快捷键的宏,其语法遵循 `kbd:[key(+key)*]`。

例如:

[source, asciidoc]

[options="header", caption=""] .常见浏览器键盘快捷键

快捷键

功能

F11

切换全屏

Ctrl+T

打开新标签页

Ctrl+Shift+N

新的隐身窗口

Ctrl++

放大

渲染为:

|===
[options="header", caption=""]
.常见浏览器键盘快捷键
|快捷键 |功能

|kbd:[F11]
|切换全屏

|kbd:[Ctrl+T]
|打开新标签页

|kbd:[Ctrl+Shift+N]
|新的隐身窗口

|kbd:[Ctrl + +]
|放大
|===

你不再需要努力解释给用户他们应该按哪些键的组合了。

=== 菜单选择

尝试向某人解释如何选择菜单项可能很麻烦。通过新的+menu+宏,符号就可以完成这项工作。

例如:

[source, asciidoc]

要保存文件,请选择菜单:文件[保存]。

选择菜单:查看[缩放 > 重置]以将缩放级别重置为默认设置。

上面例子中的指令显示为:

====
要保存文件,请选择菜单:文件[保存]。

选择菜单:查看[缩放 > 重置],以将缩放级别重置为默认设置。
====

=== 用户界面按钮

将信息传达给读者他们需要按一个按钮也可能同样困难。他们无法分辨你是在说“好的”,还是应该寻找一个标有“OK”的按钮。这全都是关于正确理解语义。新的 +btn+ 宏来救援了!

例如:

[source, asciidoc]

完成后请按下[确定]按钮。

在文件导航器中选择一个文件,然后点击“打开”按钮。

答案是:这是结果:

====
完成后请按下按钮:[确定]。

在文件导航器中选择一个文件,并点击“打开”按钮。
====

我们希望建立这些宏之前先得到反馈。如果你有任何建议,我们希望收到你的意见!

== 一个更好的程序员最好的朋友

AsciiDoc 是程序员最好的朋友,因为它使你的源代码与文档保持紧密联系,并简化了源代码的插入过程。现在,它甚至提供了更多选项,可以将源代码片段拉入你的文档中并对其进行高亮显示。

=== 规范化包含源代码的块缩进

外部文件中的源代码片段通常会用前导块缩进进行填充。这种前导块缩进在其原始上下文中是相关的。然而,一旦进入到文档中,这种前导块缩进就不再需要了。

属性 +indent+ 允许去除开头的块缩进,并且在有逐字内容(列表、文字、源码、诗歌等)的块中,可以选择性地加入新的块缩进。

* 当 +indent+ 为0时,会剥离掉前置的块级缩进(制表符将被替换为4个空格)。
* 当+indent+大于0时,首先去除块引导的缩进(标签被替换成4个空格),然后一个块将按照等于这个值的列数进行缩进。

例如,这段AsciiDoc源码:

[source, asciidoc]
....
[source,ruby,indent=0]
def names
  @name.split ' '
end
....

输出:

[source, ruby]
....
def names
  @name.split ' '
end
....

当包含内容时,你会需要这个功能。

[source, asciidoc]
....
[source,ruby,indent=0]

include::lib/document.rb[lines=5..10]

....

这个AsciiDoc源代码:

[source, asciidoc]
....
[indent=2]
def names
  @name.split ' '
end
....

输出:

[source, ruby]

def names @name.split ' ' end

IMPORTANT: 源代码行之间的相对缩进*不受影响*。

=== 包含相对于一个公共源目录的文件

Asciidoctor现在可以展开include宏中目标的属性。这意味着当链接到一个源文件时,你只需要输入路径的唯一部分。

例子:

[source, asciidoc]
....
:sourcedir: src/main/java

[source,java]

include::{sourcedir}/org/asciidoctor/Asciidoctor.java[]

....

include 宏的目标解析为:

src/main/java/org/asciidoctor/Asciidoctor.java

在Asciidoctor文档中学习更多内容:{list-block-ref}[include 宏和块]

=== 新的源码高亮工具:google-code-prettify

源代码片段现在可以通过 {prettify-ref}[google-code-prettify library] 进行高亮显示。

要使用prettify,需要在文档头部设置+source-highlighter+属性来启用它(或者作为参数传递)。

[source, asciidoc]
Asciidoctor 将会链接到 prettify JavaScript 库和样式表,并输出 HTML 代码,以便 prettify 所需的源代码高亮显示。

考虑这个源代码块:

[source, asciidoc]
....
[source,java]

public class Person { private String name;

public String getName() { return name; } }

....

Asciidoctor 生成以下 HTML:

[source, html]

<div class="listingblock"> <div class="content monospaced"> <pre class="prettyprint java language-java"><code>public class Person { private String name;

public String getName() { return name; } }</code></pre> </div> </div>

关键的添加是在`<pre>`标签上加上`+prettyprint+`类。

在Asciidoctor文档中了解更多信息:{highlight-ref}[启用源代码高亮显示器]

== 文件内容更深入,更宏观的视角以及小型内容

=== 新增了五级标题

Asciidoctor 0.1.3 包括了第5级节标题的语法。

[source, asciidoc]
五级章节标题
五级标题在html5后端对应于`<h6>`标签。

=== HTML后端中的部分标题

在之前,部分标题(在书籍文档类型中的0级节)与其他的+<h1>+标签无法区分。在0.1.3版本中,这些+<h1>+标签被赋予了+sect0+类名,以与分配给其他节级别的类名保持一致。这项新增简化了为部分标题添加自定义样式的工作。

=== 目录布局和样式选项

Asciidoctor 0.1.3包括了众多目录(TOC)风格的更改和选项。

==== 更多目录位置选项

AsciiDoc +toc2+ 布局现在已包含在Asciidoctor默认样式表中作为 +toc2+ 类。要使用另一种目录,请在头部指定文档属性 +toc2+。

目录也可以直接插入到文档序言的下方。要将目录放在序言下方,将新值+preamble+分配给+toc-placement+属性。

TOC宏需要设置+toc+属性。若要禁用内置的TOC,请取消分配+toc-placement+属性(+toc-placement!+)。

==== 更新了0级标题样式

零级节标题(仅适用于书籍文档类型)现在在目录(在HTML后端)中拥有自己的级别。每个大纲级别(即,`<ol>`元素)都添加了一个与其所包含的章节级别相对应的CSS类(例如,`sect1level`)。这些CSS类的添加使得样式化目录变得更加容易。

在默认样式表中,对目录(TOC)进行了以下样式更改:

* 一级标题和二级标题在垂直方向上对齐。
* 在0级和1级标题之间增加了额外的间距,以使0级标题更加醒目。
* 0级标题(即部分标题)以斜体文本显示

还添加了`type="none"`属性到`<ol>`元素中,为的是向浏览器提供一个提示,即不在每个项目前添加数字。这一更改满足了目录(TOC)应该"无需样式表即可正常工作"的要求。

=== 引入+inline+文档类型,用于输入文本的内联格式化。

在某些情况下,你可能只希望对输入文本应用内联AsciiDoc格式,而不需要将其包装在块元素中。例如,在{asciidoclet-ref}[Asciidoclet项目]中(Javadoc中的AsciiDoc),Javadoc标签中的文本只需要内联格式。

内联文档类型的规则如下:

* 从AsciiDoc源文档中只读取了一个单独的段落。
* 内联格式已应用
* 输出没有包裹在正常的段落标签中

考虑到以下输入:

[source, asciidoc]
http://asciidoc.org[AsciiDoc] is a _lightweight_ markup language...

使用选项+doctype=inline+和+backend=html5+进行处理会产生:

[source, html]
<a href="http://asciidoc.org">AsciiDoc</a> 是一个 <em>轻量级</em> 标记语言&#8230;

Asciidoctor 处理器现在能够涵盖从非结构化(内联)文本到完整独立文档的全部输出范围!

== 在你的AsciiDoc中使用Markdown?

那是对的!Asciidoctor 支持 Markdown 语法中的三个关键元素(在 AsciiDoc 和 Markdown 尚未重叠的地方)。

* 标题
* 引用模块
* 围栏代码块

除了用于定义单行节标题的等号标记(+=+),Asciidoctor还识别Markdown中的井号符号(+#+)。这意味着Markdown文档的大纲在作为AsciiDoc文档时也能很好地渲染。

[source, markdown]

Document Title

第一节

内容

Markdown风格的块引用先前在<<alternate-blockquote-syntax>>中描述过。

Markdown风格的标题和引用块与支持围栏代码块(来自GitHub风格的Markdown)的功能一起加入,这是在之前的版本中添加的。

[source, markdown]

ruby require asciidoctor

puts Asciidoctor.render("AsciiDoc is a lightweight markup language…​")

我们希望这些附加功能有助于减轻和鼓励从Markdown过渡到AsciiDoc的迁移负担。为了缓解因AsciiDoc产生的碎片化担忧,我们在项目中维护了一个{compat-ref}[AsciiDoc配置文件],当使用AsciiDoc时,它能带来这些相同的增强功能。

== 重要的错误修复

=== Windows路径错误已修复

Asciidoctor 0.1.3能够正确地检测Windows环境,并将所有的反斜杠转换为正斜杠。这消除了Windows中文件路径解析错误。解决了问题{issue-ref}/330[330]。

=== 在Ruby 1.9及以上版本中修复了文件编码错误。

当系统默认编码不是UTF-8时,Asciidoctor没有正确设置从文件读取的数据的编码。为了解决这个问题,在Ruby 1.9及以上版本中,任何输入Asciidoctor 0.1.3的数据都被强制编码为UTF-8。解决了问题{issue-ref}/308[308]。

=== 附加的错误修复

* Asciidoctor CLI不再将属性键/值对在第一个等号上分割。解决了问题{issue-ref}/291[291]。

* 如果同时设置了 +to_file+ 和 +base_dir+,Asciidoctor 不再崩溃。 解决了问题 {issue-ref}/335[335]。

* 如果使用文档属性定义了作者,DocBook 渲染器可以工作。解决了问题{issue-ref}/301[301]。

== 合规性修复

=== 文档标题的属性

'''The +doctitle+ attribute can be used anywhere in a document. It's value is identical to the value returned by +Document#doctitle+.''' 可以把它翻译成中文如下: '''可以在文档中的任何地方使用 +doctitle+ 属性。它的值与 +Document#doctitle+ 返回的值相同。'''

[source, asciidoc]
.AsciiDoc +doctitle+ 语法

文件标题

文档的标题是 Asciidoctor 0.1.3 发布了!。

.文档标题 输出结果
....
文档的标题是“文档标题”。
....

=== 为DocBook 4.5后端添加了标签列表的水平布局

例子:

[source, asciidoc]
first term

定义

更多细节

第二学期:定义

渲染:

[source, xml]

<informaltable tabstyle="horizontal" frame="none" colsep="0" rowsep="0"> <tgroup cols="2"> <colspec colwidth="15*"/> <colspec colwidth="85*"/> <tbody valign="top"> <row> <entry> <simpara>first term</simpara> </entry> <entry> <simpara>definition</simpara> <simpara>more detail</simpara> </entry> </row> <row> <entry> <simpara>second term</simpara> </entry> <entry> <simpara>definition</simpara> </entry> </row> </tbody> </tgroup> </informaltable>

=== 连续的术语在标记列表中共享相同的 +varlistentry+

在标记列表中的连续条目在+docbook+后端共享相同的+varlistentry+。

例子:

[source, asciidoc]
术语
替代术语

定义

输出:

[source, xml]

<variablelist> <varlistentry> <term> term </term> <term> alt term </term> <listitem> <simpara> definition </simpara> </listitem> </varlistentry> </variablelist>

=== 特殊部分和样式

"+partintro+" 和 "+abstract+" 这两种样式可以用于开放块,并且渲染器可以正确处理。

现在,分配了+glossary+(术语表)和+appendix+(附录)样式的节在Asciidoctor中可以正确处理。

=== 内联分配文档变量

可以使用以下语法分配文档变量:

 {set:<attrname>[!][:<value>]}

例如:

[source, asciidoc]
{set:sourcedir:src/main/java}

它实际上和以下相同:

:sourcedir: src/main/java

这对于能够在通常不处理属性条目行的地方分配文档属性很重要,例如在一个表格单元格中。

这可能被用于的一个例子记录在{doc-variable-ref}[如何设置表格单元格的背景颜色]小提示中。

=== 不允许在文档标题上方使用块标题。

之前,一个位于0级标题上方的块标题行被处理并传递给了第一个内容块。AsciiDoc将块标题视为内容的第一行,并因此不创建头部。Asciidoctor的行为现在与AsciiDoc一致。

例子:

[source, asciidoc]

错误放置的块标题 = 文件标题 作者姓名

=== irc: 方案被渲染为链接

以下输入现在呈现为链接。

[source, asciidoc]
irc://irc.freenode.org/#asciidoctor

== 命令行界面和应用程序编程接口更新

=== 使用Asciidoctor命令行界面指定任何后端

以前,Asciidoctor CLI只允许用户指定+html5+或+docbook45+以外的后端。现在,任何非空的值都可以被指定为后端。当你想要使用一个{backend-git-ref}[自定义后端],比如deck.js或者dzslides时,这是至关重要的。

=== 在Asciidoctor API中使用字符串、符号或整数设置安全模式。

安全级别选项现在接受一个符号、字符串或整数值来查找安全级别。

[source, ruby]
result = Asciidoctor.render_file('master.ad', :safe => 'server')

现在可以写成:

[source, ruby]
result = Asciidoctor.render_file('master.ad', :safe => :server)

=== 在Asciidoctor API中使用字符串或符号来设置后端

后端选项现在接受一个符号或字符串值。

[source, ruby]
result = Asciidoctor.render_file('master.ad', :backend => 'docbook')

现在可以写成:

[source, ruby]
result = Asciidoctor.render_file('master.ad', :backend => :docbook)

=== 将属性作为字符串或数组传递给Asciidoctor API

以前,属性以哈希表的形式传递给Asciidoctor API方法。有时,这使得参数列表显得很臃肿。现在这些方法接受以字符串或数组形式的属性。

例如,考虑一个用户想要传递启用目录(+toc+)和自动编号(+numbered+)的属性。以前,这需要:

[source, ruby]
result = Asciidoctor.render_file('master.ad',
    :attributes => {'toc' => '', 'numbered' => ''})

由于这两个属性都是简单的标记,调用可以简化为:

[source, ruby]
result = Asciidoctor.render_file('master.ad',
    :attributes => ['toc', 'numbered'])

它可以通过在Ruby中使用字符串到数组的简写方式来进一步简化:

[source, ruby]
result = Asciidoctor.render_file('master.ad',
    :attributes => %w(toc numbered))

这引导我们进入了指定为字符串的属性:

[source, ruby]
result = Asciidoctor.render_file('master.ad',
    :attributes => 'toc numbered')

这是对原始呼叫的相当大的改进。

如果属性需要一个值,例如+source-highlighter+,你只需使用key=value的形式:

[source, ruby]
result = Asciidoctor.render_file('master.ad',
    :attributes => 'toc numbered source-highlighter=coderay')

这个API调用与这个命令行调用相对应:

asciidoctor -a toc -a numbered -a source-highlighter=coderay master.adoc

这种增强功能在整合中特别有用,比如 {gradle-git-ref}[Gradle 插件]。

'''Learn more in the Asciidoctor Docs: {ruby-api-ref}[Asciidoctor Ruby API] | {java-api-ref}[Asciidoctor Java API]'''

那就结束了!

== 谢谢!

正如我们所希望的,Asciidoctor 0.1.2 的下载量突破了下一个1万的增量。RubyGems.org 在本次发布之前报告了超过20,000次的Asciidoctor gem下载量,Maven Central的Java集成下载量超过了100次。我们期待着用0.1.3达到新的里程碑。

Asciidoctor 项目的参与度持续以惊人的速度增长。在这个开发周期中,我们欢迎了几个新项目的加入,包括由 John Ericksen 开发的一个用于用 AsciiDoc 写 Javadoc 的 Javadoclet —— {asciidoclet-ref}[Asciidoclet],以及几个 AsciiDoc 编辑器的计划。我们非常感谢每一位参与者,特别是那些做出贡献和传播信息的人们 :)

我们特别感谢以下人员对这次发布的贡献和反馈:

- {gh-ref}/bleathem[Brian Leathem] (增强功能、补丁和QA)
- {gh-ref}/lightguard[Jason Porter] (CLI improvements)
- {gh-ref}/graphitefriction[Sarah White] (文档、用户体验和质量保证)
- {gh-ref}/lordofthejars[Alex Soto] (Java integration improvements)
- {gh-ref}/johncarl81[John Ericksen] (Asciidoclet)
- {gh-ref}/aalmiray[Andres Almiray] (Doctorpad 编辑器)
- {gh-ref}/glaforge[Guillaume Laforge](Doctorpad 编辑器)
- {gh-ref}/pilhuhn[Heiko Rupp](Bug报告和建议)
- {gh-ref}/eddelplus[乔亨·艾德尔布特尔](错误报告和Windows测试)
- {gh-ref}/davidfavor[David Favor] (Bug reports)
- {gh-ref}/snowolfe[Bruce Wolfe] (错误报告)
- {gh-ref}/ge0ffrey[Geoffrey De Smet] (功能请求)
- {gh-ref}/dobermai[Obermaier Dominik] (功能请求)
- {gh-ref}/lincolnthree[林肯·巴克斯特三世] (功能请求)

特别感谢Brian Leathem在发布前一晚发现了一个关键性的回归问题。

补充感谢每一个使用这个项目并为之做出贡献的人。大家共同努力,我们让编写文档变得有趣、容易并且有益!

== 下一步是什么?

这个版本仅仅是发布列车的开始。期待Java集成、Maven插件、Gradle插件以及最新添加的编辑器等的发布。