packages feed

Bookshelf-0.3: Types.hs

-- Copyright (C) 2009-2013 Emil Axelsson <emax@chalmers.se>
--
-- 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

-- |
-- Copyright  : Copyright (C) 2009-2012 Emil Axelsson <emax@chalmers.se>
-- License    : GNU GPL, version 2 or above
--
-- Maintainer : Emil Axelsson <emax@chalmers.se>

module Types where



import Text.CSL
import Text.Pandoc



data MetaInfo = MetaInfo
       { title    :: [Inline]
       , authors  :: [[Inline]]
       , date     :: [Inline]
       , comment  :: [Inline]
       , keywords :: [[Inline]]
       }
     deriving (Eq, Show)

data Context = Context
       { -- | Pandoc HTML template
         htmlTemplate_ :: String
         -- | CSL style
       , cslStyle_     :: Style
         -- | List of available references
       , references_   :: [Reference]
         -- | Optional link to CSS file
       , cssLink_      :: Maybe FilePath
         -- | Optional link to MathJax.js file
       , mathjaxLink_  :: Maybe FilePath
         -- | Use MathML rendering?
       , mathml_       :: Bool
         -- | Path to root of bookshelf
       , rootPath_     :: FilePath
         -- | Path to current node, relative to the root
       , relPath_      :: FilePath
       }
     deriving (Show)

data ShelfInfo = ShelfInfo
       { -- | The document's context
         shelfContext  :: Context
         -- | The full name of the associated main document. `Nothing` means
         -- that there is no main document.
       , mainDocument  :: Maybe String
         -- | The full name of the shelf document.
       , shelfDocument :: String
       }

class HasContext a
  where
    htmlTemplate :: a -> String
    cslStyle     :: a -> Style
    references   :: a -> [Reference]
    cssLink      :: a -> Maybe FilePath
    mathjaxLink  :: a -> Maybe FilePath
    mathml       :: a -> Bool
    rootPath     :: a -> FilePath
    relPath      :: a -> FilePath

instance HasContext Context
  where
    htmlTemplate = htmlTemplate_
    cslStyle     = cslStyle_
    references   = references_
    cssLink      = cssLink_
    mathjaxLink  = mathjaxLink_
    mathml       = mathml_
    rootPath     = rootPath_
    relPath      = relPath_

instance HasContext ShelfInfo
  where
    htmlTemplate = htmlTemplate_ . shelfContext
    cslStyle     = cslStyle_     . shelfContext
    references   = references_   . shelfContext
    cssLink      = cssLink_      . shelfContext
    mathjaxLink  = mathjaxLink_  . shelfContext
    mathml       = mathml_       . shelfContext
    rootPath     = rootPath_     . shelfContext
    relPath      = relPath_      . shelfContext