I followed this tutorial to create a basic static web page using hakyll. It includes a number of pages rendered from markdown in the posts
directory, e.g. 2015-08-12-spqr.markdown
.
I prefer asciidoc to markdown, and tried adding an asciidoc 2018-01-23_adoc-user-manual.asciidoc
to the post
directory.
However, hakyll
throws an error when attempting to compile the page:
Initialising...
Creating store...
Creating provider...
Running rules...
Checking for out-of-date items
Compiling
updated templates/default.html
updated about.rst
updated templates/post.html
updated posts/2015-08-12-spqr.markdown
updated posts/2015-10-07-rosa-rosa-rosam.markdown
updated posts/2015-11-28-carpe-diem.markdown
updated posts/2015-12-07-tu-quoque.markdown
[ERROR] Hakyll.Web.readPandocWith: I don't know how to read a file of the type Binary for: posts/2018-01-23_adoc-user-manual.asciidoc
CallStack (from HasCallStack):
error, called at lib/Hakyll/Web/Pandoc.hs:66:31 in hakyll-4.12.5.0-8ZITvFN5YREEKv6B76SCAd:Hakyll.Web.Pandoc
Is this problem that pandocCompiler
cannot handle asciidoc
?
Is it possible to use asciidoc
with hakyll
?
Current Pandoc can write Asciidoc but cannot read it: Issue.
Besides, there seems no Asciidoc parser written in Haskell, so there's no pure Haskell solution.
However, Hakyll has unixFilter which can use any command which inputs from stdin and outputs to stdout. Therefore, you can call asciidoctor
command for converting .asciidoc
file.
Here's the step:
$ apt-get install asciidoctor
$ dnf install asciidoctor
$ pacman -S asciidoctor
$ gem install asciidoctor
Add following code to site.hs
pandocCompilerWithAsciidoctor :: Compiler (Item String)
pandocCompilerWithAsciidoctor = do
extension <- getUnderlyingExtension
if extension == ".asciidoc" then
getResourceString >>= withItemBody (unixFilter "asciidoctor" ["-"])
else
pandocCompiler
replace pandocCompiler
in site.hs
with pandocCompilerWithAsciidoctor
$ stack build
$ stack exec site rebuild
Note that filename have to be 2018-01-23-adoc-user-manual.asciidoc
instead of 2018-01-23_adoc-user-manual.asciidoc
, or you get error: [ERROR] Missing field $date$ in context for item posts/2018-01-23_adoc-user-manual.asciidoc