]> Git — Sourcephile - julm/worksheets.git/blob - src/Worksheets/Writing/Latin.hs
add: Writing/LatinSpec/frozen/in-summer
[julm/worksheets.git] / src / Worksheets / Writing / Latin.hs
1 module Worksheets.Writing.Latin where
2
3 import Data.ByteString.Builder (Builder)
4 import Data.Text qualified as Text
5 import Data.Text.IO.Utf8 qualified as Text
6 import Paths_worksheets qualified as Self
7 import System.FilePath.Posix qualified as File
8 import Text.Blaze
9 import Text.Blaze.Html5 qualified as H
10 import Text.Blaze.Html5.Attributes qualified as HA
11 import Text.Blaze.Renderer.Utf8 qualified as Blaze
12 import Prelude
13
14 -- import Debug.Pretty.Simple (pTraceShowM)
15
16 worksheet :: File.FilePath -> IO Builder
17 worksheet inputFilePath = do
18 inputText <- Text.readFile inputFilePath
19 let inputLines = Text.lines inputText
20 -- FIXME: this absolute path is not reproducible out of my system
21 cssPath <- Self.getDataFileName "worksheet.css" <&> File.normalise
22 return $ Blaze.renderMarkupBuilder do
23 H.docTypeHtml do
24 H.head do
25 H.title $ fromString $ File.takeBaseName inputFilePath
26 H.link
27 ! HA.rel "stylesheet"
28 ! HA.type_ "text/css"
29 ! HA.href (toValue cssPath)
30 H.body do
31 "\n"
32 H.div ! HA.class_ "worksheet" $ do
33 forM_ inputLines \inputLine -> do
34 H.div ! HA.class_ "row" $ do
35 forM_ (Text.unpack inputLine) \inputChar -> do
36 let cellSpace
37 | inputChar == ' ' = " cell-space"
38 | otherwise = ""
39 H.div ! HA.class_ ("cell" <> cellSpace) $ do
40 fromString [inputChar]
41 "\n"
42 H.div ! HA.class_ "row" $ do
43 forM_ (Text.unpack inputLine) \inputChar -> do
44 let cellSpace
45 | inputChar == ' ' = " cell-space"
46 | otherwise = ""
47 H.div ! HA.class_ ("cell" <> cellSpace) $ do
48 fromString " "
49 "\n"