71 lines
2.1 KiB
Haskell
Raw Permalink Normal View History

2022-03-19 00:59:36 +01:00
{-# LANGUAGE QuasiQuotes, FlexibleContexts #-}
module Formats.Gogen (gogenCtx) where
2022-03-19 00:59:36 +01:00
import Hakyll
2022-03-19 00:59:36 +01:00
import Debug.Trace (traceId)
import Data.Maybe (fromMaybe)
import Control.Applicative (empty)
import Text.Regex.PCRE.Heavy (Regex, gsub, re)
import Util.Hakyll.Context
2022-03-19 00:59:36 +01:00
--------------------------------------------------------------------------------
-- FURIGANA CONVERSION
type FuriganaTemplate = String
convertTitle :: (String -> String) -> Item a -> Compiler String
2022-03-19 00:59:36 +01:00
convertTitle = updateFieldWith "title" "???"
furiganaRegex :: Regex
furiganaRegex = [re|\[(.*?)\]\((.*?)\)|]
2022-03-19 00:59:36 +01:00
replaceFuriganaWithKanji :: FuriganaTemplate -> String
replaceFuriganaWithKanji = gsub furiganaRegex (\(kanji:_) -> kanji :: String)
2022-03-19 00:59:36 +01:00
replaceFuriganaWithHtml :: FuriganaTemplate -> String
replaceFuriganaWithHtml = between "<ruby>" "</ruby>" . gsub furiganaRegex matchToHtml
2022-03-19 00:59:36 +01:00
where
2022-03-23 13:46:07 +01:00
between :: String -> String -> String -> String
2022-03-19 00:59:36 +01:00
between x y s = x ++ s ++ y
2022-03-23 13:46:07 +01:00
matchToHtml :: [String] -> String
matchToHtml (kanji:kana:_) =
let defaultKanji = if kanji == "" then "" else kanji
in foldr1 (++) ["<rb>", defaultKanji, "</rb> <rp>(</rp><rt>", kana, "</rt><rp>)</rp>"]
convertFuriganaTitle :: Item a -> Compiler String
convertFuriganaTitle = convertTitle replaceFuriganaWithKanji
convertFuriganaTitleHtml :: Item a -> Compiler String
convertFuriganaTitleHtml = convertTitle replaceFuriganaWithHtml
2022-03-23 13:46:07 +01:00
convertFinishedValue :: Item a -> Compiler ContextField
convertFinishedValue i = do
s <- getMetadataField (itemIdentifier i) "finished"
case s of
Just "true" -> empty
_ -> return (StringField "true")
2022-03-23 13:46:07 +01:00
{- |
title: String
titleHtml: String
finished: Boolean
updated: String
lang: String
antonyms: Maybe [String]
synonyms: Maybe [String]
leads_here: Maybe [String]
alternatives: Maybe [String]
see_also: Maybe [String]
sources: Maybe [String]
2022-03-23 13:46:07 +01:00
-}
gogenCtx :: Context String
gogenCtx =
dateField "date" "%Y-%m-%d"
<> ifField "notFinishedYet" convertFinishedValue
<> field "title" convertFuriganaTitle
<> field "titleHtml" convertFuriganaTitleHtml
<> constField "lang" "en"
<> defaultContext