{-# OPTIONS -Wall #-}

--------------------------------------------------------------------------------
-- |
-- Module      :  Wumpus.Core.Text.SymbolFont
-- Copyright   :  (c) Stephen Tetley 2010
-- License     :  BSD3
--
-- Maintainer  :  stephen.tetley@gmail.com
-- Stability   :  unstable
-- Portability :  GHC
--
-- A @TextEncoder@ record instance for Symbol font characters.
-- 
--------------------------------------------------------------------------------

module Wumpus.Core.Text.SymbolFont
  ( 
  
    symbol_font_encoder
  , symbolFontEncoder
  , symbolFontAll

  ) where

import Wumpus.Core.Text.Encoder

import qualified Data.Map as Map



-- | Symbol Font Encoder name 
--
-- (Number 1)
-- 
symbol_font_encoder :: FontEncoderName
symbol_font_encoder = FontEncoderName 1



-- | Latin1 TextEncoder instance.
symbolFontEncoder :: FontEncoder
symbolFontEncoder = FontEncoder 
    { ps_lookup         = Map.lookup `flip` codeToName
    , svg_lookup        = Map.lookup `flip` nameToCode
    , ps_fallback       = "space"
    , svg_fallback      = 0o040
    }

nameToCode :: Map.Map GlyphName CharCode
nameToCode = Map.fromList symbolFontAll

codeToName :: Map.Map CharCode GlyphName
codeToName = foldr fn Map.empty symbolFontAll where
  fn (s,i) a = Map.insert i s a 

-- | A lookup list of Latin 1 names to their octal code.
symbolFontAll :: [(GlyphName, CharCode)]
symbolFontAll = 
    [ ("Alpha",                 0o101)
    , ("Beta",                  0o102)
    , ("Chi",                   0o103)
    , ("Delta",                 0o104)
    , ("Epsilon",               0o105)
    , ("Eta",                   0o110)
    , ("Euro",                  0o240)
    , ("Gamma",                 0o107)
    , ("Ifraktur",              0o301)
    , ("Iota",                  0o111)
    , ("Kappa",                 0o113)
    , ("Lambda",                0o114)
    , ("Mu",                    0o115)
    , ("Nu",                    0o116)
    , ("Omega",                 0o127)
    , ("Omicron",               0o117)
    , ("Phi",                   0o106)
    , ("Pi",                    0o120)
    , ("Psi",                   0o131)
    , ("Rfraktur",              0o302)
    , ("Rho",                   0o122)
    , ("Sigma",                 0o123)
    , ("Tau",                   0o124)
    , ("Theta",                 0o121)
    , ("Upsilon",               0o125)
    , ("Upsilon1",              0o241)
    , ("Xi",                    0o130)
    , ("Zeta",                  0o132)
    , ("aleph",                 0o300)
    , ("alpha",                 0o141)
    , ("ampersand",             0o046)
    , ("angle",                 0o320)
    , ("angleleft",             0o341)
    , ("angleright",            0o361)
    , ("approxequal",           0o273)
    , ("arrowboth",             0o253)
    , ("arrowdblboth",          0o333)
    , ("arrowdbldown",          0o337)
    , ("arrowdblleft",          0o334)
    , ("arrowdblright",         0o336)
    , ("arrowdblup",            0o335)
    , ("arrowdown",             0o257)
    , ("arrowhorizex",          0o276)
    , ("arrowleft",             0o254)
    , ("arrowright",            0o256)
    , ("arrowup",               0o255)
    , ("arrowvertex",           0o275)
    , ("asteriskmath",          0o052)
    , ("bar",                   0o174)
    , ("beta",                  0o142)
    , ("braceleft",             0o173)
    , ("braceright",            0o175)
    , ("bracelefttp",           0o354)
    , ("braceleftmid",          0o355)
    , ("braceleftbt",           0o356)
    , ("bracerighttp",          0o374)
    , ("bracerightmid",         0o375)
    , ("bracerightbt",          0o376)
    , ("braceex",               0o357)
    , ("bracketleft",           0o133)
    , ("bracketright",          0o135)
    , ("bracketlefttp",         0o351)
    , ("bracketleftex",         0o352)
    , ("bracketleftbt",         0o353)
    , ("bracketrighttp",        0o371)
    , ("bracketrightex",        0o372)
    , ("bracketrightbt",        0o373)
    , ("bullet",                0o267)
    , ("carriagereturn",        0o277)
    , ("chi",                   0o143)
    , ("circlemultiply",        0o304)
    , ("circleplus",            0o305)
    , ("club",                  0o247)
    , ("colon",                 0o072)
    , ("comma",                 0o054)
    , ("congruent",             0o100)
    , ("copyrightsans",         0o343)
    , ("copyrightserif",        0o323)
    , ("degree",                0o260)
    , ("delta",                 0o144)
    , ("diamond",               0o250)
    , ("divide",                0o270)
    , ("dotmath",               0o327)
    , ("eight",                 0o070)
    , ("element",               0o316)
    , ("ellipsis",              0o274)
    , ("emptyset",              0o306)
    , ("epsilon",               0o145)
    , ("equal",                 0o075)
    , ("equivalence",           0o272)
    , ("eta",                   0o150)
    , ("exclam",                0o041)
    , ("existential",           0o044)
    , ("five",                  0o065)
    , ("florin",                0o246)
    , ("four",                  0o064)
    , ("fraction",              0o244)
    , ("gamma",                 0o147)
    , ("gradient",              0o321)
    , ("greater",               0o076)
    , ("greaterequal",          0o263)
    , ("heart",                 0o251)
    , ("infinity",              0o245)
    , ("integral",              0o362)
    , ("integraltp",            0o363)
    , ("integralex",            0o364)
    , ("integralbt",            0o365)
    , ("intersection",          0o307)
    , ("iota",                  0o151)
    , ("kappa",                 0o153)
    , ("lambda",                0o154)
    , ("less",                  0o074)
    , ("lessequal",             0o243)
    , ("logicaland",            0o331)
    , ("logicalnot",            0o330)
    , ("logicalor",             0o332)
    , ("lozenge",               0o340)
    , ("minus",                 0o055)
    , ("minute",                0o242)
    , ("mu",                    0o155)
    , ("multiply",              0o264)
    , ("nine",                  0o071)
    , ("notelement",            0o317)
    , ("notequal",              0o271)
    , ("notsubset",             0o313)
    , ("nu",                    0o156)
    , ("numbersign",            0o043)
    , ("omega",                 0o167)
    , ("omega1",                0o166)
    , ("omicron",               0o157)
    , ("one",                   0o061)
    , ("parenleft",             0o050)
    , ("parenright",            0o051)
    , ("parenlefttp",           0o346)
    , ("parenleftex",           0o347)
    , ("parenleftbt",           0o350)
    , ("parenrighttp",          0o366)
    , ("parenrightex",          0o367)
    , ("parenrightbt",          0o370)
    , ("partialdiff",           0o266)
    , ("percent",               0o045)
    , ("period",                0o056)
    , ("perpendicular",         0o136)
    , ("phi",                   0o146)
    , ("phi1",                  0o152)
    , ("pi",                    0o160)
    , ("plus",                  0o053)
    , ("plusminus",             0o261)
    , ("product",               0o325)
    , ("propersubset",          0o314)
    , ("propersuperset",        0o311)
    , ("proportional",          0o265)
    , ("psi",                   0o171)
    , ("question",              0o077)
    , ("radical",               0o326)
    , ("radicalex",             0o140)
    , ("reflexsubset",          0o315)
    , ("reflexsuperset",        0o312)
    , ("registersans",          0o342)
    , ("registerserif",         0o322)
    , ("rho",                   0o162)
    , ("second",                0o262)
    , ("semicolon",             0o073)
    , ("seven",                 0o067)
    , ("sigma",                 0o163)
    , ("sigma1",                0o126)
    , ("similar",               0o176)
    , ("six",                   0o066)
    , ("slash",                 0o057)
    , ("space",                 0o040)
    , ("spade",                 0o252)
    , ("suchthat",              0o047)
    , ("summation",             0o345)
    , ("tau",                   0o164)
    , ("therefore",             0o134)
    , ("theta",                 0o161)
    , ("theta1",                0o112)
    , ("three",                 0o063)
    , ("trademarksans",         0o344)
    , ("trademarkserif",        0o324)
    , ("two",                   0o062)
    , ("underscore",            0o137)
    , ("union",                 0o310)
    , ("universal",             0o042)
    , ("upsilon",               0o165)
    , ("weierstrass",           0o303)
    , ("xi",                    0o170)
    , ("zero",                  0o060)
    , ("zeta",                  0o172)
    ]