From d5ec98534422eba93298bb8a76e6b315a55c3158 Mon Sep 17 00:00:00 2001 From: David Waern Date: Sun, 29 Aug 2010 13:03:28 +0000 Subject: Add source entity path to --read-interface You can now use this flag like this: --read-interface=,,<.haddock file> By "source entity path" I mean the same thing that is specified with the --source-entity flag. The purpose of this is to be able to specify the source entity path per package, to allow source links to work in the presence of cross-package documentation. When given two arguments or less the --read-interface flag behaves as before. --- src/Haddock/Backends/Xhtml/Layout.hs | 6 ++++-- src/Haddock/Backends/Xhtml/Types.hs | 10 +++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'src/Haddock/Backends/Xhtml') diff --git a/src/Haddock/Backends/Xhtml/Layout.hs b/src/Haddock/Backends/Xhtml/Layout.hs index 5ffdf181..295af305 100644 --- a/src/Haddock/Backends/Xhtml/Layout.hs +++ b/src/Haddock/Backends/Xhtml/Layout.hs @@ -42,6 +42,7 @@ import Haddock.Backends.Xhtml.Utils import Haddock.Types import Haddock.Utils (makeAnchorId) +import qualified Data.Map as Map import Text.XHtml hiding ( name, title, p, quote ) import FastString ( unpackFS ) @@ -175,10 +176,10 @@ declElem = paragraph ! [theclass "src"] -- a box for top level documented names -- it adds a source and wiki link at the right hand side of the box topDeclElem :: LinksInfo -> SrcSpan -> DocName -> Html -> Html -topDeclElem ((_,_,maybe_source_url), (_,_,maybe_wiki_url)) loc name html = +topDeclElem ((_,_,sourceMap), (_,_,maybe_wiki_url)) loc name html = declElem << (html +++ srcLink +++ wikiLink) where srcLink = - case maybe_source_url of + case Map.lookup origPkg sourceMap of Nothing -> noHtml Just url -> let url' = spliceURL (Just fname) (Just origMod) (Just n) (Just loc) url @@ -196,6 +197,7 @@ topDeclElem ((_,_,maybe_source_url), (_,_,maybe_wiki_url)) loc name html = -- TODO: do something about type instances. They will point to -- the module defining the type family, which is wrong. origMod = nameModule n + origPkg = modulePackageId origMod -- Name must be documented, otherwise we wouldn't get here Documented n mdl = name diff --git a/src/Haddock/Backends/Xhtml/Types.hs b/src/Haddock/Backends/Xhtml/Types.hs index 4e23f469..7bff0eb1 100644 --- a/src/Haddock/Backends/Xhtml/Types.hs +++ b/src/Haddock/Backends/Xhtml/Types.hs @@ -16,10 +16,14 @@ module Haddock.Backends.Xhtml.Types ( ) where +import Data.Map +import GHC + + -- the base, module and entity URLs for the source code and wiki links. -type SourceURLs = (Maybe String, Maybe String, Maybe String) -type WikiURLs = (Maybe String, Maybe String, Maybe String) +type SourceURLs = (Maybe FilePath, Maybe FilePath, Map PackageId FilePath) +type WikiURLs = (Maybe FilePath, Maybe FilePath, Maybe FilePath) --- The URL for source and wiki links, and the current module +-- The URL for source and wiki links type LinksInfo = (SourceURLs, WikiURLs) -- cgit v1.2.3