{-# OPTIONS -Wall #-}

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

module Wumpus.Core.TextLatin1
  ( 
  
    latin1_font_encoder
  , latin1FontEncoder
  , latin1FontAll

  ) where

import Wumpus.Core.TextEncoder

import qualified Data.Map as Map


-- | Latin1 Font Encoder name 
--  
-- (Number 0) 
--
latin1_font_encoder :: FontEncoderName
latin1_font_encoder = FontEncoderName 0

-- | Latin1 FontEncoder instance.
latin1FontEncoder :: FontEncoder
latin1FontEncoder = 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 latin1FontAll

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

-- | A lookup list of Latin 1 names to their octal code.
latin1FontAll :: [(GlyphName, CharCode)]
latin1FontAll = 
    [ ("A",                     0o101)
    , ("AE",                    0o306)
    , ("Aacute",                0o301)
    , ("Acircumflex",           0o302)
    , ("Adieresis",             0o304)
    , ("Agrave",                0o300)
    , ("Aring",                 0o305)
    , ("Atilde",                0o303)
    , ("B",                     0o102)
    , ("C",                     0o103)
    , ("Ccedilla",              0o307)
    , ("D",                     0o104)
    , ("E",                     0o105)
    , ("Eacute",                0o311)
    , ("Ecircumflex",           0o312)
    , ("Edieresis",             0o313)
    , ("Egrave",                0o310)
    , ("Eth",                   0o320)
    , ("F",                     0o106)
    , ("G",                     0o107)
    , ("H",                     0o110)
    , ("I",                     0o111)
    , ("Iacute",                0o315)
    , ("Icircumflex",           0o316)
    , ("Idieresis",             0o317)
    , ("Igrave",                0o314)
    , ("J",                     0o112)
    , ("K",                     0o113)
    , ("L",                     0o114)
    , ("M",                     0o115)
    , ("N",                     0o116)
    , ("Ntilde",                0o321)
    , ("O",                     0o117)
    , ("Oacute",                0o323)
    , ("Ocircumflex",           0o324)
    , ("Odieresis",             0o326)
    , ("Ograve",                0o322)
    , ("Oslash",                0o351)
    , ("Otilde",                0o325)
    , ("P",                     0o120)
    , ("Q",                     0o121)
    , ("R",                     0o122)
    , ("S",                     0o123)
    , ("T",                     0o124)
    , ("Thorn",                 0o336)
    , ("U",                     0o125)
    , ("Uacute",                0o332)
    , ("Ucircumflex",           0o333)
    , ("Udieresis",             0o334)
    , ("Ugrave",                0o331)
    , ("V",                     0o126)
    , ("W",                     0o127)
    , ("X",                     0o130)
    , ("Y",                     0o131)
    , ("Yacute",                0o335)
    , ("Z",                     0o132)
    , ("a",                     0o141)
    , ("aacute",                0o341)
    , ("acircumflex",           0o342)
    , ("acute2",                0o264)
    , ("adieresis",             0o344)
    , ("ae",                    0o346)
    , ("agrave",                0o340)
    , ("ampersand",             0o046)
    , ("aring",                 0o345)
    , ("asciicircum",           0o136)
    , ("asciitilde",            0o176)
    , ("asterisk",              0o052)
    , ("at",                    0o100)
    , ("atilde",                0o343)
    , ("b",                     0o142)
    , ("backslash",             0o134)
    , ("bar",                   0o174)
    , ("braceleft",             0o173)
    , ("braceright",            0o175)
    , ("bracketleft",           0o133)
    , ("bracketright",          0o135)
    , ("breve",                 0o226)
    , ("brokenbar",             0o246)
    , ("c",                     0o143)
    , ("caron",                 0o237)
    , ("ccedilla",              0o347)
    , ("cedilla",               0o270)
    , ("cent",                  0o242)
    , ("circumflex",            0o223)
    , ("colon",                 0o072)
    , ("comma",                 0o054)
    , ("copyright",             0o251)
    , ("currency",              0o244)
    , ("d",                     0o144)
    , ("degree",                0o260)
    , ("dieresis",              0o250)
    , ("divide",                0o367)
    , ("dollar",                0o044)
    , ("dotaccent",             0o227)
    , ("dotlessi",              0o220)
    , ("e",                     0o145)
    , ("eacute",                0o351)
    , ("ecircumflex",           0o352)
    , ("edieresis",             0o353)
    , ("egrave",                0o350)
    , ("eight",                 0o070)
    , ("equal",                 0o075)
    , ("eth",                   0o360)
    , ("exclam",                0o041)
    , ("exclamdown",            0o241)
    , ("f",                     0o146)
    , ("five",                  0o065)
    , ("four",                  0o064)
    , ("g",                     0o147)
    , ("germandbls",            0o337)
    , ("grave",                 0o221)
    , ("greater",               0o076)
    , ("guillemotleft",         0o253)
    , ("guillemotright",        0o273)
    , ("h",                     0o150)
    , ("hungarumlaut",          0o235)
    , ("hyphen",                0o255)
    , ("i",                     0o151)
    , ("iacute",                0o355)
    , ("icircumflex",           0o356)
    , ("idieresis",             0o357)
    , ("igrave",                0o354)
    , ("j",                     0o152)
    , ("k",                     0o153)
    , ("l",                     0o154)
    , ("less",                  0o074)
    , ("logicalnot",            0o254)
    , ("m",                     0o155)
    , ("macron",                0o257)
    , ("minus",                 0o055)
    , ("mu",                    0o265)
    , ("multiply",              0o327)
    , ("n",                     0o156)
    , ("nine",                  0o071)
    , ("ntilde",                0o361)
    , ("numbersign",            0o043)
    , ("o",                     0o157)
    , ("oacute",                0o363)
    , ("ocircumflex",           0o364)
    , ("odieresis",             0o366)
    , ("ogonek",                0o236)
    , ("ograve",                0o362)
    , ("one",                   0o061)
    , ("onehalf",               0o275)
    , ("onequarter",            0o274)
    , ("onesuperior",           0o271)
    , ("ordfeminine",           0o252)
    , ("ordmasculine",          0o272)
    , ("oslash",                0o370)
    , ("otilde",                0o365)
    , ("p",                     0o160)
    , ("paragraph",             0o266)
    , ("parenleft",             0o050)
    , ("parenright",            0o051)
    , ("percent",               0o045)
    , ("period",                0o056)
    , ("periodcentered",        0o267)
    , ("plus",                  0o053)
    , ("plusminus",             0o261)
    , ("q",                     0o161)
    , ("question",              0o077)
    , ("questiondown",          0o277)
    , ("quotedbl",              0o042)
    , ("quoteleft",             0o140)
    , ("quoteright",            0o047)
    , ("r",                     0o162)
    , ("registered",            0o256)
    , ("ring",                  0o232)
    , ("s",                     0o163)
    , ("section",               0o247)
    , ("semicolon",             0o073)
    , ("seven",                 0o067)
    , ("six",                   0o066)
    , ("slash",                 0o057)
    , ("space",                 0o040)
    , ("sterling",              0o243)
    , ("t",                     0o164)
    , ("thorn",                 0o376)
    , ("three",                 0o063)
    , ("threequarters",         0o276)
    , ("threesuperior",         0o263)
    , ("tilde",                 0o224)
    , ("two",                   0o062)
    , ("twosuperior",           0o262)
    , ("u",                     0o165)
    , ("uacute",                0o372)
    , ("ucircumflex",           0o373)
    , ("udieresis",             0o374)
    , ("ugrave",                0o371)
    , ("underscore",            0o137)
    , ("v",                     0o166)
    , ("w",                     0o167)
    , ("x",                     0o170)
    , ("y",                     0o171)
    , ("yacute",                0o375)
    , ("ydieresis",             0o377)
    , ("yen",                   0o245)
    , ("z",                     0o172)
    , ("zero",                  0o060)
    ]