{-# LANGUAGE CPP #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} ------------------------------------------------------------------------------- -- | -- Module : Yesod.Goodies.Markdown -- Copyright : (c) Patrick Brisbin 2010 -- License : as-is -- -- Maintainer : pbrisbin@gmail.com -- Stability : unstable -- Portability : unportable -- -- Rewrite/simplification of yesod-markdown written by ajdunlap. -- -- -- ------------------------------------------------------------------------------- module Yesod.Goodies.Markdown ( Markdown(..) -- * Conversions , parseMarkdown , writePandoc -- * Wrappers , markdownToHtml , markdownFromFile -- * Option sets , yesodDefaultWriterOptions , yesodDefaultParserState -- * Form helper , markdownField ) where import Yesod import Yesod.Form.Types import Yesod.Goodies.Shorten import Text.Blaze (preEscapedString) import Text.Pandoc import Text.Pandoc.Shared import Data.Monoid (Monoid) import Data.String (IsString) import System.Directory (doesFileExist) import qualified Data.Text as T newtype Markdown = Markdown String deriving (Eq, Ord, Show, Read, PersistField, IsString, Monoid) instance Shorten Markdown where shorten n (Markdown s) = Markdown $ shorten n s instance ToField Markdown master where toField = areq markdownField instance ToField (Maybe Markdown) master where toField = aopt markdownField markdownField :: RenderMessage master FormMessage => Field sub master Markdown markdownField = Field { fieldParse = blank $ Right . Markdown . unlines . lines' . T.unpack , fieldView = \theId name val _isReq -> addHamlet #if __GLASGOW_HASKELL__ >= 700 [hamlet| #else [$hamlet| #endif