diff --git a/package.yaml b/package.yaml index 83febd2..8e21c97 100644 --- a/package.yaml +++ b/package.yaml @@ -67,7 +67,7 @@ dependencies: - mono-traversable - time - process -- markdown +- cmark-gfm - formatting - blaze-html - haddock-library diff --git a/src/Data/WebsiteContent.hs b/src/Data/WebsiteContent.hs index 7e2b98f..490c86c 100644 --- a/src/Data/WebsiteContent.hs +++ b/src/Data/WebsiteContent.hs @@ -6,12 +6,13 @@ module Data.WebsiteContent ) where import ClassyPrelude.Yesod -import Text.Markdown (markdown, msXssProtect, msAddHeadingId) +import CMarkGFM import Data.GhcLinks import Data.Aeson (withObject) import Data.Yaml import System.FilePath (takeFileName) import Types +import Text.Blaze.Html (preEscapedToHtml) data WebsiteContent = WebsiteContent { wcHomepage :: !Html @@ -49,13 +50,11 @@ loadWebsiteContent dir = do >>= either throwIO (return . setFromList . map PackageName) return WebsiteContent {..} where - readHtml fp = fmap (preEscapedToMarkup . decodeUtf8 :: ByteString -> Html) - $ readFile $ dir fp - readMarkdown fp = fmap (markdown def - { msXssProtect = False - , msAddHeadingId = True - } . fromStrict . decodeUtf8) - $ readFile $ dir fp + readHtml fp = fmap preEscapedToMarkup $ readFileUtf8 $ dir fp + readMarkdown fp = fmap (preEscapedToHtml . commonmarkToHtml + [optSmart] + [extTable, extAutolink]) + $ readFileUtf8 $ dir fp loadPosts :: FilePath -> IO (Vector Post) loadPosts dir = @@ -80,10 +79,10 @@ loadPosts dir = _ -> error "Does not start with --- frontmatter" case Data.Yaml.decodeEither' $ encodeUtf8 frontmatter of Left e -> throwIO e - Right mkPost -> return $ mkPost slug $ markdown def - { msXssProtect = False - , msAddHeadingId = True - } $ fromStrict body + Right mkPost -> return $ mkPost slug $ preEscapedToHtml $ commonmarkToHtml + [optSmart] + [extTable, extAutolink] + body instance (slug ~ Text, body ~ Html) => FromJSON (slug -> body -> Post) where parseJSON = withObject "Post" $ \o -> do diff --git a/src/Stackage/Database.hs b/src/Stackage/Database.hs index 3f1ba2c..a92b194 100644 --- a/src/Stackage/Database.hs +++ b/src/Stackage/Database.hs @@ -49,12 +49,12 @@ module Stackage.Database import Web.PathPieces (toPathPiece) import qualified Codec.Archive.Tar as Tar import Database.Esqueleto.Internal.Language (From) -import Text.Markdown (markdown, msAddHeadingId, def) +import CMarkGFM import System.Directory (removeFile) import Stackage.Database.Haddock import System.FilePath (takeBaseName, takeExtension) import ClassyPrelude.Conduit hiding (pi, FilePath, ()) -import Text.Blaze.Html (Html, toHtml) +import Text.Blaze.Html (Html, toHtml, preEscapedToHtml) import Yesod.Form.Fields (Textarea (..)) import Stackage.Database.Types import System.Directory (getAppUserDataDirectory) @@ -351,9 +351,10 @@ addPackage e = fp = Tar.entryPath e base = takeBaseName fp - renderContent txt "markdown" = markdown - (def { msAddHeadingId = True }) - (fromStrict txt) + renderContent txt "markdown" = preEscapedToHtml $ commonmarkToHtml + [optSmart, optSafe] + [extTable, extAutolink] + txt renderContent txt "haddock" = renderHaddock txt renderContent txt _ = toHtml $ Textarea txt