Skip to content
This repository was archived by the owner on Aug 3, 2024. It is now read-only.

Commit 7484cf8

Browse files
authored
Merge pull request #1516 from duog/9-4-backport-fix-hyperlinks
Backport 9-4: Fix hyperlinks to external items and modules (#1482)
2 parents 2368e93 + 2036454 commit 7484cf8

File tree

1 file changed

+13
-4
lines changed
  • haddock-api/src/Haddock/Backends/Hyperlinker

1 file changed

+13
-4
lines changed

haddock-api/src/Haddock/Backends/Hyperlinker/Renderer.hs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import System.FilePath.Posix ((</>))
2424

2525
import qualified Data.Map as Map
2626
import qualified Data.Set as Set
27+
import qualified Data.List as List
2728

2829
import Text.XHtml (Html, HtmlAttr, (!))
2930
import qualified Text.XHtml as Html
@@ -249,14 +250,20 @@ hyperlink (srcs, srcs') ident = case ident of
249250
Left name -> externalModHyperlink name
250251

251252
where
253+
-- In a Nix environment, we have file:// URLs with absolute paths
254+
makeHyperlinkUrl url | List.isPrefixOf "file://" url = url
255+
makeHyperlinkUrl url = ".." </> url
256+
252257
internalHyperlink name content =
253258
Html.anchor content ! [ Html.href $ "#" ++ internalAnchorIdent name ]
254259

255260
externalNameHyperlink name content = case Map.lookup mdl srcs of
256261
Just SrcLocal -> Html.anchor content !
257262
[ Html.href $ hypSrcModuleNameUrl mdl name ]
258-
Just (SrcExternal path) -> Html.anchor content !
259-
[ Html.href $ spliceURL Nothing (Just mdl) (Just name) Nothing (".." </> path) ]
263+
Just (SrcExternal path) ->
264+
let hyperlinkUrl = makeHyperlinkUrl path </> hypSrcModuleNameUrl mdl name
265+
in Html.anchor content !
266+
[ Html.href $ spliceURL Nothing (Just mdl) (Just name) Nothing hyperlinkUrl ]
260267
Nothing -> content
261268
where
262269
mdl = nameModule name
@@ -265,8 +272,10 @@ hyperlink (srcs, srcs') ident = case ident of
265272
case Map.lookup moduleName srcs' of
266273
Just SrcLocal -> Html.anchor content !
267274
[ Html.href $ hypSrcModuleUrl' moduleName ]
268-
Just (SrcExternal path) -> Html.anchor content !
269-
[ Html.href $ spliceURL' Nothing (Just moduleName) Nothing Nothing (".." </> path) ]
275+
Just (SrcExternal path) ->
276+
let hyperlinkUrl = makeHyperlinkUrl path </> hypSrcModuleUrl' moduleName
277+
in Html.anchor content !
278+
[ Html.href $ spliceURL' Nothing (Just moduleName) Nothing Nothing hyperlinkUrl ]
270279
Nothing -> content
271280

272281

0 commit comments

Comments
 (0)