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