module WWW.HW ( removeEnv , removeSolutions , setDocLocation , setDocLocation_ -- * LaTeX utils , LaTeX (..) , texmap -- * Hakyll utils , module Hakyll.TeX.HaTeX , module Hakyll.TeX.LaTeX ) where import Prolog import Hakyll import Hakyll.TeX.HaTeX import Hakyll.TeX.LaTeX import Network.URI import Text.LaTeX.Base.Syntax import Text.LaTeX.Packages.Hyperref removeEnv :: (String -> Bool) -> LaTeX -> LaTeX removeEnv p = texmap (\case { TeXEnv s _ _ -> p s; _ -> False }) $ pure mempty removeSolutions :: LaTeX -> LaTeX removeSolutions = removeEnv (== "solution") setDocLocation :: URI -> (String -> [TeXArg] -> Bool) -> Item LaTeX -> Compiler (Item LaTeX) setDocLocation u p (Item i l) = Item i <$> texmapM (\case { TeXComm _ _ -> True; _ -> False }) mapper l where mapper = \case TeXComm s args | p s args -> do relpath <- getRoute i >>= maybe (fail $ show i <> " has no route") pure >>= maybe (fail $ "Cannot parse " <> show i <> " as a relative URI") pure . parseRelativeReference pure $ TeXComm s [ FixArg $ url $ toSL $ relpath `relativeTo` u ] x -> pure x setDocLocation_ :: URI -> Item LaTeX -> Compiler (Item LaTeX) setDocLocation_ u = setDocLocation u $ \s _ -> s == "doclink"