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"
|