Hakyllで日本語文中の余分な空白を削除する
Posted: 2016-09-18
静的サイト作成ツールHakyllで日本語を含むページを作成したとき、以下の図の反転部分のように余分な空白が入ってしまうことがあります。
これは内部で動いているPandocが、Markdownファイルに含まれている改行文字を空白文字に変換するために起こります。
---
title: Test
date: 2016-02-27
---
Pandoc converts newline characters in a
sentence into whitespaces.
したがって日本語の文章の途中で
改行すると、不自然な空白が挿入されてしまいます。
このような挙動を望まないユーザーのために1.16.0.1からeast_asian_line_breaks
という拡張が加えられています。以下でその使い方を説明します。
まず上記の拡張を使うため<project_name>.cabal
で使用するpandoc
のバージョンが1.16.0.1以降になるようにしてください。また以下で示すコードにおいて集合の演算を使うため、それをそのまま使う場合は<project_name>.cabal
の依存関係にcontainers
も追加してください。
依存関係の設定が終わったら、以下のようにsite.hs
を変更します。
import qualified Data.Set as S
import Text.Pandoc.Options (Extension(Ext_east_asian_line_breaks), readerExtensions)
-- omission --
customPandocCompiler =
let
defaultExtensions = readerExtensions defaultHakyllReaderOptions
newExtensions = S.insert Ext_east_asian_line_breaks defaultExtensions
readerOptions = defaultHakyllReaderOptions { readerExtensions = newExtensions }
in
pandocCompilerWith readerOptions defaultHakyllWriterOptions
今回追加するExt_east_asian_line_breaks
はwriterExtensions
ではなくreaderExtensions
に追加するようです。その後、このcustomPandocCompiler
でpandocCompiler
を置き換え、stack build
してください。
最後にexec site clean
, stack exec site watch
で出来上がりを確認して終わりです。