aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2015-12-25 11:03:11 +0100
committerBen Gamari <ben@smart-cactus.org>2015-12-25 11:03:11 +0100
commit0104ef892820383845b3dce44c46899fec2f04f0 (patch)
tree81eba131303296aeb5ef5c880504cab0932dcab2
parent2d4680f12f8c9cd647049eb1e3e56531bd44e880 (diff)
parent3f50b955324bd4b42f88a421f0203bc46a3ccf64 (diff)
Merge remote-tracking branch 'idontgetoutmuch/ghc-head' into ghc-head
-rw-r--r--haddock-api/src/Haddock.hs5
-rw-r--r--haddock-api/src/Haddock/Backends/Hoogle.hs2
-rw-r--r--haddock-api/src/Haddock/Backends/LaTeX.hs6
-rw-r--r--haddock-api/src/Haddock/Backends/Xhtml.hs24
-rw-r--r--haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs3
-rw-r--r--haddock-api/src/Haddock/Interface/LexParseRn.hs2
-rw-r--r--haddock-api/src/Haddock/InterfaceFile.hs13
-rw-r--r--haddock-api/src/Haddock/Options.hs7
-rw-r--r--haddock-api/src/Haddock/Types.hs5
-rw-r--r--haddock-api/src/Haddock/Utils.hs4
-rw-r--r--haddock-library/src/Documentation/Haddock/Parser.hs22
-rw-r--r--haddock-library/src/Documentation/Haddock/Types.hs2
-rw-r--r--haddock-library/test/Documentation/Haddock/ParserSpec.hs4
-rw-r--r--html-test/ref/Bug387.html2
-rw-r--r--html-test/ref/Math.html103
-rw-r--r--html-test/ref/mini_A.html2
-rw-r--r--html-test/ref/mini_AdvanceTypes.html2
-rw-r--r--html-test/ref/mini_B.html2
-rw-r--r--html-test/ref/mini_Bug1.html2
-rw-r--r--html-test/ref/mini_Bug2.html2
-rw-r--r--html-test/ref/mini_Bug3.html2
-rw-r--r--html-test/ref/mini_Bug4.html2
-rw-r--r--html-test/ref/mini_Bug6.html2
-rw-r--r--html-test/ref/mini_Bug7.html2
-rw-r--r--html-test/ref/mini_Bug8.html2
-rw-r--r--html-test/ref/mini_BugDeprecated.html2
-rw-r--r--html-test/ref/mini_BugExportHeadings.html2
-rw-r--r--html-test/ref/mini_Bugs.html2
-rw-r--r--html-test/ref/mini_DeprecatedClass.html2
-rw-r--r--html-test/ref/mini_DeprecatedData.html2
-rw-r--r--html-test/ref/mini_DeprecatedFunction.html2
-rw-r--r--html-test/ref/mini_DeprecatedFunction2.html2
-rw-r--r--html-test/ref/mini_DeprecatedFunction3.html2
-rw-r--r--html-test/ref/mini_DeprecatedModule.html2
-rw-r--r--html-test/ref/mini_DeprecatedModule2.html2
-rw-r--r--html-test/ref/mini_DeprecatedNewtype.html2
-rw-r--r--html-test/ref/mini_DeprecatedReExport.html2
-rw-r--r--html-test/ref/mini_DeprecatedRecord.html2
-rw-r--r--html-test/ref/mini_DeprecatedTypeFamily.html2
-rw-r--r--html-test/ref/mini_DeprecatedTypeSynonym.html2
-rw-r--r--html-test/ref/mini_Examples.html2
-rw-r--r--html-test/ref/mini_FunArgs.html2
-rw-r--r--html-test/ref/mini_GADTRecords.html2
-rw-r--r--html-test/ref/mini_Hash.html2
-rw-r--r--html-test/ref/mini_HiddenInstances.html2
-rw-r--r--html-test/ref/mini_HiddenInstancesB.html2
-rw-r--r--html-test/ref/mini_Hyperlinks.html2
-rw-r--r--html-test/ref/mini_IgnoreExports.html2
-rw-r--r--html-test/ref/mini_Math.html33
-rw-r--r--html-test/ref/mini_ModuleWithWarning.html2
-rw-r--r--html-test/ref/mini_NamedDoc.html2
-rw-r--r--html-test/ref/mini_NoLayout.html2
-rw-r--r--html-test/ref/mini_NonGreedy.html2
-rw-r--r--html-test/ref/mini_Properties.html2
-rw-r--r--html-test/ref/mini_PruneWithWarning.html2
-rw-r--r--html-test/ref/mini_QuasiExpr.html2
-rw-r--r--html-test/ref/mini_QuasiQuote.html2
-rw-r--r--html-test/ref/mini_SpuriousSuperclassConstraints.html2
-rw-r--r--html-test/ref/mini_TH.html2
-rw-r--r--html-test/ref/mini_TH2.html2
-rw-r--r--html-test/ref/mini_Test.html2
-rw-r--r--html-test/ref/mini_Ticket112.html2
-rw-r--r--html-test/ref/mini_Ticket61.html2
-rw-r--r--html-test/ref/mini_Ticket75.html2
-rw-r--r--html-test/ref/mini_TitledPicture.html2
-rw-r--r--html-test/ref/mini_TypeFamilies.html2
-rw-r--r--html-test/ref/mini_TypeOperators.html2
-rw-r--r--html-test/ref/mini_Unicode.html2
-rw-r--r--html-test/ref/mini_Visible.html2
-rw-r--r--html-test/src/Math.hs14
70 files changed, 342 insertions, 15 deletions
diff --git a/haddock-api/src/Haddock.hs b/haddock-api/src/Haddock.hs
index 70cdf8a3..72a6cc92 100644
--- a/haddock-api/src/Haddock.hs
+++ b/haddock-api/src/Haddock.hs
@@ -247,6 +247,7 @@ render dflags flags qual ifaces installedIfaces extSrcMap = do
odir = outputDir flags
opt_latex_style = optLaTeXStyle flags
opt_source_css = optSourceCssFile flags
+ opt_mathjax = optMathjax flags
visibleIfaces = [ i | i <- ifaces, OptHide `notElem` ifaceOptions i ]
@@ -297,7 +298,7 @@ render dflags flags qual ifaces installedIfaces extSrcMap = do
when (Flag_GenContents `elem` flags) $ do
ppHtmlContents dflags odir title pkgStr
- themes opt_index_url sourceUrls' opt_wiki_urls
+ themes opt_mathjax opt_index_url sourceUrls' opt_wiki_urls
allVisibleIfaces True prologue pretty
(makeContentsQual qual)
copyHtmlBits odir libDir themes
@@ -305,7 +306,7 @@ render dflags flags qual ifaces installedIfaces extSrcMap = do
when (Flag_Html `elem` flags) $ do
ppHtml dflags title pkgStr visibleIfaces odir
prologue
- themes sourceUrls' opt_wiki_urls
+ themes opt_mathjax sourceUrls' opt_wiki_urls
opt_contents_url opt_index_url unicode qual
pretty
copyHtmlBits odir libDir themes
diff --git a/haddock-api/src/Haddock/Backends/Hoogle.hs b/haddock-api/src/Haddock/Backends/Hoogle.hs
index f3749a85..9a15c7b3 100644
--- a/haddock-api/src/Haddock/Backends/Hoogle.hs
+++ b/haddock-api/src/Haddock/Backends/Hoogle.hs
@@ -311,6 +311,8 @@ markupTag dflags = Markup {
markupBold = box (TagInline "b"),
markupMonospaced = box (TagInline "tt"),
markupPic = const $ str " ",
+ markupMathInline = const $ str "<math>",
+ markupMathDisplay = const $ str "<math>",
markupUnorderedList = box (TagL 'u'),
markupOrderedList = box (TagL 'o'),
markupDefList = box (TagL 'u') . map (\(a,b) -> TagInline "i" a : Str " " : b),
diff --git a/haddock-api/src/Haddock/Backends/LaTeX.hs b/haddock-api/src/Haddock/Backends/LaTeX.hs
index e3246d7b..b7be7ffb 100644
--- a/haddock-api/src/Haddock/Backends/LaTeX.hs
+++ b/haddock-api/src/Haddock/Backends/LaTeX.hs
@@ -1105,6 +1105,8 @@ parLatexMarkup ppId = Markup {
markupMonospaced = \p _ -> tt (p Mono),
markupUnorderedList = \p v -> itemizedList (map ($v) p) $$ text "",
markupPic = \p _ -> markupPic p,
+ markupMathInline = \p _ -> markupMathInline p,
+ markupMathDisplay = \p _ -> markupMathDisplay p,
markupOrderedList = \p v -> enumeratedList (map ($v) p) $$ text "",
markupDefList = \l v -> descriptionList (map (\(a,b) -> (a v, b v)) l),
markupCodeBlock = \p _ -> quote (verb (p Verb)) $$ text "",
@@ -1137,6 +1139,10 @@ parLatexMarkup ppId = Markup {
beg = text "image: " <> text uri
+ markupMathInline mathjax = text "\\(" <> text mathjax <> text "\\)"
+
+ markupMathDisplay mathjax = text "\\[" <> text mathjax <> text "\\]"
+
markupId ppId_ id v =
case v of
Verb -> theid
diff --git a/haddock-api/src/Haddock/Backends/Xhtml.hs b/haddock-api/src/Haddock/Backends/Xhtml.hs
index 660bbe90..ebd53370 100644
--- a/haddock-api/src/Haddock/Backends/Xhtml.hs
+++ b/haddock-api/src/Haddock/Backends/Xhtml.hs
@@ -63,6 +63,7 @@ ppHtml :: DynFlags
-> FilePath -- ^ Destination directory
-> Maybe (MDoc GHC.RdrName) -- ^ Prologue text, maybe
-> Themes -- ^ Themes
+ -> Maybe String -- ^ The mathjax URL (--mathjax)
-> SourceURLs -- ^ The source URL (--source)
-> WikiURLs -- ^ The wiki URL (--wiki)
-> Maybe String -- ^ The contents URL (--use-contents)
@@ -73,7 +74,7 @@ ppHtml :: DynFlags
-> IO ()
ppHtml dflags doctitle maybe_package ifaces odir prologue
- themes maybe_source_url maybe_wiki_url
+ themes maybe_mathjax_url maybe_source_url maybe_wiki_url
maybe_contents_url maybe_index_url unicode
qual debug = do
let
@@ -82,7 +83,7 @@ ppHtml dflags doctitle maybe_package ifaces odir prologue
when (isNothing maybe_contents_url) $
ppHtmlContents dflags odir doctitle maybe_package
- themes maybe_index_url maybe_source_url maybe_wiki_url
+ themes maybe_mathjax_url maybe_index_url maybe_source_url maybe_wiki_url
(map toInstalledIface visible_ifaces)
False -- we don't want to display the packages in a single-package contents
prologue debug (makeContentsQual qual)
@@ -107,13 +108,14 @@ copyHtmlBits odir libdir themes = do
mapM_ copyLibFile [ jsFile, framesFile ]
-headHtml :: String -> Maybe String -> Themes -> Html
-headHtml docTitle miniPage themes =
+headHtml :: String -> Maybe String -> Themes -> Maybe String -> Html
+headHtml docTitle miniPage themes mathjax_url =
header << [
meta ! [httpequiv "Content-Type", content "text/html; charset=UTF-8"],
thetitle << docTitle,
styleSheet themes,
script ! [src jsFile, thetype "text/javascript"] << noHtml,
+ script ! [src mjUrl, thetype "text/javascript"] << noHtml,
script ! [thetype "text/javascript"]
-- NB: Within XHTML, the content of script tags needs to be
-- a <![CDATA[ section. Will break if the miniPage name could
@@ -124,6 +126,7 @@ headHtml docTitle miniPage themes =
]
where
setSynopsis = maybe "" (\p -> "setSynopsis(\"" ++ p ++ "\");") miniPage
+ mjUrl = maybe "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" id mathjax_url
srcButton :: SourceURLs -> Maybe Interface -> Maybe Html
@@ -242,6 +245,7 @@ ppHtmlContents
-> Maybe String
-> Themes
-> Maybe String
+ -> Maybe String
-> SourceURLs
-> WikiURLs
-> [InstalledInterface] -> Bool -> Maybe (MDoc GHC.RdrName)
@@ -249,12 +253,12 @@ ppHtmlContents
-> Qualification -- ^ How to qualify names
-> IO ()
ppHtmlContents dflags odir doctitle _maybe_package
- themes maybe_index_url
+ themes mathjax_url maybe_index_url
maybe_source_url maybe_wiki_url ifaces showPkgs prologue debug qual = do
let tree = mkModuleTree dflags showPkgs
[(instMod iface, toInstalledDescription iface) | iface <- ifaces]
html =
- headHtml doctitle Nothing themes +++
+ headHtml doctitle Nothing themes mathjax_url +++
bodyHtml doctitle Nothing
maybe_source_url maybe_wiki_url
Nothing maybe_index_url << [
@@ -343,7 +347,7 @@ ppHtmlContentsFrame :: FilePath -> String -> Themes
ppHtmlContentsFrame odir doctitle themes ifaces debug = do
let mods = flatModuleTree ifaces
html =
- headHtml doctitle Nothing themes +++
+ headHtml doctitle Nothing themes Nothing +++
miniBody << divModuleList <<
(sectionName << "Modules" +++
ulist << [ li ! [theclass "module"] << m | m <- mods ])
@@ -383,7 +387,7 @@ ppHtmlIndex odir doctitle _maybe_package themes
where
indexPage showLetters ch items =
- headHtml (doctitle ++ " (" ++ indexName ch ++ ")") Nothing themes +++
+ headHtml (doctitle ++ " (" ++ indexName ch ++ ")") Nothing themes Nothing +++
bodyHtml doctitle Nothing
maybe_source_url maybe_wiki_url
maybe_contents_url Nothing << [
@@ -495,7 +499,7 @@ ppHtmlModule odir doctitle themes
mdl_str = moduleString mdl
real_qual = makeModuleQual qual aliases mdl
html =
- headHtml mdl_str (Just $ "mini_" ++ moduleHtmlFile mdl) themes +++
+ headHtml mdl_str (Just $ "mini_" ++ moduleHtmlFile mdl) themes Nothing +++
bodyHtml doctitle (Just iface)
maybe_source_url maybe_wiki_url
maybe_contents_url maybe_index_url << [
@@ -512,7 +516,7 @@ ppHtmlModuleMiniSynopsis :: FilePath -> String -> Themes
ppHtmlModuleMiniSynopsis odir _doctitle themes iface unicode qual debug = do
let mdl = ifaceMod iface
html =
- headHtml (moduleString mdl) Nothing themes +++
+ headHtml (moduleString mdl) Nothing themes Nothing +++
miniBody <<
(divModuleHeader << sectionName << moduleString mdl +++
miniSynopsis mdl iface unicode qual)
diff --git a/haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs b/haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs
index 3fe74a82..e36f9528 100644
--- a/haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs
+++ b/haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs
@@ -33,6 +33,7 @@ import Data.Maybe (fromMaybe)
import GHC
import Name
+
parHtmlMarkup :: Qualification -> Bool
-> (Bool -> a -> Html) -> DocMarkup a Html
parHtmlMarkup qual insertAnchors ppId = Markup {
@@ -67,6 +68,8 @@ parHtmlMarkup qual insertAnchors ppId = Markup {
then namedAnchor aname << ""
else noHtml,
markupPic = \(Picture uri t) -> image ! ([src uri] ++ fromMaybe [] (return . title <$> t)),
+ markupMathInline = \mathjax -> toHtml ("\\(" ++ mathjax ++ "\\)"),
+ markupMathDisplay = \mathjax -> toHtml ("\\[" ++ mathjax ++ "\\]"),
markupProperty = pre . toHtml,
markupExample = examplesToHtml,
markupHeader = \(Header l t) -> makeHeader l t
diff --git a/haddock-api/src/Haddock/Interface/LexParseRn.hs b/haddock-api/src/Haddock/Interface/LexParseRn.hs
index 3c14498c..4f6b2c09 100644
--- a/haddock-api/src/Haddock/Interface/LexParseRn.hs
+++ b/haddock-api/src/Haddock/Interface/LexParseRn.hs
@@ -132,6 +132,8 @@ rename dflags gre = rn
DocModule str -> DocModule str
DocHyperlink l -> DocHyperlink l
DocPic str -> DocPic str
+ DocMathInline str -> DocMathInline str
+ DocMathDisplay str -> DocMathDisplay str
DocAName str -> DocAName str
DocProperty p -> DocProperty p
DocExamples e -> DocExamples e
diff --git a/haddock-api/src/Haddock/InterfaceFile.hs b/haddock-api/src/Haddock/InterfaceFile.hs
index 423714b8..5d15fb33 100644
--- a/haddock-api/src/Haddock/InterfaceFile.hs
+++ b/haddock-api/src/Haddock/InterfaceFile.hs
@@ -473,7 +473,6 @@ instance (Binary mod, Binary id) => Binary (MetaDoc mod id) where
d <- get bh
return $ MetaDoc { _meta = m, _doc = d }
-{-* Generated by DrIFT : Look, but Don't Touch. *-}
instance (Binary mod, Binary id) => Binary (DocH mod id) where
put_ bh DocEmpty = do
putByte bh 0
@@ -538,6 +537,12 @@ instance (Binary mod, Binary id) => Binary (DocH mod id) where
put_ bh (DocHeader aa) = do
putByte bh 20
put_ bh aa
+ put_ bh (DocMathInline x) = do
+ putByte bh 21
+ put_ bh x
+ put_ bh (DocMathDisplay x) = do
+ putByte bh 22
+ put_ bh x
get bh = do
h <- getByte bh
@@ -605,6 +610,12 @@ instance (Binary mod, Binary id) => Binary (DocH mod id) where
20 -> do
aa <- get bh
return (DocHeader aa)
+ 21 -> do
+ x <- get bh
+ return (DocMathInline x)
+ 22 -> do
+ x <- get bh
+ return (DocMathDisplay x)
_ -> error "invalid binary data found in the interface file"
diff --git a/haddock-api/src/Haddock/Options.hs b/haddock-api/src/Haddock/Options.hs
index f84989ef..0449c829 100644
--- a/haddock-api/src/Haddock/Options.hs
+++ b/haddock-api/src/Haddock/Options.hs
@@ -26,6 +26,7 @@ module Haddock.Options (
wikiUrls,
optDumpInterfaceFile,
optLaTeXStyle,
+ optMathjax,
qualification,
verbosity,
ghcFlags,
@@ -69,6 +70,7 @@ data Flag
| Flag_LaTeXStyle String
| Flag_HyperlinkedSource
| Flag_SourceCss String
+ | Flag_Mathjax String
| Flag_Help
| Flag_Verbosity String
| Flag_Version
@@ -116,6 +118,7 @@ options backwardsCompat =
"output in HTML (XHTML 1.0)",
Option [] ["latex"] (NoArg Flag_LaTeX) "use experimental LaTeX rendering",
Option [] ["latex-style"] (ReqArg Flag_LaTeXStyle "FILE") "provide your own LaTeX style in FILE",
+ Option [] ["mathjax"] (ReqArg Flag_Mathjax "URL") "URL FOR mathjax",
Option ['U'] ["use-unicode"] (NoArg Flag_UseUnicode) "use Unicode in HTML output",
Option [] ["hoogle"] (NoArg Flag_Hoogle)
"output for Hoogle; you may want --package-name and --package-version too",
@@ -272,6 +275,10 @@ optLaTeXStyle :: [Flag] -> Maybe String
optLaTeXStyle flags = optLast [ str | Flag_LaTeXStyle str <- flags ]
+optMathjax :: [Flag] -> Maybe String
+optMathjax flags = optLast [ str | Flag_Mathjax str <- flags ]
+
+
qualification :: [Flag] -> Either String QualOption
qualification flags =
case map (map Char.toLower) [ str | Flag_Qualification str <- flags ] of
diff --git a/haddock-api/src/Haddock/Types.hs b/haddock-api/src/Haddock/Types.hs
index 34e99a8a..3a4df70c 100644
--- a/haddock-api/src/Haddock/Types.hs
+++ b/haddock-api/src/Haddock/Types.hs
@@ -445,6 +445,8 @@ instance (NFData a, NFData mod)
DocCodeBlock a -> a `deepseq` ()
DocHyperlink a -> a `deepseq` ()
DocPic a -> a `deepseq` ()
+ DocMathInline a -> a `deepseq` ()
+ DocMathDisplay a -> a `deepseq` ()
DocAName a -> a `deepseq` ()
DocProperty a -> a `deepseq` ()
DocExamples a -> a `deepseq` ()
@@ -492,6 +494,8 @@ data DocMarkup id a = Markup
, markupHyperlink :: Hyperlink -> a
, markupAName :: String -> a
, markupPic :: Picture -> a
+ , markupMathInline :: String -> a
+ , markupMathDisplay :: String -> a
, markupProperty :: String -> a
, markupExample :: [Example] -> a
, markupHeader :: Header a -> a
@@ -530,7 +534,6 @@ emptyHaddockModInfo = HaddockModInfo
-----------------------------------------------------------------------------
-{-! for DocOption derive: Binary !-}
-- | Source-level options for controlling the documentation.
data DocOption
= OptHide -- ^ This module should not appear in the docs.
diff --git a/haddock-api/src/Haddock/Utils.hs b/haddock-api/src/Haddock/Utils.hs
index 3510d908..325dd710 100644
--- a/haddock-api/src/Haddock/Utils.hs
+++ b/haddock-api/src/Haddock/Utils.hs
@@ -478,6 +478,8 @@ markup m (DocCodeBlock d) = markupCodeBlock m (markup m d)
markup m (DocHyperlink l) = markupHyperlink m l
markup m (DocAName ref) = markupAName m ref
markup m (DocPic img) = markupPic m img
+markup m (DocMathInline mathjax) = markupMathInline m mathjax
+markup m (DocMathDisplay mathjax) = markupMathDisplay m mathjax
markup m (DocProperty p) = markupProperty m p
markup m (DocExamples e) = markupExample m e
markup m (DocHeader (Header l t)) = markupHeader m (Header l (markup m t))
@@ -508,6 +510,8 @@ idMarkup = Markup {
markupHyperlink = DocHyperlink,
markupAName = DocAName,
markupPic = DocPic,
+ markupMathInline = DocMathInline,
+ markupMathDisplay = DocMathDisplay,
markupProperty = DocProperty,
markupExample = DocExamples,
markupHeader = DocHeader
diff --git a/haddock-library/src/Documentation/Haddock/Parser.hs b/haddock-library/src/Documentation/Haddock/Parser.hs
index ca9e9d8d..123f5612 100644
--- a/haddock-library/src/Documentation/Haddock/Parser.hs
+++ b/haddock-library/src/Documentation/Haddock/Parser.hs
@@ -73,6 +73,8 @@ overIdentifier f d = g d
g (DocCodeBlock x) = DocCodeBlock $ g x
g (DocHyperlink x) = DocHyperlink x
g (DocPic x) = DocPic x
+ g (DocMathInline x) = DocMathInline x
+ g (DocMathDisplay x) = DocMathDisplay x
g (DocAName x) = DocAName x
g (DocProperty x) = DocProperty x
g (DocExamples x) = DocExamples x
@@ -113,7 +115,9 @@ parseStringBS = snd . parse p
where
p :: Parser (DocH mod Identifier)
p = docConcat <$> many (monospace <|> anchor <|> identifier <|> moduleName
- <|> picture <|> markdownImage <|> hyperlink <|> bold
+ <|> picture <|> mathDisplay <|> mathInline
+ <|> markdownImage
+ <|> hyperlink <|> bold
<|> emphasis <|> encodedChar <|> string'
<|> skipSpecialChar)
@@ -224,6 +228,22 @@ picture :: Parser (DocH mod a)
picture = DocPic . makeLabeled Picture . decodeUtf8
<$> disallowNewline ("<<" *> takeUntil ">>")
+-- | Inline math parser, surrounded by \\( and \\).
+--
+-- >>> parseString "\\(\\int_{-\\infty}^{\\infty} e^{-x^2/2} = \\sqrt{2\\pi}\\)"
+-- DocMathInline "\\int_{-\\infty}^{\\infty} e^{-x^2/2} = \\sqrt{2\\pi}"
+mathInline :: Parser (DocH mod a)
+mathInline = DocMathInline . decodeUtf8
+ <$> disallowNewline ("\\(" *> takeUntil "\\)")
+
+-- | Display math parser, surrounded by \\[ and \\].
+--
+-- >>> parseString "\\[\\int_{-\\infty}^{\\infty} e^{-x^2/2} = \\sqrt{2\\pi}\\]"
+-- DocMathDisplay "\\int_{-\\infty}^{\\infty} e^{-x^2/2} = \\sqrt{2\\pi}"
+mathDisplay :: Parser (DocH mod a)
+mathDisplay = DocMathDisplay . decodeUtf8
+ <$> ("\\[" *> takeUntil "\\]")
+
markdownImage :: Parser (DocH mod a)
markdownImage = fromHyperlink <$> ("!" *> linkParser)
where
diff --git a/haddock-library/src/Documentation/Haddock/Types.hs b/haddock-library/src/Documentation/Haddock/Types.hs
index 4ef89658..4d5bb68a 100644
--- a/haddock-library/src/Documentation/Haddock/Types.hs
+++ b/haddock-library/src/Documentation/Haddock/Types.hs
@@ -71,6 +71,8 @@ data DocH mod id
| DocCodeBlock (DocH mod id)
| DocHyperlink Hyperlink
| DocPic Picture
+ | DocMathInline String
+ | DocMathDisplay String
| DocAName String
| DocProperty String
| DocExamples [Example]
diff --git a/haddock-library/test/Documentation/Haddock/ParserSpec.hs b/haddock-library/test/Documentation/Haddock/ParserSpec.hs
index 2ef414fb..1169eb49 100644
--- a/haddock-library/test/Documentation/Haddock/ParserSpec.hs
+++ b/haddock-library/test/Documentation/Haddock/ParserSpec.hs
@@ -208,6 +208,10 @@ spec = do
it "supports title for deprecated picture syntax" $ do
"<<b a z>>" `shouldParseTo` image "b" "a z"
+ context "when parsing display math" $ do
+
+ it "accepts markdown syntax for display math containing newlines" $ do
+ "\\[\\pi\n\\pi\\]" `shouldParseTo` DocMathDisplay "\\pi\n\\pi"
context "when parsing anchors" $ do
it "parses a single word anchor" $ do
diff --git a/html-test/ref/Bug387.html b/html-test/ref/Bug387.html
index 7b605fd0..80735916 100644
--- a/html-test/ref/Bug387.html
+++ b/html-test/ref/Bug387.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Bug387.html");};
diff --git a/html-test/ref/Math.html b/html-test/ref/Math.html
new file mode 100644
index 00000000..5b76fd13
--- /dev/null
+++ b/html-test/ref/Math.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+><head
+ ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+ /><title
+ >Math</title
+ ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
+ /><script src="haddock-util.js" type="text/javascript"
+ ></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
+ ><script type="text/javascript"
+ >//<![CDATA[
+window.onload = function () {pageLoad();setSynopsis("mini_Math.html");};
+//]]>
+</script
+ ></head
+ ><body
+ ><div id="package-header"
+ ><ul class="links" id="page-menu"
+ ><li
+ ><a href=""
+ >Contents</a
+ ></li
+ ><li
+ ><a href=""
+ >Index</a
+ ></li
+ ></ul
+ ><p class="caption empty"
+ >&nbsp;</p
+ ></div
+ ><div id="content"
+ ><div id="module-header"
+ ><table class="info"
+ ><tr
+ ><th
+ >Safe Haskell</th
+ ><td
+ >Safe</td
+ ></tr
+ ></table
+ ><p class="caption"
+ >Math</p
+ ></div
+ ><div id="description"
+ ><p class="caption"
+ >Description</p
+ ><div class="doc"
+ ><p
+ >Math (display) for <code
+ >normalDensity</code
+ ></p
+ ><p
+ >\[
+ \int_{-\infty}^{\infty} e^{-x^2/2} = \sqrt{2\pi}
+ \]</p
+ ><p
+ >\(\int_{-\infty}^{\infty} e^{-x^2/2} = \sqrt{2\pi}\)</p
+ ></div
+ ></div
+ ><div id="synopsis"
+ ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"
+ >Synopsis</p
+ ><ul id="section.syn" class="hide" onclick="toggleSection('syn')"
+ ><li class="src short"
+ ><a href=""
+ >f</a
+ > :: <a href=""
+ >Integer</a
+ ></li
+ ></ul
+ ></div
+ ><div id="interface"
+ ><h1
+ >Documentation</h1
+ ><div class="top"
+ ><p class="src"
+ ><a name="v:f" class="def"
+ >f</a
+ > :: <a href=""
+ >Integer</a
+ ></p
+ ><div class="doc"
+ ><p
+ >Math (inline) for <code
+ >normalDensity</code
+ >
+ \(\int_{-\infty}^{\infty} e^{-x^2/2} = \sqrt{2\pi}\)
+ \[\int_{-\infty}^{\infty} e^{-x^2/2} = \sqrt{2\pi}\]</p
+ ></div
+ ></div
+ ></div
+ ></div
+ ><div id="footer"
+ ><p
+ >Produced by <a href=""
+ >Haddock</a
+ > version 2.16.1</p
+ ></div
+ ></body
+ ></html
+>
diff --git a/html-test/ref/mini_A.html b/html-test/ref/mini_A.html
index c3d36935..6f914440 100644
--- a/html-test/ref/mini_A.html
+++ b/html-test/ref/mini_A.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_AdvanceTypes.html b/html-test/ref/mini_AdvanceTypes.html
index c4b0806a..f72502dd 100644
--- a/html-test/ref/mini_AdvanceTypes.html
+++ b/html-test/ref/mini_AdvanceTypes.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_B.html b/html-test/ref/mini_B.html
index 9b3ef381..557d5dfe 100644
--- a/html-test/ref/mini_B.html
+++ b/html-test/ref/mini_B.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Bug1.html b/html-test/ref/mini_Bug1.html
index bab3748c..01a65c6f 100644
--- a/html-test/ref/mini_Bug1.html
+++ b/html-test/ref/mini_Bug1.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Bug2.html b/html-test/ref/mini_Bug2.html
index b673e459..4cbea53d 100644
--- a/html-test/ref/mini_Bug2.html
+++ b/html-test/ref/mini_Bug2.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Bug3.html b/html-test/ref/mini_Bug3.html
index af4cc445..9f46a9e6 100644
--- a/html-test/ref/mini_Bug3.html
+++ b/html-test/ref/mini_Bug3.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Bug4.html b/html-test/ref/mini_Bug4.html
index b403e94a..cfc489b4 100644
--- a/html-test/ref/mini_Bug4.html
+++ b/html-test/ref/mini_Bug4.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Bug6.html b/html-test/ref/mini_Bug6.html
index e448e7a3..cea7a09d 100644
--- a/html-test/ref/mini_Bug6.html
+++ b/html-test/ref/mini_Bug6.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Bug7.html b/html-test/ref/mini_Bug7.html
index 2cb7ebe1..3c32e012 100644
--- a/html-test/ref/mini_Bug7.html
+++ b/html-test/ref/mini_Bug7.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Bug8.html b/html-test/ref/mini_Bug8.html
index ca6ec68a..63770a6d 100644
--- a/html-test/ref/mini_Bug8.html
+++ b/html-test/ref/mini_Bug8.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_BugDeprecated.html b/html-test/ref/mini_BugDeprecated.html
index 9c8fc229..5a075ca8 100644
--- a/html-test/ref/mini_BugDeprecated.html
+++ b/html-test/ref/mini_BugDeprecated.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_BugExportHeadings.html b/html-test/ref/mini_BugExportHeadings.html
index e170b41a..2a1223e6 100644
--- a/html-test/ref/mini_BugExportHeadings.html
+++ b/html-test/ref/mini_BugExportHeadings.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Bugs.html b/html-test/ref/mini_Bugs.html
index 3c758375..6c7eefe7 100644
--- a/html-test/ref/mini_Bugs.html
+++ b/html-test/ref/mini_Bugs.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedClass.html b/html-test/ref/mini_DeprecatedClass.html
index 3923c1ff..05889033 100644
--- a/html-test/ref/mini_DeprecatedClass.html
+++ b/html-test/ref/mini_DeprecatedClass.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedData.html b/html-test/ref/mini_DeprecatedData.html
index 7f11afeb..6dad3417 100644
--- a/html-test/ref/mini_DeprecatedData.html
+++ b/html-test/ref/mini_DeprecatedData.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedFunction.html b/html-test/ref/mini_DeprecatedFunction.html
index 9bb90dac..1564c916 100644
--- a/html-test/ref/mini_DeprecatedFunction.html
+++ b/html-test/ref/mini_DeprecatedFunction.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedFunction2.html b/html-test/ref/mini_DeprecatedFunction2.html
index a03991a9..8af6fa90 100644
--- a/html-test/ref/mini_DeprecatedFunction2.html
+++ b/html-test/ref/mini_DeprecatedFunction2.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedFunction3.html b/html-test/ref/mini_DeprecatedFunction3.html
index 4ea60339..61819fc8 100644
--- a/html-test/ref/mini_DeprecatedFunction3.html
+++ b/html-test/ref/mini_DeprecatedFunction3.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedModule.html b/html-test/ref/mini_DeprecatedModule.html
index bfdef611..112d70df 100644
--- a/html-test/ref/mini_DeprecatedModule.html
+++ b/html-test/ref/mini_DeprecatedModule.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedModule2.html b/html-test/ref/mini_DeprecatedModule2.html
index dbcc43b9..18dc9b2d 100644
--- a/html-test/ref/mini_DeprecatedModule2.html
+++ b/html-test/ref/mini_DeprecatedModule2.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedNewtype.html b/html-test/ref/mini_DeprecatedNewtype.html
index 84d41828..22b56d10 100644
--- a/html-test/ref/mini_DeprecatedNewtype.html
+++ b/html-test/ref/mini_DeprecatedNewtype.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedReExport.html b/html-test/ref/mini_DeprecatedReExport.html
index 405926b1..b1600cb7 100644
--- a/html-test/ref/mini_DeprecatedReExport.html
+++ b/html-test/ref/mini_DeprecatedReExport.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedRecord.html b/html-test/ref/mini_DeprecatedRecord.html
index 54dc9722..5da974e7 100644
--- a/html-test/ref/mini_DeprecatedRecord.html
+++ b/html-test/ref/mini_DeprecatedRecord.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedTypeFamily.html b/html-test/ref/mini_DeprecatedTypeFamily.html
index c87d9637..eb90e152 100644
--- a/html-test/ref/mini_DeprecatedTypeFamily.html
+++ b/html-test/ref/mini_DeprecatedTypeFamily.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_DeprecatedTypeSynonym.html b/html-test/ref/mini_DeprecatedTypeSynonym.html
index c04c374f..4ea068d9 100644
--- a/html-test/ref/mini_DeprecatedTypeSynonym.html
+++ b/html-test/ref/mini_DeprecatedTypeSynonym.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Examples.html b/html-test/ref/mini_Examples.html
index c99c2c48..16769ed2 100644
--- a/html-test/ref/mini_Examples.html
+++ b/html-test/ref/mini_Examples.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_FunArgs.html b/html-test/ref/mini_FunArgs.html
index eac6c8fe..952e6879 100644
--- a/html-test/ref/mini_FunArgs.html
+++ b/html-test/ref/mini_FunArgs.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_GADTRecords.html b/html-test/ref/mini_GADTRecords.html
index a8b838f0..fe0c5753 100644
--- a/html-test/ref/mini_GADTRecords.html
+++ b/html-test/ref/mini_GADTRecords.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Hash.html b/html-test/ref/mini_Hash.html
index a0a68840..6647caf7 100644
--- a/html-test/ref/mini_Hash.html
+++ b/html-test/ref/mini_Hash.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_HiddenInstances.html b/html-test/ref/mini_HiddenInstances.html
index 01bab320..5e709de7 100644
--- a/html-test/ref/mini_HiddenInstances.html
+++ b/html-test/ref/mini_HiddenInstances.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_HiddenInstancesB.html b/html-test/ref/mini_HiddenInstancesB.html
index e02b42b1..8c8b832c 100644
--- a/html-test/ref/mini_HiddenInstancesB.html
+++ b/html-test/ref/mini_HiddenInstancesB.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Hyperlinks.html b/html-test/ref/mini_Hyperlinks.html
index f0c7d65a..5071b876 100644
--- a/html-test/ref/mini_Hyperlinks.html
+++ b/html-test/ref/mini_Hyperlinks.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_IgnoreExports.html b/html-test/ref/mini_IgnoreExports.html
index a420e65a..498b8507 100644
--- a/html-test/ref/mini_IgnoreExports.html
+++ b/html-test/ref/mini_IgnoreExports.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Math.html b/html-test/ref/mini_Math.html
new file mode 100644
index 00000000..e7f0f14f
--- /dev/null
+++ b/html-test/ref/mini_Math.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+><head
+ ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+ /><title
+ >Math</title
+ ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
+ /><script src="haddock-util.js" type="text/javascript"
+ ></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
+ ><script type="text/javascript"
+ >//<![CDATA[
+window.onload = function () {pageLoad();};
+//]]>
+</script
+ ></head
+ ><body id="mini"
+ ><div id="module-header"
+ ><p class="caption"
+ >Math</p
+ ></div
+ ><div id="interface"
+ ><div class="top"
+ ><p class="src"
+ ><a href="" target="main"
+ >f</a
+ ></p
+ ></div
+ ></div
+ ></body
+ ></html
+>
diff --git a/html-test/ref/mini_ModuleWithWarning.html b/html-test/ref/mini_ModuleWithWarning.html
index 19315a14..ebe78e11 100644
--- a/html-test/ref/mini_ModuleWithWarning.html
+++ b/html-test/ref/mini_ModuleWithWarning.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_NamedDoc.html b/html-test/ref/mini_NamedDoc.html
index 066bbc61..58ba3f53 100644
--- a/html-test/ref/mini_NamedDoc.html
+++ b/html-test/ref/mini_NamedDoc.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_NoLayout.html b/html-test/ref/mini_NoLayout.html
index 19562d70..74878965 100644
--- a/html-test/ref/mini_NoLayout.html
+++ b/html-test/ref/mini_NoLayout.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_NonGreedy.html b/html-test/ref/mini_NonGreedy.html
index 698c368e..96c51c75 100644
--- a/html-test/ref/mini_NonGreedy.html
+++ b/html-test/ref/mini_NonGreedy.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Properties.html b/html-test/ref/mini_Properties.html
index 5f538dfd..8362d16e 100644
--- a/html-test/ref/mini_Properties.html
+++ b/html-test/ref/mini_Properties.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_PruneWithWarning.html b/html-test/ref/mini_PruneWithWarning.html
index 9eb3aa00..e73dc510 100644
--- a/html-test/ref/mini_PruneWithWarning.html
+++ b/html-test/ref/mini_PruneWithWarning.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_QuasiExpr.html b/html-test/ref/mini_QuasiExpr.html
index 06797498..f9e8b7b5 100644
--- a/html-test/ref/mini_QuasiExpr.html
+++ b/html-test/ref/mini_QuasiExpr.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_QuasiQuote.html b/html-test/ref/mini_QuasiQuote.html
index 5dac6acc..e0d8e22e 100644
--- a/html-test/ref/mini_QuasiQuote.html
+++ b/html-test/ref/mini_QuasiQuote.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_SpuriousSuperclassConstraints.html b/html-test/ref/mini_SpuriousSuperclassConstraints.html
index 22079a4e..38be01c4 100644
--- a/html-test/ref/mini_SpuriousSuperclassConstraints.html
+++ b/html-test/ref/mini_SpuriousSuperclassConstraints.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_TH.html b/html-test/ref/mini_TH.html
index d2ddbabc..51b35ee5 100644
--- a/html-test/ref/mini_TH.html
+++ b/html-test/ref/mini_TH.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_TH2.html b/html-test/ref/mini_TH2.html
index 2c9f1340..767e6e2c 100644
--- a/html-test/ref/mini_TH2.html
+++ b/html-test/ref/mini_TH2.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Test.html b/html-test/ref/mini_Test.html
index 7453387c..3fd26035 100644
--- a/html-test/ref/mini_Test.html
+++ b/html-test/ref/mini_Test.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Ticket112.html b/html-test/ref/mini_Ticket112.html
index 68a0a5e5..d6f23ea2 100644
--- a/html-test/ref/mini_Ticket112.html
+++ b/html-test/ref/mini_Ticket112.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Ticket61.html b/html-test/ref/mini_Ticket61.html
index a73fefca..6c061b7e 100644
--- a/html-test/ref/mini_Ticket61.html
+++ b/html-test/ref/mini_Ticket61.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Ticket75.html b/html-test/ref/mini_Ticket75.html
index 75ce882c..351a4d16 100644
--- a/html-test/ref/mini_Ticket75.html
+++ b/html-test/ref/mini_Ticket75.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_TitledPicture.html b/html-test/ref/mini_TitledPicture.html
index 760566e5..91f61ef3 100644
--- a/html-test/ref/mini_TitledPicture.html
+++ b/html-test/ref/mini_TitledPicture.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_TypeFamilies.html b/html-test/ref/mini_TypeFamilies.html
index feb61abc..9c6e02ea 100644
--- a/html-test/ref/mini_TypeFamilies.html
+++ b/html-test/ref/mini_TypeFamilies.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_TypeOperators.html b/html-test/ref/mini_TypeOperators.html
index ce31643e..61a01103 100644
--- a/html-test/ref/mini_TypeOperators.html
+++ b/html-test/ref/mini_TypeOperators.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Unicode.html b/html-test/ref/mini_Unicode.html
index 55336980..820cd80d 100644
--- a/html-test/ref/mini_Unicode.html
+++ b/html-test/ref/mini_Unicode.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/ref/mini_Visible.html b/html-test/ref/mini_Visible.html
index 976a30c5..d51d755a 100644
--- a/html-test/ref/mini_Visible.html
+++ b/html-test/ref/mini_Visible.html
@@ -7,6 +7,8 @@
><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"
/><script src="haddock-util.js" type="text/javascript"
></script
+ ><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
><script type="text/javascript"
>//<![CDATA[
window.onload = function () {pageLoad();};
diff --git a/html-test/src/Math.hs b/html-test/src/Math.hs
new file mode 100644
index 00000000..75bc513e
--- /dev/null
+++ b/html-test/src/Math.hs
@@ -0,0 +1,14 @@
+-- | Math (display) for 'normalDensity'
+--
+-- \[
+-- \int_{-\infty}^{\infty} e^{-x^2/2} = \sqrt{2\pi}
+-- \]
+--
+-- \(\int_{-\infty}^{\infty} e^{-x^2/2} = \sqrt{2\pi}\)
+
+module Math where
+
+-- | Math (inline) for 'normalDensity'
+-- \(\int_{-\infty}^{\infty} e^{-x^2/2} = \sqrt{2\pi}\)
+-- \[\int_{-\infty}^{\infty} e^{-x^2/2} = \sqrt{2\pi}\]
+f = 5