packages feed

wumpus-core-0.50.0: demo/KernPic.hs

{-# OPTIONS -Wall #-}

module KernPic where

import Wumpus.Core
import Wumpus.Core.Colour
import Wumpus.Core.Text.StandardEncoding
import Wumpus.Core.Text.Symbol
import System.Directory



main :: IO ()
main = do 
    createDirectoryIfMissing True "./out/"
    putStrLn $ unlines warn_msg
    writeEPS "./out/kern_pic01.eps" kern_pic
    writeSVG "./out/kern_pic01.svg" kern_pic
  where
    warn_msg = [ "Note - this demo uses the symbol font which is not"
               , "recommended for SVG."
               ]

kern_pic :: Picture
kern_pic = pic1 `picOver` pic2 `picOver` pic3 

pic1 :: Picture
pic1 = frame [ helveticaLabelH universal   (P2 0 50)
             , helveticaLabelH universal   (P2 0 25)
             ]

pic2 :: Picture
pic2 = illustrateBoundsPrim blue_violet $ 
          helveticaLabelV universal (P2 200 180)

pic3 :: Picture
pic3 = frame [ symbolLabelH uUpsilon (P2 0 0) ]


-- Some attention is paid to kerning - note that the kern between 
-- @i@ and @v@ is smaller than the norm.
--
universal ::[KerningChar]
universal = [ kernchar     0  'u'
            , kernchar    15  'n'
            , kernchar    15  'i'
            , kernchar    10  'v'
            , kernchar    15  'e'
            , kernchar    15  'r'
            , kernchar    13  's'
            , kernchar    15  'a'
            , kernchar    15  'l'
            , kernEscName 10  "currency"
            ]

-- Note - this may not work in SVG, some renderers are intolerant 
-- towards the Symbol font.
--
-- 0o241 is upper-case upsilon in the Symbol encoding vector.
-- 
uUpsilon :: [KerningChar]
uUpsilon = [ kernEscInt 6 0o241, kernchar 12 'a', kernchar 12 'b' ] 

helveticaLabelH :: [KerningChar] -> DPoint2 -> Primitive
helveticaLabelH xs pt = hkernlabel black helvetica18 xs pt

helveticaLabelV :: [KerningChar] -> DPoint2 -> Primitive
helveticaLabelV xs pt = vkernlabel black helvetica18 xs pt

symbolLabelH :: [KerningChar] -> DPoint2 -> Primitive
symbolLabelH xs pt = hkernlabel black symbol18 xs pt


helvetica18 :: FontAttr
helvetica18 = FontAttr 18 (FontFace "Helvetica" 
                                    "Helvetica" 
                                    SVG_REGULAR 
                                    standard_encoding)


symbol18 :: FontAttr
symbol18 = FontAttr 18 (FontFace "Symbol" 
                                 "Symbol" 
                                 SVG_REGULAR
                                 symbol_encoding)

blue_violet             :: RGBi
blue_violet             = RGBi 0x8a 0x2b 0xe2