summaryrefslogtreecommitdiff
path: root/Hero/Look/Typography.hs
blob: 4d4f976e3706af024d81997eba336df9f7aa0495 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Hero.Look.Typography where

import           Alpha
import           Clay
import           Clay.Stylesheet                ( key )
import qualified Hero.Assets   as Assets
import           Data.Semigroup                 ( (<>) )

main :: Css
main = fonts

-- font modifiers

euro, slim, wide, thicc, thinn, norm, lean, smol, lower, upper :: Css

euro = fontFamily ["Eurostile"] [sansSerif]

-- | stretch
slim = fontStretch condensed
wide = fontStretch expanded

-- | weight
thicc = fontWeight bold
thinn = fontWeight normal

-- | style
norm = fontStyle normal
lean = fontStyle italic

-- | "smallcaps" is already taken by Clay
smol = fontVariant smallCaps

lower = textTransform lowercase
upper = textTransform uppercase

-- | font sizing

-- | apparently "coat" is a synonym for "size"
coat :: Double -> Css
coat = fontSize . Clay.rem

fontRoot :: Text
fontRoot = Assets.cdnEdge <> "/old-assets/fonts/eurostile/Eurostile"

-- | font faces
fonts :: Css
fonts =
  mconcat
    $  mkEuro
    </ [ ("-Reg.otf"         , OpenType, fontWeight normal <> fontStyle normal)
       , ("LTStd-Bold.otf"   , OpenType, thicc <> norm)
       , ("LTStd-Cn.otf"     , OpenType, slim <> norm)
       , ("LTStd-Ex2.otf"    , OpenType, wide <> norm)
       , ("LTStd-BoldCn.otf" , OpenType, slim <> thicc)
       , ("LTStd-BoldEx2.otf", OpenType, wide <> thicc)
       ]
 where
  mkEuro :: (Text, FontFaceFormat, Css) -> Css
  mkEuro (sufx, fmt, extra) = fontFace $ do
    fontFamily ["Eurostile"] []
    fontFaceSrc [FontFaceSrcUrl (fontRoot <> sufx) $ Just fmt]
    extra

-- TODO: add the below to Clay.Font upstream

newtype FontStretch = FontStretch Value
  deriving (Val, Inherit, Normal, Other)

expanded :: FontStretch
expanded = FontStretch "expanded"

condensed :: FontStretch
condensed = FontStretch "condensed"

fontStretch :: FontStretch -> Css
fontStretch = key "font-stretch"