很高兴开源我的电子书工具链第一部分,一个 Asciidoctor 的 HTMLBook 后端。
项目链接 https://github.com/chloerei/asciidoctor-htmlbook
Asciidoctor 是一个 AsciiDoc 文档转换器,AsciiDoc 是专为书籍文档设计的标记语言,详情可以看 http://asciidoctor.org/。
HTMLBook 是基于 XHTML5 的书籍文档标准,详情可以看 https://github.com/oreillymedia/HTMLBook。
有了 asciidoctor-htmlbook,可以方便的把 AsciiDoc 转换到 HTMLBook。
例如,对于以下 AsciiDoc 文档:
= Hello, AsciiDoc!
Doc Writer <[email protected]>
An introduction to http://asciidoc.org[AsciiDoc].
== First Section
* item 1
* item 2
[source,ruby]
puts "Hello, World!"
用内置的 Asciidoctor 后端转换的 HTML 内容是这样的:
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>An introduction to <a href="http://asciidoc.org">AsciiDoc</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_first_section">First Section</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>item 1</p>
</li>
<li>
<p>item 2</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-ruby" data-lang="ruby">puts "Hello, World!"</code></pre>
</div>
</div>
</div>
</div>
用 HTMLBook 后端转换的 HTML 内容是这样的:
<section data-type="preamble">
<p>An introduction to <a href="http://asciidoc.org">AsciiDoc</a>.</p>
</section>
<section id="_first_section" data-type="chapter">
<h1>First Section</h1>
<ul>
<li>
<p>item 1</p>
</li>
<li>
<p>item 2</p>
</li>
</ul>
<figure>
<pre data-type="programlisting" data-code-language="ruby">puts "Hello, World!"</pre>
</figure>
</section>
把 AsciiDoc 转换到标准化的 HTMLBook 后有利于处理成实际的电子书格式。现有的 Asciidoctor-pdf 和 Asciidoctor-epub3 跟 Asciidoctor 深耦合,对中文支持不好,难以修改样式。转化为 HTMLBook 后只需要对 HTMLBook 处理就行了。
处理流如下:
所以,接下来会实现 HTMLBook -> Website,HTMLBook -> PDF,HTMLBook -> EPUB 等转换器。更长远来说,任何源文档只要能转换到 HTMLBook,都能重用这些输出后端,例如 Docx -> HTMLBook,Markdown -> HTMLBook。
在我过去 3 年运营 SelfStore 的过程中,深感现有的电子书制作工具还不够好,包括 Asciidoctor,GitBook,LeanPub,于是萌生自己做工具链的想法。实现这套工具链的前置条件已经满足,但还有很多工作要做,欢迎有经验者与我联系。