aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Haddock/Backends/LaTeX.hs160
1 files changed, 80 insertions, 80 deletions
diff --git a/src/Haddock/Backends/LaTeX.hs b/src/Haddock/Backends/LaTeX.hs
index 78baedbc..814c4fb9 100644
--- a/src/Haddock/Backends/LaTeX.hs
+++ b/src/Haddock/Backends/LaTeX.hs
@@ -9,11 +9,11 @@
-- Stability : experimental
-- Portability : portable
-----------------------------------------------------------------------------
-
-module Haddock.Backends.LaTeX (
+module Haddock.Backends.LaTeX (
ppLaTeX
) where
+
import Haddock.Types
import Haddock.Utils
import Haddock.GhcUtils
@@ -71,19 +71,19 @@ Extract the last element of a list, which must be finite and non-empty.
* don't forget fixity!!
-}
-ppLaTeX :: String -- Title
+ppLaTeX :: String -- Title
-> Maybe String -- Package name
- -> [Interface]
- -> FilePath -- destination directory
- -> Maybe (Doc GHC.RdrName) -- prologue text, maybe
+ -> [Interface]
+ -> FilePath -- destination directory
+ -> Maybe (Doc GHC.RdrName) -- prologue text, maybe
-> Maybe String -- style file
-> FilePath
- -> IO ()
+ -> IO ()
ppLaTeX title packageStr visible_ifaces odir prologue maybe_style libdir
= do
createDirectoryIfMissing True odir
- when (isNothing maybe_style) $
+ when (isNothing maybe_style) $
copyFile (libdir </> "latex" </> haddockSty) (odir </> haddockSty)
ppLaTeXTop title packageStr odir prologue maybe_style visible_ifaces
mapM_ (ppLaTeXModule title odir) visible_ifaces
@@ -172,7 +172,7 @@ string_txt (LStr s1 _) s2 = unpackLitString s1 ++ s2
exportListItem :: ExportItem DocName -> LaTeX
exportListItem (ExportDecl decl _doc subdocs _insts)
= ppDocBinder (declName decl) <>
- case subdocs of
+ case subdocs of
[] -> empty
xs -> parens (sep (punctuate comma (map (ppDocBinder . fst) subdocs)))
exportListItem (ExportNoDecl y [])
@@ -190,7 +190,7 @@ processExports :: [ExportItem DocName] -> LaTeX
processExports [] = empty
processExports (decl : es)
| Just sig <- isSimpleSig decl
- = multiDecl [ ppTypeSig (getName name) typ False
+ = multiDecl [ ppTypeSig (getName name) typ False
| (name,typ) <- sig:sigs ] $$
processExports es'
where (sigs, es') = spanWith isSimpleSig es
@@ -247,7 +247,7 @@ moduleLaTeXFile :: Module -> FilePath
moduleLaTeXFile mdl = moduleBasename mdl ++ ".tex"
moduleBasename :: Module -> FilePath
-moduleBasename mdl = map (\c -> if c == '.' then '-' else c)
+moduleBasename mdl = map (\c -> if c == '.' then '-' else c)
(moduleNameString (moduleName mdl))
-- -----------------------------------------------------------------------------
@@ -263,7 +263,7 @@ ppDecl (L loc decl) (mbDoc, fnArgsDoc) instances subdocs = case decl of
TyClD d@(TyFamily {}) -> ppTyFam False loc mbDoc d unicode
TyClD d@(TyData {})
| Nothing <- tcdTyPats d -> ppDataDecl instances subdocs loc mbDoc d unicode
- | Just _ <- tcdTyPats d -> ppDataInst loc mbDoc d
+ | Just _ <- tcdTyPats d -> ppDataInst loc mbDoc d
TyClD d@(TySynonym {})
| Nothing <- tcdTyPats d -> ppTySyn loc (mbDoc, fnArgsDoc) d unicode
| Just _ <- tcdTyPats d -> ppTyInst False loc mbDoc d unicode
@@ -272,10 +272,10 @@ ppDecl (L loc decl) (mbDoc, fnArgsDoc) instances subdocs = case decl of
ForD d -> ppFor loc (mbDoc, fnArgsDoc) d unicode
InstD _ -> empty
_ -> error "declaration not supported by ppDecl"
- where
+ where
unicode = False
-ppTyFam _ _ _ _ _ =
+ppTyFam _ _ _ _ _ =
error "type family declarations are currently not supported by --latex"
ppDataInst _ _ _ =
@@ -294,7 +294,7 @@ ppFor _ _ _ _ =
ppTySyn :: SrcSpan -> DocForDecl DocName -> TyClDecl DocName -> Bool -> LaTeX
ppTySyn loc doc (TySynonym (L _ name) ltyvars _ ltype) unicode
- = ppTypeOrFunSig loc name (unLoc ltype) doc
+ = ppTypeOrFunSig loc name (unLoc ltype) doc
(full, hdr, char '=') unicode False
where
hdr = hsep (keyword "type" : ppDocBinder name : ppTyVars ltyvars)
@@ -318,18 +318,18 @@ ppFunSig loc doc docname typ unicode methods =
ppTypeOrFunSig :: SrcSpan -> DocName -> HsType DocName ->
DocForDecl DocName -> (LaTeX, LaTeX, LaTeX)
-> Bool -> Bool -> LaTeX
-ppTypeOrFunSig _loc _docname typ (doc, argDocs) (pref1, pref2, sep0)
+ppTypeOrFunSig _loc _docname typ (doc, argDocs) (pref1, pref2, sep0)
unicode methods
- | Map.null argDocs =
+ | Map.null argDocs =
declWithDoc pref1 (fmap docToLaTeX doc)
- | otherwise =
+ | otherwise =
declWithDoc pref2 $ Just $
text "\\haddockbeginargs" $$
do_args 0 sep0 typ $$
text "\\end{tabulary}\\par" $$
maybe empty docToLaTeX doc
where
- do_largs n leader (L _ t) = do_args n leader t
+ do_largs n leader (L _ t) = do_args n leader t
arg_doc n = rDoc (Map.lookup n argDocs)
@@ -339,7 +339,7 @@ ppTypeOrFunSig _loc _docname typ (doc, argDocs) (pref1, pref2, sep0)
decltt (hsep (forallSymbol unicode : ppTyVars tvs ++ [dot]) <+>
ppLContextNoArrow lctxt unicode) <+> nl $$
do_largs n (darrow unicode) ltype
-
+
do_args n leader (HsForAllTy Implicit _ lctxt ltype)
| not (null (unLoc lctxt))
= decltt leader <-> decltt (ppLContextNoArrow lctxt unicode) <+> nl $$
@@ -355,7 +355,7 @@ ppTypeOrFunSig _loc _docname typ (doc, argDocs) (pref1, pref2, sep0)
= decltt leader <-> decltt (ppType unicode t) <-> arg_doc n <+> nl
ppTypeSig :: Name -> HsType DocName -> Bool -> LaTeX
-ppTypeSig nm ty unicode =
+ppTypeSig nm ty unicode =
ppSymName nm <+> dcolon unicode <+> ppType unicode ty
ppTyVars :: [LHsTyVarBndr DocName] -> [LaTeX]
@@ -369,7 +369,7 @@ declWithDoc decl doc =
text "\\begin{haddockdesc}" $$
text "\\item[\\begin{tabular}{@{}l}" $$
text (latexMonoFilter (render decl)) $$
- text "\\end{tabular}]" <>
+ text "\\end{tabular}]" <>
(if isNothing doc then empty else text "\\haddockbegindoc") $$
maybe empty id doc $$
text "\\end{haddockdesc}"
@@ -405,30 +405,30 @@ rDoc = maybeDoc . fmap latexStripTrailingWhitespace
ppClassHdr :: Bool -> Located [LHsPred DocName] -> DocName
-> [Located (HsTyVarBndr DocName)] -> [Located ([DocName], [DocName])]
-> Bool -> LaTeX
-ppClassHdr summ lctxt n tvs fds unicode =
- keyword "class"
+ppClassHdr summ lctxt n tvs fds unicode =
+ keyword "class"
<+> (if not . null . unLoc $ lctxt then ppLContext lctxt unicode else empty)
<+> ppAppDocNameNames summ n (tyvarNames $ tvs)
- <+> ppFds fds unicode
+ <+> ppFds fds unicode
ppFds :: [Located ([DocName], [DocName])] -> Bool -> LaTeX
ppFds fds unicode =
- if null fds then empty else
- char '|' <+> hsep (punctuate comma (map (fundep . unLoc) fds))
+ if null fds then empty else
+ char '|' <+> hsep (punctuate comma (map (fundep . unLoc) fds))
where
- fundep (vars1,vars2) = hsep (map ppDocName vars1) <+> arrow unicode <+>
- hsep (map ppDocName vars2)
+ fundep (vars1,vars2) = hsep (map ppDocName vars1) <+> arrow unicode <+>
+ hsep (map ppDocName vars2)
ppClassDecl :: [DocInstance DocName] -> SrcSpan
-> Maybe (Doc DocName) -> [(DocName, DocForDecl DocName)]
-> TyClDecl DocName -> Bool -> LaTeX
ppClassDecl instances loc mbDoc subdocs
- decl@(ClassDecl lctxt lname ltyvars lfds lsigs _ ats _) unicode
+ decl@(ClassDecl lctxt lname ltyvars lfds lsigs _ ats _) unicode
= declWithDoc classheader (if null body then Nothing else Just (vcat body)) $$
instancesBit
- where
+ where
classheader
| null lsigs = hdr unicode
| otherwise = hdr unicode <+> keyword "where"
@@ -436,7 +436,7 @@ ppClassDecl instances loc mbDoc subdocs
nm = unLoc $ tcdLName decl
hdr = ppClassHdr False lctxt (unLoc lname) ltyvars lfds
-
+
body = catMaybes [fmap docToLaTeX mbDoc, body_]
body_
@@ -491,7 +491,7 @@ ppDataDecl :: [DocInstance DocName] ->
SrcSpan -> Maybe (Doc DocName) -> TyClDecl DocName -> Bool ->
LaTeX
ppDataDecl instances subdocs loc mbDoc dataDecl unicode
-
+
= declWithDoc (ppDataHeader dataDecl unicode <+> whereBit)
(if null body then Nothing else Just (vcat body))
$$ instancesBit
@@ -499,21 +499,21 @@ ppDataDecl instances subdocs loc mbDoc dataDecl unicode
where
docname = unLoc . tcdLName $ dataDecl
cons = tcdCons dataDecl
- resTy = (con_res . unLoc . head) cons
-
+ resTy = (con_res . unLoc . head) cons
+
body = catMaybes [constrBit, fmap docToLaTeX mbDoc]
(whereBit, leaders)
| null cons = (empty,[])
- | otherwise = case resTy of
+ | otherwise = case resTy of
ResTyGADT _ -> (decltt (keyword "where"), repeat empty)
_ -> (empty, (decltt (text "=") : repeat (decltt (text "|"))))
- constrBit
+ constrBit
| null cons = Nothing
| otherwise = Just $
text "\\haddockbeginconstrs" $$
- vcat (zipWith (ppSideBySideConstr subdocs unicode) leaders cons) $$
+ vcat (zipWith (ppSideBySideConstr subdocs unicode) leaders cons) $$
text "\\end{tabulary}\\par"
instancesBit
@@ -523,7 +523,7 @@ ppDataDecl instances subdocs loc mbDoc dataDecl unicode
| otherwise = vcat (map (ppDocInstance unicode) instances)
isRecCon :: Located (ConDecl a) -> Bool
-isRecCon lcon = case con_details (unLoc lcon) of
+isRecCon lcon = case con_details (unLoc lcon) of
RecCon _ -> True
_ -> False
@@ -539,43 +539,43 @@ ppConstrHdr forall tvs ctxt unicode
<+>
(if null ctxt then empty else ppContextNoArrow ctxt unicode <+> darrow unicode <+> text " ")
where
- ppForall = case forall of
+ ppForall = case forall of
Explicit -> forallSymbol unicode <+> hsep (map ppName tvs) <+> text ". "
Implicit -> empty
ppSideBySideConstr :: [(DocName, DocForDecl DocName)] -> Bool -> LaTeX
-> LConDecl DocName -> LaTeX
-ppSideBySideConstr subdocs unicode leader (L _ con) =
+ppSideBySideConstr subdocs unicode leader (L _ con) =
leader <->
- case con_res con of
- ResTyH98 -> case con_details con of
+ case con_res con of
+ ResTyH98 -> case con_details con of
- PrefixCon args ->
- decltt (hsep ((header_ unicode <+> ppBinder occ) :
+ PrefixCon args ->
+ decltt (hsep ((header_ unicode <+> ppBinder occ) :
map (ppLParendType unicode) args))
<-> rDoc mbDoc <+> nl
- RecCon fields ->
+ RecCon fields ->
(decltt (header_ unicode <+> ppBinder occ)
<-> rDoc mbDoc <+> nl)
$$
doRecordFields fields
- InfixCon arg1 arg2 ->
- decltt (hsep [ header_ unicode <+> ppLParendType unicode arg1,
- ppBinder occ,
+ InfixCon arg1 arg2 ->
+ decltt (hsep [ header_ unicode <+> ppLParendType unicode arg1,
+ ppBinder occ,
ppLParendType unicode arg2 ])
<-> rDoc mbDoc <+> nl
-
+
ResTyGADT resTy -> case con_details con of
-- prefix & infix could also use hsConDeclArgTys if it seemed to
-- simplify the code.
PrefixCon args -> doGADTCon args resTy
cd@(RecCon fields) -> doGADTCon (hsConDeclArgTys cd) resTy <+> nl $$
doRecordFields fields
- InfixCon arg1 arg2 -> doGADTCon [arg1, arg2] resTy
+ InfixCon arg1 arg2 -> doGADTCon [arg1, arg2] resTy
- where
+ where
doRecordFields fields =
vcat (map (ppSideBySideField subdocs unicode) fields)
@@ -656,9 +656,9 @@ ppSideBySideField subdocs unicode (ConDeclField (L _ name) ltype _) =
ppDataHeader :: TyClDecl DocName -> Bool -> LaTeX
ppDataHeader decl unicode
| not (isDataDecl decl) = error "ppDataHeader: illegal argument"
- | otherwise =
+ | otherwise =
-- newtype or data
- (if tcdND decl == NewType then keyword "newtype" else keyword "data") <+>
+ (if tcdND decl == NewType then keyword "newtype" else keyword "data") <+>
-- context
ppLContext (tcdCtxt decl) unicode <+>
-- T a b c ..., or a :+: b
@@ -672,7 +672,7 @@ ppDataHeader decl unicode
-- | Print a type family / newtype / data / class binder and its variables
ppTyClBinderWithVars :: Bool -> TyClDecl DocName -> LaTeX
-ppTyClBinderWithVars summ decl =
+ppTyClBinderWithVars summ decl =
ppAppDocNameNames summ (unLoc $ tcdLName decl) (tyvarNames $ tcdTyVars decl)
@@ -688,7 +688,7 @@ ppAppNameTypes n ts unicode = ppTypeApp n ts ppDocName (ppParendType unicode)
-- | Print an application of a DocName and a list of Names
ppAppDocNameNames :: Bool -> DocName -> [Name] -> LaTeX
-ppAppDocNameNames _summ n ns =
+ppAppDocNameNames _summ n ns =
ppTypeApp n ns (ppBinder . docNameOcc) ppSymName
@@ -705,7 +705,7 @@ ppTypeApp n ts ppDN ppT = ppDN n <+> hsep (map ppT ts)
-------------------------------------------------------------------------------
--- Contexts
+-- Contexts
-------------------------------------------------------------------------------
@@ -748,16 +748,16 @@ ppKind :: Outputable a => a -> LaTeX
ppKind k = text (showSDoc (ppr k))
ppBang :: HsBang -> LaTeX
-ppBang HsNoBang = empty
+ppBang HsNoBang = empty
ppBang _ = char '!' -- Unpacked args is an implementation detail,
tupleParens :: Boxity -> [LaTeX] -> LaTeX
tupleParens Boxed = parenList
-tupleParens Unboxed = ubxParenList
+tupleParens Unboxed = ubxParenList
-- -----------------------------------------------------------------------------
--- Rendering of HsType
---
+-- Rendering of HsType
+--
-- Stolen from Html and tweaked for LaTeX generation
pREC_TOP, pREC_FUN, pREC_OP, pREC_CON :: Int
@@ -779,13 +779,13 @@ maybeParen ctxt_prec op_prec p | ctxt_prec >= op_prec = parens p
ppLType, ppLParendType, ppLFunLhType :: Bool -> Located (HsType DocName) -> LaTeX
ppLType unicode y = ppType unicode (unLoc y)
-ppLParendType unicode y = ppParendType unicode (unLoc y)
+ppLParendType unicode y = ppParendType unicode (unLoc y)
ppLFunLhType unicode y = ppFunLhType unicode (unLoc y)
ppType, ppParendType, ppFunLhType :: Bool -> HsType DocName -> LaTeX
-ppType unicode ty = ppr_mono_ty pREC_TOP ty unicode
-ppParendType unicode ty = ppr_mono_ty pREC_CON ty unicode
+ppType unicode ty = ppr_mono_ty pREC_TOP ty unicode
+ppParendType unicode ty = ppr_mono_ty pREC_CON ty unicode
ppFunLhType unicode ty = ppr_mono_ty pREC_FUN ty unicode
@@ -804,15 +804,15 @@ ppForAll expl tvs cxt unicode
where
show_forall = not (null tvs) && is_explicit
is_explicit = case expl of {Explicit -> True; Implicit -> False}
- forall_part = hsep (forallSymbol unicode : ppTyVars tvs) <> dot
+ forall_part = hsep (forallSymbol unicode : ppTyVars tvs) <> dot
ppr_mono_lty :: Int -> LHsType DocName -> Bool -> LaTeX
-ppr_mono_lty ctxt_prec ty unicode = ppr_mono_ty ctxt_prec (unLoc ty) unicode
+ppr_mono_lty ctxt_prec ty unicode = ppr_mono_ty ctxt_prec (unLoc ty) unicode
ppr_mono_ty :: Int -> HsType DocName -> Bool -> LaTeX
-ppr_mono_ty ctxt_prec (HsForAllTy expl tvs ctxt ty) unicode
+ppr_mono_ty ctxt_prec (HsForAllTy expl tvs ctxt ty) unicode
= maybeParen ctxt_prec pREC_FUN $
hsep [ppForAll expl tvs ctxt unicode, ppr_mono_lty pREC_TOP ty unicode]
@@ -833,26 +833,26 @@ ppr_mono_ty _ (HsQuasiQuoteTy {}) _ = error "ppr_mono_ty HsQuasiQuoteTy"
#endif
ppr_mono_ty _ (HsRecTy {}) _ = error "ppr_mono_ty HsRecTy"
-ppr_mono_ty ctxt_prec (HsAppTy fun_ty arg_ty) unicode
+ppr_mono_ty ctxt_prec (HsAppTy fun_ty arg_ty) unicode
= maybeParen ctxt_prec pREC_CON $
hsep [ppr_mono_lty pREC_FUN fun_ty unicode, ppr_mono_lty pREC_CON arg_ty unicode]
-ppr_mono_ty ctxt_prec (HsOpTy ty1 op ty2) unicode
+ppr_mono_ty ctxt_prec (HsOpTy ty1 op ty2) unicode
= maybeParen ctxt_prec pREC_FUN $
ppr_mono_lty pREC_OP ty1 unicode <+> ppr_op <+> ppr_mono_lty pREC_OP ty2 unicode
where
ppr_op = if not (isSymOcc occName) then char '`' <> ppLDocName op <> char '`' else ppLDocName op
occName = docNameOcc . unLoc $ op
-ppr_mono_ty ctxt_prec (HsParTy ty) unicode
+ppr_mono_ty ctxt_prec (HsParTy ty) unicode
-- = parens (ppr_mono_lty pREC_TOP ty)
= ppr_mono_lty ctxt_prec ty unicode
-ppr_mono_ty ctxt_prec (HsDocTy ty _) unicode
+ppr_mono_ty ctxt_prec (HsDocTy ty _) unicode
= ppr_mono_lty ctxt_prec ty unicode
-ppr_fun_ty :: Int -> LHsType DocName -> LHsType DocName -> Bool -> LaTeX
+ppr_fun_ty :: Int -> LHsType DocName -> LHsType DocName -> Bool -> LaTeX
ppr_fun_ty ctxt_prec ty1 ty2 unicode
= let p1 = ppr_mono_lty pREC_FUN ty1 unicode
p2 = ppr_mono_lty pREC_TOP ty2 unicode
@@ -939,7 +939,7 @@ parLatexMarkup :: (a -> LaTeX) -> (a -> Bool)
-> DocMarkup a (StringContext -> LaTeX)
parLatexMarkup ppId isTyCon = Markup {
markupParagraph = \p v -> p v <> text "\\par" $$ text "",
- markupEmpty = \_ -> empty,
+ markupEmpty = \_ -> empty,
markupString = \s v -> text (fixString v s),
markupAppend = \l r v -> l v <> r v,
markupIdentifier = markupId,
@@ -951,8 +951,8 @@ parLatexMarkup ppId isTyCon = Markup {
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 "",
- markupURL = \u _ -> text "\\url" <> braces (text u),
- markupAName = \_ _ -> empty,
+ markupURL = \u _ -> text "\\url" <> braces (text u),
+ markupAName = \_ _ -> empty,
markupExample = \e _ -> quote $ verb $ text $ unlines $ map exampleToString e
}
where
@@ -960,7 +960,7 @@ parLatexMarkup ppId isTyCon = Markup {
fixString Verb s = s
fixString Mono s = latexMonoFilter s
- markupId id v =
+ markupId id v =
case v of
Verb -> theid
Mono -> theid
@@ -1002,7 +1002,7 @@ latexStripTrailingWhitespace (DocAppend l r)
| otherwise = DocAppend l r'
where
r' = latexStripTrailingWhitespace r
-latexStripTrailingWhitespace (DocParagraph p) =
+latexStripTrailingWhitespace (DocParagraph p) =
latexStripTrailingWhitespace p
latexStripTrailingWhitespace other = other
@@ -1015,19 +1015,19 @@ latexStripLeadingPara d = d
-- LaTeX utils
itemizedList :: [LaTeX] -> LaTeX
-itemizedList items =
+itemizedList items =
text "\\begin{itemize}" $$
vcat (map (text "\\item" $$) items) $$
text "\\end{itemize}"
enumeratedList :: [LaTeX] -> LaTeX
-enumeratedList items =
+enumeratedList items =
text "\\begin{enumerate}" $$
vcat (map (text "\\item " $$) items) $$
text "\\end{enumerate}"
descriptionList :: [(LaTeX,LaTeX)] -> LaTeX
-descriptionList items =
+descriptionList items =
text "\\begin{description}" $$
vcat (map (\(a,b) -> text "\\item" <> brackets a <+> b) items) $$
text "\\end{description}"