lhs文書のテストも兼ねて、ここを作るときに使ったあれこれを書き出しておきます。随時更新。
lhsで書いているのでヘッダーのsourceリンクからダウンロードしてそのまま実行する事が可能です。
もくじ
- ハイライトのcssどうするの
- 元々minifyされているcssはライセンス書いてるしcomplessしたくない
- タグごとのページもpaginateしたい
- 表にはtableクラスを付けないとbootstrapが!
- bibtexで引用したい
> {-#LANGUAGE OverloadedStrings #-}
> import Hakyll
> import qualified Text.Highlighting.Kate as Kate
> import qualified Text.HTML.TagSoup as TS
> import Data.List(partition)
>
> main :: IO ()
> main = hakyll $ highlightCss >> cssRules >> posts
ハイライトのcssどうするの
pandocCompilerで文書をコンパイルすると、コードにはハイライト用のマークアップを付けてくれますが、cssは自分で用意する必要があります。 このハイライト機能はhighlighting-kateにより提供されているものなので、その中に定義されているスタイルを使って、以下の様なルールを書いておけば良いと思います。
> highlightCss :: Rules ()
> highlightCss = create ["css/highlight.css"] $ do
> route idRoute
> compile $ makeItem (Kate.styleToCss Kate.kate)
元々minifyされているcssはライセンス書いてるしcomplessしたくない
Patterns用の論理演算を使いましょう。
| Bool | Patterns |
|---|---|
| && | .&&. |
| || | .||. |
| not | complement |
> cssRules :: Rules ()
> cssRules = do
> match "css/*.min.css" $ do
> route idRoute
> compile copyFileCompiler
> match ("css/*" .&&. complement "css/*.min.css") $ do
> route idRoute
> compile compressCssCompiler
タグごとのページもpaginateしたい
普通にネストできます。すごい。 長いのでソースコード参照
表にはtableクラスを付けないとbootstrapが!
withTagsを使いましょう。
> addClass :: String -> TS.Tag String -> TS.Tag String
> addClass cls (TS.TagOpen name attr) = case partition ((== "class") . fst) attr of
> ([], _) -> TS.TagOpen name $ ("class", cls) : attr
> ((_,cls'):_, attr') -> TS.TagOpen name $ ("class", cls ++ ' ': cls') : attr'
> addClass _ tag = tag
>
> postCompiler :: Compiler (Item String)
> postCompiler = fmap (withTags process) `fmap` pandocCompiler
> where process tag | TS.isTagOpenName "table" tag = addClass "table" tag
> | otherwise = tag
>
> posts :: Rules ()
> posts = match "posts/**.md" $ do
> route $ setExtension "html"
> compile postCompiler