-- | This module provides the functionallity to use -- pandocs reader for reStructuredText (RST) in Yesod. -- The code bases heavily on yesod-markdown from -- Patrick Brisbin, which does the same thing for Markdown. module Yesod.RST ( RST(..) -- * Wrappers , rstToHtml , rstToHtmlTrusted , rstFromFile -- * Conversions , parseRST , writePandoc , writePandocTrusted -- * Option sets , yesodDefaultWriterOptions , yesodDefaultParserState -- * Form helper , rstField ) where import Yesod.Form (ToField(..), areq, aopt) import Yesod.Core (RenderMessage, SomeMessage(..)) import Yesod.Form.Types import Yesod.Widget (toWidget) import Text.Hamlet (hamlet, Html) import Database.Persist (PersistField) import Text.Blaze (preEscapedString, preEscapedText) import Text.Pandoc import Text.HTML.SanitizeXSS (sanitizeBalance) import Data.Monoid (Monoid) import Data.String (IsString) import System.Directory (doesFileExist) import Data.Text (Text, pack, unpack) newtype RST = RST String deriving (Eq, Ord, Show, Read, PersistField, IsString, Monoid) instance ToField RST master where toField = areq rstField instance ToField (Maybe RST) master where toField = aopt rstField rstField :: RenderMessage master FormMessage => Field sub master RST rstField = Field { fieldParse = blank $ Right . RST . unlines . lines' . unpack , fieldView = \theId name attrs val _isReq -> toWidget [hamlet|