----------------------------------------------------------------------------- -- Copyright 2015, Open Universiteit Nederland. This file is distributed -- under the terms of the GNU General Public License. For more information, -- see the file "LICENSE.txt", which is included in the distribution. ----------------------------------------------------------------------------- -- | -- Maintainer : bastiaan.heeren@ou.nl -- Stability : provisional -- Portability : portable (depends on ghc) -- -- Manages links to information -- ----------------------------------------------------------------------------- -- $Id: Documentation.hs 7524 2015-04-08 07:31:15Z bastiaan $ module Ideas.Main.Documentation (makeDocumentation) where import Control.Monad import Ideas.Common.Library import Ideas.Common.Utils import Ideas.Encoding.Encoder (run, simpleOptions) import Ideas.Encoding.EncoderHTML import Ideas.Encoding.LinkManager import Ideas.Service.BasicServices import Ideas.Service.DomainReasoner import Ideas.Service.Types import Ideas.Text.HTML import System.Directory import System.FilePath (takeDirectory) makeDocumentation :: DomainReasoner -> String -> IO () makeDocumentation dr dir = do putStrLn "Generating index pages" makeIndex urlForIndex (dr ::: tDomainReasoner) makeIndex urlForExercises (exercises dr ::: tList tSomeExercise) makeIndex urlForServices (services dr ::: tList tService) putStrLn "Generating service pages" forM_ (services dr) $ \srv -> makeIndex (`urlForService` srv) (srv ::: tService) putStrLn "Generating exercise pages" forM_ (exercises dr) $ \(Some ex) -> do makeEx ex urlForExercise (ex ::: tExercise) makeEx ex urlForStrategy (toStrategy (strategy ex) ::: tStrategy) makeEx ex urlForRules (ruleset ex ::: tList tRule) makeEx ex urlForExamples (map (second (inContext ex)) (examples ex) ::: tList (tPair tDifficulty tContext)) makeEx ex urlForDerivations (exampleDerivations ex ::: tError (tList (tDerivation (tPair tRule tEnvironment) tContext))) forM_ (ruleset ex) $ \r -> make ex (urlForRule lm ex r) (r ::: tRule) where lm = staticLinks makeIndex f = make emptyExercise (f lm) makeEx ex f = make ex (f lm ex) make ex url tv = do let enc = htmlEncoderAt (pathLevel url) dr html <- run enc (simpleOptions ex) tv safeWrite (dir url) (showHTML html) safeWrite :: FilePath -> String -> IO () safeWrite filename txt = do let dirpart = takeDirectory filename unless (null dirpart) (createDirectoryIfMissing True dirpart) putStrLn $ "- " ++ filename writeFile filename txt