content: {-# LANGUAGE OverloadedStrings #-}
  {-
  Copyright (C) 2014 Matthew Pickering <matthewtpickering@gmail.com>
  
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
  
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  -}
  
  {- |
     Module      : Text.TeXMath.Unicode.Fonts
     Copyright   : Copyright (C) 2014 Matthew Pickering
     License     : GNU GPL, version 2 or above
  
     Maintainer  : Matthew Pickering <matthewtpickering@gmail.com>
     Stability   : alpha
     Portability : portable
  
  Utilities to convert between MS font codepoints and unicode characters.
  -}
  module Text.TeXMath.Unicode.Fonts (getUnicode, Font(..), textToFont) where
  import qualified Data.Map as M
  import qualified Data.Text as T
  
  -- | Enumeration of recognised fonts
  data Font = Symbol -- ^ <http://en.wikipedia.org/wiki/Symbol_(typeface) Adobe Symbol>
            deriving (Show, Eq)
  
  -- | Parse font name into Font if possible.
  textToFont :: T.Text -> Maybe Font
  textToFont "Symbol" = Just Symbol
  textToFont _ = Nothing
  
  -- | Given a font and codepoint, returns the corresponding unicode
  -- character
  getUnicode :: Font -> Char -> Maybe Char
  getUnicode Symbol c = M.lookup c symbol
  
  -- Generated from lib/fonts/symbol.txt
  symbol :: M.Map Char Char
  symbol = M.fromList
    [ (' ',' ')
    , (' ','\160')
    , ('!','!')
    , ('"','\8704')
    , ('#','#')
    , ('$','\8707')
    , ('%','%')
    , ('&','&')
    , ('\'','\8715')
    , ('(','(')
    , (')',')')
    , ('*','\8727')
    , ('+','+')
    , (',',',')
    , ('-','\8722')
    , ('.','.')
    , ('/','/')
    , ('0','0')
    , ('1','1')
    , ('2','2')
    , ('3','3')
    , ('4','4')
    , ('5','5')
    , ('6','6')
    , ('7','7')
    , ('8','8')
    , ('9','9')
    , (':',':')
    , (';',';')
    , ('<','<')
    , ('=','=')
    , ('>','>')
    , ('?','?')
    , ('@','\8773')
    , ('A','\913')
    , ('B','\914')
    , ('C','\935')
    , ('D','\916')
    , ('D','\8710')
    , ('E','\917')
    , ('F','\934')
    , ('G','\915')
    , ('H','\919')
    , ('I','\921')
    , ('J','\977')
    , ('K','\922')
    , ('L','\923')
    , ('M','\924')
    , ('N','\925')
    , ('O','\927')
    , ('P','\928')
    , ('Q','\920')
    , ('R','\929')
    , ('S','\931')
    , ('T','\932')
    , ('U','\933')
    , ('V','\962')
    , ('W','\937')
    , ('W','\8486')
    , ('X','\926')
    , ('Y','\936')
    , ('Z','\918')
    , ('[','[')
    , ('\\','\8756')
    , (']',']')
    , ('^','\8869')
    , ('_','_')
    , ('`','\63717')
    , ('a','\945')
    , ('b','\946')
    , ('c','\967')
    , ('d','\948')
    , ('e','\949')
    , ('f','\966')
    , ('g','\947')
    , ('h','\951')
    , ('i','\953')
    , ('j','\981')
    , ('k','\954')
    , ('l','\955')
    , ('m','\181')
    , ('m','\956')
    , ('n','\957')
    , ('o','\959')
    , ('p','\960')
    , ('q','\952')
    , ('r','\961')
    , ('s','\963')
    , ('t','\964')
    , ('u','\965')
    , ('v','\982')
    , ('w','\969')
    , ('x','\958')
    , ('y','\968')
    , ('z','\950')
    , ('{','{')
    , ('|','|')
    , ('}','}')
    , ('~','\8764')
    , ('\160','\8364')
    , ('\161','\978')
    , ('\162','\8242')
    , ('\163','\8804')
    , ('\164','\8260')
    , ('\164','\8725')
    , ('\165','\8734')
    , ('\166','\402')
    , ('\167','\9827')
    , ('\168','\9830')
    , ('\169','\9829')
    , ('\170','\9824')
    , ('\171','\8596')
    , ('\172','\8592')
    , ('\173','\8593')
    , ('\174','\8594')
    , ('\175','\8595')
    , ('\176','\176')
    , ('\177','\177')
    , ('\178','\8243')
    , ('\179','\8805')
    , ('\180','\215')
    , ('\181','\8733')
    , ('\182','\8706')
    , ('\183','\8226')
    , ('\184','\247')
    , ('\185','\8800')
    , ('\186','\8801')
    , ('\187','\8776')
    , ('\188','\8230')
    , ('\189','\63718')
    , ('\190','\63719')
    , ('\191','\8629')
    , ('\192','\8501')
    , ('\193','\8465')
    , ('\194','\8476')
    , ('\195','\8472')
    , ('\196','\8855')
    , ('\197','\8853')
    , ('\198','\8709')
    , ('\199','\8745')
    , ('\200','\8746')
    , ('\201','\8835')
    , ('\202','\8839')
    , ('\203','\8836')
    , ('\204','\8834')
    , ('\205','\8838')
    , ('\206','\8712')
    , ('\207','\8713')
    , ('\208','\8736')
    , ('\209','\8711')
    , ('\210','\63194')
    , ('\211','\63193')
    , ('\212','\63195')
    , ('\213','\8719')
    , ('\214','\8730')
    , ('\215','\8901')
    , ('\216','\172')
    , ('\217','\8743')
    , ('\218','\8744')
    , ('\219','\8660')
    , ('\220','\8656')
    , ('\221','\8657')
    , ('\222','\8658')
    , ('\223','\8659')
    , ('\224','\9674')
    , ('\225','\9001')
    , ('\226','\63720')
    , ('\227','\63721')
    , ('\228','\63722')
    , ('\229','\8721')
    , ('\230','\63723')
    , ('\231','\63724')
    , ('\232','\63725')
    , ('\233','\63726')
    , ('\234','\63727')
    , ('\235','\63728')
    , ('\236','\63729')
    , ('\237','\63730')
    , ('\238','\63731')
    , ('\239','\63732')
    , ('\241','\9002')
    , ('\242','\8747')
    , ('\243','\8992')
    , ('\244','\63733')
    , ('\245','\8993')
    , ('\246','\63734')
    , ('\247','\63735')
    , ('\248','\63736')
    , ('\249','\63737')
    , ('\250','\63738')
    , ('\251','\63739')
    , ('\252','\63740')
    , ('\253','\63741')
    , ('\254','\63742')]
  