aboutsummaryrefslogtreecommitdiff
path: root/haddock-api/src
diff options
context:
space:
mode:
authorŁukasz Hanuszczak <lukasz.hanuszczak@gmail.com>2015-06-26 21:13:12 +0200
committerŁukasz Hanuszczak <lukasz.hanuszczak@gmail.com>2015-06-30 22:37:49 +0200
commitaffd889d1b192d2cb9787c92202317b9e9401922 (patch)
treea0087f36a466dd1d2cbfc6253a49beb27e7d30fc /haddock-api/src
parenta6bd86a8550d5d7e8bdb12e1d09036b9f88eed73 (diff)
Make source hyperlinker generate output in apropriate directory.
Diffstat (limited to 'haddock-api/src')
-rw-r--r--haddock-api/src/Haddock.hs10
-rw-r--r--haddock-api/src/Haddock/Backends/Hyperlinker.hs41
-rw-r--r--haddock-api/src/Haddock/Utils.hs5
3 files changed, 38 insertions, 18 deletions
diff --git a/haddock-api/src/Haddock.hs b/haddock-api/src/Haddock.hs
index 698122e3..01e4cd45 100644
--- a/haddock-api/src/Haddock.hs
+++ b/haddock-api/src/Haddock.hs
@@ -258,10 +258,16 @@ render dflags flags qual ifaces installedIfaces srcMap = do
pkgNameVer = modulePackageInfo dflags flags pkgMod
(srcBase, srcModule, srcEntity, srcLEntity) = sourceUrls flags
+
+ srcModule'
+ | isJust srcModule = srcModule
+ | Flag_HyperlinkedSource `elem` flags = Just defaultModuleSourceUrl
+ | otherwise = Nothing
+
srcMap' = maybe srcMap (\path -> Map.insert pkgKey path srcMap) srcEntity
-- TODO: Get these from the interface files as with srcMap
srcLMap' = maybe Map.empty (\path -> Map.singleton pkgKey path) srcLEntity
- sourceUrls' = (srcBase, srcModule, srcMap', srcLMap')
+ sourceUrls' = (srcBase, srcModule', srcMap', srcLMap')
libDir <- getHaddockLibDir flags
prologue <- getPrologue dflags flags
@@ -311,7 +317,7 @@ render dflags flags qual ifaces installedIfaces srcMap = do
libDir
when (Flag_HyperlinkedSource `elem` flags) $ do
- ppHyperlinkedSource odir libDir opt_source_css visibleIfaces
+ ppHyperlinkedSource odir libDir opt_source_css sourceUrls' visibleIfaces
-- | From GHC 7.10, this function has a potential to crash with a
-- nasty message such as @expectJust getPackageDetails@ because
diff --git a/haddock-api/src/Haddock/Backends/Hyperlinker.hs b/haddock-api/src/Haddock/Backends/Hyperlinker.hs
index 9337307c..2ed4dbdd 100644
--- a/haddock-api/src/Haddock/Backends/Hyperlinker.hs
+++ b/haddock-api/src/Haddock/Backends/Hyperlinker.hs
@@ -1,45 +1,54 @@
module Haddock.Backends.Hyperlinker (ppHyperlinkedSource) where
import Haddock.Types
+import Haddock.Utils
+import Haddock.Backends.Xhtml.Types
+import Haddock.Backends.Xhtml.Utils
import Haddock.Backends.Hyperlinker.Renderer
-import GHC
import Text.XHtml hiding ((</>))
import Data.Maybe
import System.Directory
import System.FilePath
-ppHyperlinkedSource :: FilePath -> FilePath -> Maybe FilePath -> [Interface]
+ppHyperlinkedSource :: FilePath -> FilePath
+ -> Maybe FilePath
+ -> SourceURLs
+ -> [Interface]
-> IO ()
-ppHyperlinkedSource outdir libdir mstyle ifaces = do
- createDirectoryIfMissing True $ srcPath outdir
+ppHyperlinkedSource outdir libdir mstyle urls ifaces = do
+ createDirectoryIfMissing True srcdir
let cssFile = fromMaybe (defaultCssFile libdir) mstyle
- copyFile cssFile $ srcPath outdir </> srcCssFile
+ copyFile cssFile $ srcdir </> srcCssFile
copyFile (libdir </> "html" </> highlightScript) $
- srcPath outdir </> highlightScript
- mapM_ (ppHyperlinkedModuleSource outdir) ifaces
+ srcdir </> highlightScript
+ mapM_ (ppHyperlinkedModuleSource outdir urls) ifaces
+ where
+ srcdir = srcPath outdir urls
-ppHyperlinkedModuleSource :: FilePath -> Interface -> IO ()
-ppHyperlinkedModuleSource outdir iface = case ifaceTokenizedSrc iface of
+ppHyperlinkedModuleSource :: FilePath -> SourceURLs -> Interface -> IO ()
+ppHyperlinkedModuleSource outdir urls iface = case ifaceTokenizedSrc iface of
Just tokens -> writeFile path $ showHtml . render mCssFile mJsFile $ tokens
Nothing -> return ()
where
mCssFile = Just $ srcCssFile
mJsFile = Just $ highlightScript
- path = srcPath outdir </> moduleSourceFile (ifaceMod iface)
-
-moduleSourceFile :: Module -> FilePath
-moduleSourceFile = (++ ".html") . moduleNameString . moduleName
+ srcFile = spliceURL Nothing (Just $ ifaceMod iface) Nothing Nothing $
+ srcModUrl urls
+ path = outdir </> srcFile
-srcPath :: FilePath -> FilePath
-srcPath outdir = outdir </> "src"
+srcPath :: FilePath -> SourceURLs -> FilePath
+srcPath outdir urls = outdir </> takeDirectory (srcModUrl urls)
srcCssFile :: FilePath
-srcCssFile = "style.css"
+srcCssFile = "srcstyle.css"
highlightScript :: FilePath
highlightScript = "highlight.js"
defaultCssFile :: FilePath -> FilePath
defaultCssFile libdir = libdir </> "html" </> "solarized.css"
+
+srcModUrl :: SourceURLs -> String
+srcModUrl (_, mModSrcUrl, _, _) = fromMaybe defaultModuleSourceUrl mModSrcUrl
diff --git a/haddock-api/src/Haddock/Utils.hs b/haddock-api/src/Haddock/Utils.hs
index 4fed3a1e..78c78aca 100644
--- a/haddock-api/src/Haddock/Utils.hs
+++ b/haddock-api/src/Haddock/Utils.hs
@@ -29,6 +29,7 @@ module Haddock.Utils (
moduleNameUrl, moduleNameUrl', moduleUrl,
nameAnchorId,
makeAnchorId,
+ defaultModuleSourceUrl,
-- * Miscellaneous utilities
getProgramName, bye, die, dieMsg, noDieMsg, mapSnd, mapMaybeM, escapeStr,
@@ -277,6 +278,10 @@ makeAnchorId (f:r) = escape isAlpha f ++ concatMap (escape isLegal) r
-- NB: '-' is legal in IDs, but we use it as the escape char
+defaultModuleSourceUrl :: String
+defaultModuleSourceUrl = "src/%{MODULE}.html"
+
+
-------------------------------------------------------------------------------
-- * Files we need to copy from our $libdir
-------------------------------------------------------------------------------