{-# OPTIONS -Wall #-}

--------------------------------------------------------------------------------
-- |
-- Module      :  Wumpus.Basic.Text.LRSymbol
-- Copyright   :  (c) Stephen Tetley 2010
-- License     :  BSD3
--
-- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
-- Stability   :  highly unstable
-- Portability :  GHC
--
-- Named literals from Symbol font, drawn with the LRText monad.
-- 
-- Note - currently the techinique used here generates adequate
-- PostScript, but very ineficient SVG.
-- 
-- Also uUpsilon is not mapped to the correct character...
--
--------------------------------------------------------------------------------

module Wumpus.Basic.Text.LRSymbol
  ( 

  -- * Lower case

    alpha
  , beta
  , gamma
  , delta
  , epsilon
  , zeta
  , eta
  , theta
  , iota
  , kappa
  , lambda
  , mu
  , nu
  , xi
  , pi
  , rho
  , sigma
  , tau
  , upsilon
  , phi
  , chi
  , psi
  , omega

  -- * Upper case
  , uGamma
  , uDelta
  , uTheta
  , uLambda
  , uXi
  , uPi
  , uSigma
  , uUpsilon
  , uPhi
  , uPsi
  , uOmega

  ) where


import Wumpus.Basic.SafeFonts
import Wumpus.Basic.Text.LRText

import Wumpus.Core                              -- package: wumpus-core

import Data.Char ( chr )
import Prelude hiding ( pi )

-- Note - due to a optimization in Wumpus-Core, the PostScript
-- generated by the techinique here - writing a 
-- (single-character) label one at a time - isn\'t too bad as 
-- Wumpus-Core only issues a findfont command when the font 
-- changes. 
-- 
-- However for SVG the result is very poor - one text element 
-- including an orientation changing matrix transforming for 
-- each character.
-- 
-- Wumpus-Core\'s SVG rendering will work at some point.
-- 

useSymbol :: TextM u a -> TextM u a
useSymbol = bracketFontFace symbol


--------------------------------------------------------------------------------
-- lower case


alpha       :: (Num u, FromPtSize u) => TextM u ()
alpha       = useSymbol $ char 'a'

beta        :: (Num u, FromPtSize u) => TextM u ()
beta        = useSymbol $ char 'b'

gamma       :: (Num u, FromPtSize u) => TextM u ()
gamma       = useSymbol $ char 'g'

delta       :: (Num u, FromPtSize u) => TextM u ()
delta       = useSymbol $ char 'd'

epsilon     :: (Num u, FromPtSize u) => TextM u ()
epsilon     = useSymbol $ char 'e'

zeta        :: (Num u, FromPtSize u) => TextM u ()
zeta        = useSymbol $ char 'z'

eta         :: (Num u, FromPtSize u) => TextM u ()
eta         = useSymbol $ char 'h'

theta       :: (Num u, FromPtSize u) => TextM u ()
theta       = useSymbol $ char 'q'

iota        :: (Num u, FromPtSize u) => TextM u ()
iota        = useSymbol $ char 'i'

kappa       :: (Num u, FromPtSize u) => TextM u ()
kappa       = useSymbol $ char 'k'

lambda      :: (Num u, FromPtSize u) => TextM u ()
lambda      = useSymbol $ char 'l'

mu          :: (Num u, FromPtSize u) => TextM u ()
mu          = useSymbol $ char 'm'

nu          :: (Num u, FromPtSize u) => TextM u ()
nu          = useSymbol $ char 'n'

xi          :: (Num u, FromPtSize u) => TextM u ()
xi          = useSymbol $ char 'x'

pi          :: (Num u, FromPtSize u) => TextM u ()
pi          = useSymbol $ char 'p'

rho         :: (Num u, FromPtSize u) => TextM u ()
rho         = useSymbol $ char 'r'

sigma       :: (Num u, FromPtSize u) => TextM u ()
sigma       = useSymbol $ char 's'

tau         :: (Num u, FromPtSize u) => TextM u ()
tau         = useSymbol $ char 't'

upsilon     :: (Num u, FromPtSize u) => TextM u ()
upsilon     = useSymbol $ char 'u'

phi         :: (Num u, FromPtSize u) => TextM u ()
phi         = useSymbol $ char 'j'

chi         :: (Num u, FromPtSize u) => TextM u ()
chi         = useSymbol $ char 'c'

psi         :: (Num u, FromPtSize u) => TextM u ()
psi         = useSymbol $ char 'y'

omega       :: (Num u, FromPtSize u) => TextM u ()
omega       = useSymbol $ char 'w'


--------------------------------------------------------------------------------
-- upper case

uGamma      :: (Num u, FromPtSize u) => TextM u ()
uGamma      = useSymbol $ char 'G'

uDelta      :: (Num u, FromPtSize u) => TextM u ()
uDelta      = useSymbol $ char 'D'

uTheta      :: (Num u, FromPtSize u) => TextM u ()
uTheta      = useSymbol $ char 'Q'

uLambda     :: (Num u, FromPtSize u) => TextM u ()
uLambda     = useSymbol $ char 'L'

uXi         :: (Num u, FromPtSize u) => TextM u ()
uXi         = useSymbol $ char 'X'

uPi         :: (Num u, FromPtSize u) => TextM u ()
uPi         = useSymbol $ char 'P'

uSigma      :: (Num u, FromPtSize u) => TextM u ()
uSigma      = useSymbol $ char 'S'

-- | Not working, though 161 should be uUpsilon.
--
uUpsilon    :: (Num u, FromPtSize u) => TextM u ()
uUpsilon    = useSymbol $ char $ chr 161

uPhi        :: (Num u, FromPtSize u) => TextM u ()
uPhi        = useSymbol $ char 'F'

uPsi        :: (Num u, FromPtSize u) => TextM u ()
uPsi        = useSymbol $ char 'Y'

uOmega      :: (Num u, FromPtSize u) => TextM u ()
uOmega      = useSymbol $ char 'W'