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を変更します。
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で出来上がりを確認して終わりです。