2022-03-19 00:59:36 +01:00
|
|
|
|
{-# LANGUAGE QuasiQuotes, FlexibleContexts #-}
|
|
|
|
|
|
2022-03-24 12:49:35 +01:00
|
|
|
|
module Formats.Gogen (gogenCtx) where
|
2022-03-19 00:59:36 +01:00
|
|
|
|
|
2022-03-23 12:51:17 +01:00
|
|
|
|
import Hakyll
|
2022-03-19 00:59:36 +01:00
|
|
|
|
import Debug.Trace (traceId)
|
|
|
|
|
import Data.Maybe (fromMaybe)
|
2022-03-24 12:49:35 +01:00
|
|
|
|
import Control.Applicative (empty)
|
|
|
|
|
import Text.Regex.PCRE.Heavy (Regex, gsub, re)
|
|
|
|
|
|
2022-03-25 13:35:31 +01:00
|
|
|
|
import Util.Hakyll.Context
|
2022-03-19 00:59:36 +01:00
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
-- FURIGANA CONVERSION
|
|
|
|
|
|
|
|
|
|
type FuriganaTemplate = String
|
|
|
|
|
|
2022-03-24 12:49:35 +01:00
|
|
|
|
convertTitle :: (String -> String) -> Item a -> Compiler String
|
2022-03-19 00:59:36 +01:00
|
|
|
|
convertTitle = updateFieldWith "title" "???"
|
|
|
|
|
|
2022-03-24 12:49:35 +01:00
|
|
|
|
furiganaRegex :: Regex
|
|
|
|
|
furiganaRegex = [re|\[(.*?)\]\((.*?)\)|]
|
2022-03-19 00:59:36 +01:00
|
|
|
|
|
|
|
|
|
replaceFuriganaWithKanji :: FuriganaTemplate -> String
|
2022-03-24 12:49:35 +01:00
|
|
|
|
replaceFuriganaWithKanji = gsub furiganaRegex (\(kanji:_) -> kanji :: String)
|
2022-03-19 00:59:36 +01:00
|
|
|
|
|
|
|
|
|
replaceFuriganaWithHtml :: FuriganaTemplate -> String
|
2022-03-24 12:49:35 +01:00
|
|
|
|
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 12:51:17 +01:00
|
|
|
|
|
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>"]
|
|
|
|
|
|
2022-03-24 12:49:35 +01:00
|
|
|
|
convertFuriganaTitle :: Item a -> Compiler String
|
|
|
|
|
convertFuriganaTitle = convertTitle replaceFuriganaWithKanji
|
|
|
|
|
|
|
|
|
|
convertFuriganaTitleHtml :: Item a -> Compiler String
|
|
|
|
|
convertFuriganaTitleHtml = convertTitle replaceFuriganaWithHtml
|
2022-03-23 13:46:07 +01:00
|
|
|
|
|
2022-03-24 12:49:35 +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]
|
2022-03-24 12:49:35 +01:00
|
|
|
|
sources: Maybe [String]
|
2022-03-23 13:46:07 +01:00
|
|
|
|
-}
|
2022-03-23 12:51:17 +01:00
|
|
|
|
gogenCtx :: Context String
|
|
|
|
|
gogenCtx =
|
|
|
|
|
dateField "date" "%Y-%m-%d"
|
2022-03-24 12:49:35 +01:00
|
|
|
|
<> ifField "notFinishedYet" convertFinishedValue
|
|
|
|
|
<> field "title" convertFuriganaTitle
|
2022-03-23 12:51:17 +01:00
|
|
|
|
<> field "titleHtml" convertFuriganaTitleHtml
|
2022-03-24 12:49:35 +01:00
|
|
|
|
<> constField "lang" "en"
|
|
|
|
|
<> defaultContext
|