|
{-# LANGUAGE OverloadedStrings #-}
|
|
module Main where
|
|
|
|
import qualified Data.Text.Lazy.IO as Text
|
|
import qualified Data.Text.Lazy as Text
|
|
import Data.Text.Lazy (Text)
|
|
|
|
import Text.HTML.TagSoup
|
|
import System.Environment
|
|
import Control.Exception
|
|
import Data.Maybe
|
|
|
|
main :: IO ()
|
|
main = do
|
|
[file] <- getArgs
|
|
tags <- parseTags <$> Text.readFile file
|
|
evaluate (length tags)
|
|
Text.writeFile file (renderTags (hideSteps False tags))
|
|
|
|
hideSteps :: Bool -> [Tag Text] -> [Tag Text]
|
|
hideSteps has_eqn (to@(TagOpen "a" attrs):tt@(TagText t):tc@(TagClose "a"):rest)
|
|
| Text.length t >= 1, Text.last t == '⟨', Just href <- lookup "href" attrs =
|
|
[ TagOpen "span" [("class", "reasoning-step")]
|
|
, TagOpen "span" [("class", "as-written " <> fromMaybe "" (lookup "class" attrs))]
|
|
, to, tt, tc ] ++ go href rest
|
|
where
|
|
alternate = Text.init t
|
|
go href (to@(TagOpen "a" attrs):tt@(TagText t):tc@(TagClose "a"):cs)
|
|
| Text.length t >= 1
|
|
, Text.head t == '⟩'
|
|
, Just href' <- lookup "href" attrs
|
|
, href' == href
|
|
= [ to, tt, tc, TagClose "span"
|
|
, TagOpen "span" [("class", "alternate " <> fromMaybe "" (lookup "class" attrs))]
|
|
, TagText alternate
|
|
, TagClose "span"
|
|
, TagClose "span"
|
|
] ++ hideSteps True cs
|
|
go href (c:cs) = c:go href cs
|
|
go _ [] = []
|
|
hideSteps False (TagClose "html":cs) =
|
|
[TagOpen "style" [], TagText ".equations { display: none !important; }", TagClose "style", TagClose "html"]
|
|
++ hideSteps True cs
|
|
hideSteps has_eqn (c:cs) = c:hideSteps has_eqn cs
|
|
hideSteps _ [] = []
|