{-# 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 Greek letters

    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 Greek letters
  , uGamma
  , uDelta
  , uTheta
  , uLambda
  , uXi
  , uPi
  , uSigma
  , uUpsilon
  , uPhi
  , uPsi
  , uOmega

  , otimes
  , oplus

  ) where


import Wumpus.Basic.Text.LRText


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


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


alpha       :: Num u => TextM u ()
alpha       = symb 'a'

beta        :: Num u => TextM u ()
beta        = symb 'b'

gamma       :: Num u => TextM u ()
gamma       = symb 'g'

delta       :: Num u => TextM u ()
delta       = symb 'd'

epsilon     :: Num u => TextM u ()
epsilon     = symb 'e'

zeta        :: Num u => TextM u ()
zeta        = symb 'z'

eta         :: Num u => TextM u ()
eta         = symb 'h'

theta       :: Num u => TextM u ()
theta       = symb 'q'

iota        :: Num u => TextM u ()
iota        = symb 'i'

kappa       :: Num u => TextM u ()
kappa       = symb 'k'

lambda      :: Num u => TextM u ()
lambda      = symb 'l'

mu          :: Num u => TextM u ()
mu          = symb 'm'

nu          :: Num u => TextM u ()
nu          = symb 'n'

xi          :: Num u => TextM u ()
xi          = symb 'x'

pi          :: Num u => TextM u ()
pi          = symb 'p'

rho         :: Num u => TextM u ()
rho         = symb 'r'

sigma       :: Num u => TextM u ()
sigma       = symb 's'

tau         :: Num u => TextM u ()
tau         = symb 't'

upsilon     :: Num u => TextM u ()
upsilon     = symb 'u'

phi         :: Num u => TextM u ()
phi         = symb 'j'

chi         :: Num u => TextM u ()
chi         = symb 'c'

psi         :: Num u => TextM u ()
psi         = symb 'y'

omega       :: Num u => TextM u ()
omega       = symb 'w'


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

uGamma      :: Num u => TextM u ()
uGamma      = symb 'G'

uDelta      :: Num u => TextM u ()
uDelta      = symb 'D'

uTheta      :: Num u => TextM u ()
uTheta      = symb 'Q'

uLambda     :: Num u => TextM u ()
uLambda     = symb 'L'

uXi         :: Num u => TextM u ()
uXi         = symb 'X'

uPi         :: Num u => TextM u ()
uPi         = symb 'P'

uSigma      :: Num u => TextM u ()
uSigma      = symb 'S'

-- | Not working in PostScript, @\&\#161;@ works for SVG but 
-- PostScript needs an encoding table for Symbol-Font not Latin1!
--
-- For PostScript, Latin1 @161@ maps to @exclamdown@ not 
-- @Upsilon1@, extending Wumpus-Core to support this will require 
-- quite some work...
--
uUpsilon    :: Num u => TextM u ()
uUpsilon    = symbEscInt 161

uPhi        :: Num u => TextM u ()
uPhi        = symb 'F'

uPsi        :: Num u => TextM u ()
uPsi        = symb 'Y'

uOmega      :: Num u => TextM u ()
uOmega      = symb 'W'


--------------------------------------------------------------------------------

otimes      :: Num u => TextM u ()
otimes      = symbi 0xc4

oplus       :: Num u => TextM u ()
oplus       = symbi 0xc5