modulo 1.7.4 → 1.8.0
raw patch · 3 files changed
+4/−220 lines, 3 filesdep −pandoc
Dependencies removed: pandoc
Files
- modulo.cabal +3/−3
- src/Language/Modulo/Pandoc.hs +0/−216
- src/Main.hs +1/−1
modulo.cabal view
@@ -1,6 +1,6 @@ name: modulo-version: 1.7.4+version: 1.8.0 cabal-version: >= 1.6 author: Hans Hoglund maintainer: Hans Hoglund <hans@hanshoglund.se>@@ -36,7 +36,7 @@ atto-lisp, pandoc-types == 1.10,- pandoc == 1.11.1,+ -- pandoc == 1.11.1, process, directory hs-source-dirs: src@@ -47,7 +47,7 @@ Language.Modulo.Lisp Language.Modulo.Haskell Language.Modulo.JavaScript- Language.Modulo.Pandoc+ -- Language.Modulo.Pandoc Language.Modulo.Load Language.Modulo.Parse
− src/Language/Modulo/Pandoc.hs
@@ -1,216 +0,0 @@--{-# LANGUAGE DisambiguateRecordFields, TypeFamilies,- StandaloneDeriving, DeriveFunctor, DeriveFoldable, GeneralizedNewtypeDeriving #-}------------------------------------------------------------------------------------------ |--- Copyright : (c) Hans Hoglund 2012--- License : BSD-style--- Maintainer : hans@hanshoglund.se--- Stability : experimental--- Portability : GHC------ Renders module descriptions (and documentation) as plain Pandoc.-------------------------------------------------------------------------------------------module Language.Modulo.Pandoc (- -- ** Styles- PandocStyle(..),- stdPandocStyle,- -- ** Rendering- -- printModulePandoc,- renderModulePandoc,- ) where--import Data.Default-import Data.Semigroup-import Data.Char (chr)-import Data.Text (pack)--import Language.Modulo.C-import Language.Modulo.Util-import Language.Modulo.Util.Unmangle-import Language.Modulo-import qualified Language.Modulo.C as C-import qualified Language.Modulo.Haskell as Haskell-import qualified Language.Modulo.Lisp as Lisp---- DEBUG -import Control.Monad-import System.Directory-import System.Process-import Text.Pandoc.Options-import Text.Pandoc.Templates-import Language.Modulo.Load-import Language.Modulo.Parse-import Language.Modulo.Rename--- DEBUG--import qualified Data.List as List-import Text.Pandoc.Definition-import Text.Pandoc.Writers.HTML-import Text.Pandoc.Writers.LaTeX-import Text.Pandoc.Readers.Markdown--data PandocStyle = PandocStyle- deriving (Eq, Ord, Show)--stdMeta = Meta [] [] []-blockToPandoc = Pandoc stdMeta . return-blocksToPandoc = Pandoc stdMeta-mdStringToPandoc = readMarkdown def-instance Semigroup Pandoc where- (<>) = mappend-instance Monoid Pandoc where- mempty = Pandoc stdMeta mempty- Pandoc m1 bs1 `mappend` Pandoc m2 bs2 = Pandoc (m1 {-First-}) (bs1 <> bs2)--stdPandocStyle = PandocStyle--renderModulePandoc :: Module -> Pandoc-renderModulePandoc = renderModulePandocStyle stdPandocStyle---renderModulePandocStyle :: PandocStyle -> Module -> Pandoc-renderModulePandocStyle st mod = Pandoc stdMeta [- Header 2 ("", [], [("id",show $ modName mod)]) [Str (show $ modName mod)]- -- CodeBlock nullAttr "import X.X.X",- -- CodeBlock nullAttr "foo : Ptr -> Ptr"- ] <> is <> ds- where- is = mconcat $ fmap (uncurry $ convertImport st) $ modImports mod- ds = mconcat $ fmap (uncurry $ convertDocDecl st) $ modDecls mod---- TODO link-convertImport :: PandocStyle -> ModuleName -> Maybe String -> Pandoc-convertImport st name conv = blockToPandoc $ CodeBlock nullAttr $ "import " ++ show name--convertDocDecl :: PandocStyle -> Doc -> Decl -> Pandoc-convertDocDecl st doc decl = blocksToPandoc [- CodeBlock css $ unname $ getDeclName decl- ]- <>- (mdStringToPandoc $ getDoc $ doc)- where- -- unname = maybe "" (show . C.translFun def)- -- unname = maybe "" getShortName- unname = if isTypeDecl decl - then ("(defclass " ++) . (++ " ())") . maybe "" (Lisp.convertName def) - else (\x -> "(defun " ++ x ++ " (" ++ List.intercalate " " (argNames decl) ++ "))") . maybe "" (Lisp.convertName def)- where- isTypeDecl (TypeDecl _ _) = True- isTypeDecl _ = False-- argNames (FunctionDecl _ ft) = argNames2 ft- argNames2 (Function as r) = fmap (showT.snd) as ++ [showT r]- showT = show . Lisp.convertType def- -- TODO #34 use name-- css = (".codeName", [], [("", "")])- - getShortName (QName _ n) = n---- --- allFilesMatching :: FilePath -> (FilePath -> Bool) -> IO [FilePath]--------main = documentFiles ["/Users/hans/audio/modules"] "/Users/hans/audio/modules"--- main = documentFile ["/Users/hans/audio/modules"] "/Users/hans/audio/modules/Fa/Signal.module"--document :: [ModulePath] -> String -> IO Pandoc-document mpaths str = do- mod <- unsafeRename mpaths . unsafeParse $ str- putStr $ "Documenting " ++ show (modName mod) ++ "\n"- return $ renderModulePandoc mod--documentFiles :: [ModulePath] -> FilePath -> IO ()-documentFiles mpaths path = do- paths <- listFilesMatching path (List.isSuffixOf ".module")- pandocs <- mapM (\path -> document mpaths =<< readFile path) paths- strs <- toHtmlStr $ mconcat pandocs- writeFile "test.html" $ strs- return ()- where- cssBody = mempty- <> "body > pre { "- <> " padding: 20px; "- <> " margin-top: 15px; "- <> " margin-bottom: 15px; "- <> " background: #faffff; "- <> " border-radius: 12px; "- <> " border: 1px solid LightGrey; "- <> " box-shadow: 3px 3px 5px #eee; "- <> " overflow: auto; "- <> "}"- <> ""- <> ""- <> ""- <> ""- <> ""- <> ""- <> ""- <> ""- - toHtmlStr :: Pandoc -> IO String- toHtmlStr str = do- Right templ <- getDefaultTemplate Nothing "html"- return $ flip writeHtmlString str $ def {- writerTemplate = templ,- writerStandalone = True,- writerTableOfContents = True,- writerVariables = [("highlighting-css", cssBody)] }--documentFile :: [ModulePath] -> FilePath -> IO ()-documentFile mpaths path = do - pd <- document mpaths =<< readFile path- writeFile "test.html" $ writeHtmlString def pd -----unsafeRename :: [ModulePath] -> Module -> IO Module-unsafeRename paths m = do- deps <- loadDependencies (withStdModulePaths paths) m- return $ rename deps m- -unsafeParse :: String -> Module-unsafeParse s = case (parse s) of- Left e -> error $ "Parse error: " ++ show e- Right m -> m- --listFilesMatching :: FilePath -> (FilePath -> Bool) -> IO [FilePath]-listFilesMatching path pred = fmap (filter pred) $ listFilesR path--listFilesR :: FilePath -> IO [FilePath]-listFilesR = listFilesR' . (<> "/")--listFilesR' path = let- isDODD :: String -> Bool- isDODD f = not $ (List.isSuffixOf "/." f) || (List.isSuffixOf "/.." f)- -- isDODD _ = True-- listDirs :: [FilePath] -> IO [FilePath]- listDirs = filterM doesDirectoryExist . fmap (<> "/")-- listFiles :: [FilePath] -> IO [FilePath]- listFiles = filterM doesFileExist-- joinFN :: String -> String -> FilePath- joinFN p1 p2 = mconcat [p1, p2]-- in do- allfiles <- getDirectoryContents path- no_dots <- filterM (return . isDODD) (map (joinFN path) allfiles)- dirs <- listDirs no_dots- subdirfiles <- (mapM (listFilesR'{- . (<> "/")-}) dirs >>= return . concat)- files <- listFiles no_dots- return $ files ++ subdirfiles
src/Main.hs view
@@ -73,7 +73,7 @@ readPrimBool = LispPrimBool . (=<<) parsePrimTypeMaybe -version = "modulo-1.7.4"+version = "modulo-1.8.0" header = "Usage: modulo [options]\n" ++ "Usage: modulo [options] files...\n" ++ "\n" ++