diagrams-haddock 0.3.0.10 → 0.4
raw patch · 6 files changed
+102/−87 lines, 6 filesdep +svg-builderdep −lucid-svgdep ~Cabaldep ~QuickCheckdep ~base
Dependencies added: svg-builder
Dependencies removed: lucid-svg
Dependency ranges changed: Cabal, QuickCheck, base, diagrams-builder, diagrams-lib, diagrams-svg, haskell-src-exts, lens
Files
- CHANGES.md +12/−0
- LICENSE +3/−1
- diagrams-haddock.cabal +14/−13
- src/Diagrams/Haddock.hs +53/−48
- test/Tests.hs +7/−22
- tools/diagrams-haddock.hs +13/−3
CHANGES.md view
@@ -1,3 +1,15 @@+## [v0.4](https://github.com/diagrams/diagrams-haddock/tree/v0.4) (2016-10-26)++- Build with `ghc-8.0`+- Improved error message when `setup-config` can't be read+- Fix bug in CPP handling+- Replace `lucid-svg` with `svg-builder`+- Allow `diagrams-svg-1.4`+- Require `diagrams-lib-1.4`+- Allow `haskell-src-exts-1.18`+- Allow `diagrams-builder-0.8`+- Allow `lens-4.15`+ ## [v0.3.0.10](https://github.com/diagrams/diagrams-haddock/tree/v0.3.0.10) (2015-12-06) - allow `haskell-src-exts-1.17.*`
LICENSE view
@@ -1,6 +1,8 @@-Copyright (c) 2013-2015, diagrams-haddock team:+Copyright (c) 2013-2016, diagrams-haddock team: Daniel Bergey <bergey@alum.mit.edu>+ Christopher Chalmers <c.chalmers@me.com>+ Sidharth Kapur <sidharthkapur1@gmail.com> Jeffrey Rosenbluth <Jeffrey.Rosenbluth@gmail.com> Tillmann Vogt <tillk.vogt@googlemail.com> Ryan Yates <fryguybob@gmail.com>
diagrams-haddock.cabal view
@@ -1,5 +1,5 @@ name: diagrams-haddock-version: 0.3.0.10+version: 0.4 synopsis: Preprocessor for embedding diagrams in Haddock documentation description: diagrams-haddock is a tool for compiling embedded inline diagrams code in Haddock documentation, for an@@ -26,7 +26,7 @@ cabal-version: >=1.10 extra-source-files: README.md, CHANGES.md, diagrams/*.svg extra-doc-files: diagrams/*.svg-tested-with: GHC == 7.8.4, GHC == 7.10.1+tested-with: GHC == 7.10.2, GHC == 8.0.1 Source-repository head type: git@@ -34,7 +34,8 @@ library exposed-modules: Diagrams.Haddock- build-depends: base >= 4.4 && < 4.9,+ other-modules: Paths_diagrams_haddock+ build-depends: base >= 4.4 && < 5.0, filepath, directory, mtl >= 2.0 && < 2.3,@@ -43,12 +44,12 @@ bytestring >= 0.9 && < 0.11, strict >= 0.3 && < 0.4, parsec >= 3,- haskell-src-exts >= 1.16 && < 1.18,- lucid-svg >= 0.5 && < 0.7,- diagrams-builder >= 0.5 && < 0.8,- diagrams-lib >= 0.6 && < 1.4,- diagrams-svg >= 0.8.0.1 && < 1.4,- lens >= 3.8 && < 4.14,+ haskell-src-exts >= 1.18 && < 1.19,+ svg-builder >= 0.1 && < 0.2,+ diagrams-builder >= 0.5 && < 0.9,+ diagrams-lib >= 1.4 && < 1.5,+ diagrams-svg >= 1.4 && < 1.5,+ lens >= 3.8 && < 4.16, linear >= 1.10 && < 1.21, cpphs >= 1.15, cautious-file >= 1.0 && < 1.1,@@ -67,7 +68,7 @@ filepath, diagrams-haddock, cmdargs >= 0.8 && < 0.11,- Cabal >= 1.14 && < 1.23,+ Cabal >= 1.14 && < 1.25, cpphs >= 1.15 hs-source-dirs: tools default-language: Haskell2010@@ -77,12 +78,12 @@ main-is: Tests.hs build-depends: base, containers >= 0.4 && < 0.6,- QuickCheck >= 2.4 && < 2.9,+ QuickCheck >= 2.4 && < 2.10, tasty >= 0.8 && < 0.12, tasty-quickcheck >= 0.8 && < 0.9, parsec >= 3,- lens >= 3.8 && < 4.14,- haskell-src-exts >= 1.16 && < 1.17,+ lens >= 3.8 && < 4.16,+ haskell-src-exts >= 1.18 && < 1.19, diagrams-haddock hs-source-dirs: test default-language: Haskell2010
src/Diagrams/Haddock.hs view
@@ -1,5 +1,5 @@-{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-}@@ -73,64 +73,68 @@ ) where -import Control.Applicative hiding (many, (<|>))-import Control.Arrow (first, (&&&), (***))-import Control.Lens (makeLenses, orOf, traverse,- view, (%%~), (%~), (&), (.~),- (^.), _2, _Right)+import Control.Arrow (first, (&&&), (***))+import Control.Lens (makeLenses, orOf, view, (%%~),+ (%~), (&), (.~), (^.), _2, _Right) import Control.Monad.Writer-import qualified Data.ByteString.Base64.Lazy as BS64-import qualified Data.ByteString.Lazy as BS-import qualified Data.ByteString.Lazy.Char8 as BS8-import Data.Char (isSpace)-import Data.Either (lefts, rights)-import Data.Function (on)-import Data.Generics.Uniplate.Data (universeBi)-import Data.List (groupBy, intercalate,- isPrefixOf, partition)-import Data.List.Split (dropBlanks, dropDelims, split,- whenElt)-import qualified Data.Map as M-import Data.Maybe (catMaybes, mapMaybe)-import qualified Data.Set as S-import qualified Data.Text.Lazy as T-import qualified Data.Text.Lazy.Encoding as T-import Language.Haskell.Exts.Annotated hiding (loc)-import qualified Language.Haskell.Exts.Annotated as HSE+import qualified Data.ByteString.Base64.Lazy as BS64+import qualified Data.ByteString.Lazy as BS+import qualified Data.ByteString.Lazy.Char8 as BS8+import Data.Char (isSpace)+import Data.Either (lefts, rights)+import Data.Function (on)+import Data.Generics.Uniplate.Data (universeBi)+import Data.List (groupBy, intercalate, isPrefixOf,+ partition)+import Data.List.Split (dropBlanks, dropDelims, split,+ whenElt)+import qualified Data.Map as M+import Data.Maybe (catMaybes, mapMaybe)+import qualified Data.Set as S+import qualified Data.Text.Lazy as T+import qualified Data.Text.Lazy.Encoding as T+import qualified Graphics.Svg as G+import Language.Haskell.Exts hiding (loc)+import qualified Language.Haskell.Exts as HSE import Language.Preprocessor.Cpphs-import qualified Lucid.Svg as L-import System.Console.ANSI (setCursorColumn)-import System.Directory (copyFile,- createDirectoryIfMissing,- doesFileExist)-import System.FilePath (dropExtension, normalise,- splitDirectories, (<.>),- (</>))-import qualified System.IO as IO-import qualified System.IO.Cautious as Cautiously-import qualified System.IO.Strict as Strict+import System.Console.ANSI (setCursorColumn)+import System.Directory (copyFile,+ createDirectoryIfMissing,+ doesFileExist)+import System.FilePath (dropExtension, normalise,+ splitDirectories, (<.>), (</>))+import qualified System.IO as IO+import qualified System.IO.Cautious as Cautiously+import qualified System.IO.Strict as Strict import Text.Parsec-import qualified Text.Parsec as P+import qualified Text.Parsec as P import Text.Parsec.String -import Diagrams.Backend.SVG (Options (..), SVG (..))-import qualified Diagrams.Builder as DB-import Diagrams.Prelude (V2, zero)-import Diagrams.TwoD.Size (mkSizeSpec2D)+import Diagrams.Backend.SVG (Options (..), SVG (..))+import qualified Diagrams.Builder as DB+import Diagrams.Prelude (V2, zero)+import Diagrams.TwoD.Size (mkSizeSpec2D) ------------------------------------------------------------ -- Utilities ------------------------------------------------------------ +-- | Pretty-print a parse failure at a particular location. showParseFailure :: SrcLoc -> String -> String showParseFailure loc err = unlines [ prettyPrint loc, err ] +-- | A simple monad for collecting a list of error messages. There is+-- no facility for failing as such---in this model one simply+-- generates an error message and moves on. newtype CollectErrors a = CE { unCE :: Writer [String] a } deriving (Functor, Applicative, Monad, MonadWriter [String]) +-- | Generate an error message and fail (by returning @Nothing@). failWith :: String -> CollectErrors (Maybe a) failWith err = tell [err] >> return Nothing +-- | Run a @CollectErrors@ computation, resulting in a value of type+-- @a@ along with the collection of generated error messages. runCE :: CollectErrors a -> (a, [String]) runCE = runWriter . unCE @@ -455,7 +459,7 @@ let bopts :: DB.BuildOpts SVG V2 Double- bopts = DB.mkBuildOpts SVG zero (SVGOptions (mkSizeSpec2D w h) Nothing "")+ bopts = DB.mkBuildOpts SVG zero (SVGOptions (mkSizeSpec2D w h) Nothing "" [] False) & DB.snippets .~ map (view codeBlockCode) neededCode & DB.imports .~ [ "Diagrams.Backend.SVG" ] & DB.diaExpr .~ (url ^. diagramName)@@ -483,7 +487,7 @@ else return (newURL outFile) DB.OK hash svg -> do let cached = mkCached (DB.hashToHexStr hash)- svgBS = L.renderBS svg+ svgBS = G.renderBS svg liftIO $ BS.writeFile cached svgBS url' <- if dataURIs then return (newURL (mkDataURI svgBS))@@ -574,10 +578,11 @@ when changed $ Cautiously.writeFileL file (T.encodeUtf8 . T.pack $ src') return (msgs ++ msgs2) where- go src =- case runCE (parseCodeBlocks file src) of- r@(Nothing, msgs) -> if any (("Parse error: #" `elem`) . lines) msgs- then runCpp src >>= return . runCE . parseCodeBlocks file- else return r- r -> return r+ go src | needsCPP src = runCpp src >>= return . runCE . parseCodeBlocks file+ | otherwise = return $ runCE (parseCodeBlocks file src)++ needsCPP src = case readExtensions src of+ Just (_, es) | EnableExtension CPP `elem` es -> True+ _ -> False+ runCpp s = runCpphs opts file s
test/Tests.hs view
@@ -2,17 +2,15 @@ module Main where -import Control.Applicative-import Control.Lens (view)-import Data.Either (rights)-import Data.List ((\\))-import qualified Data.Map as M-import qualified Data.Set as S-import Language.Haskell.Exts.Annotated+import Control.Lens (view)+import Data.Either (rights)+import Data.List ((\\))+import qualified Data.Map as M+import qualified Data.Set as S import Test.QuickCheck import Test.Tasty-import Test.Tasty.QuickCheck as QC-import qualified Text.Parsec as P+import Test.Tasty.QuickCheck as QC+import qualified Text.Parsec as P import Diagrams.Haddock @@ -47,19 +45,6 @@ where s = getEString <$> arbitrary opts = (M.fromList . (map . both) getEString) <$> arbitrary--instance Arbitrary SrcSpan where- arbitrary = do- NonEmpty fName <- arbitrary- Positive startLn <- arbitrary- NonNegative startCol <- arbitrary- NonNegative numLines <- arbitrary- NonNegative numCols <- arbitrary-- return $ SrcSpan fName startLn startCol (startLn + numLines) (startCol + numCols)--instance Arbitrary Comment where- arbitrary = Comment <$> arbitrary <*> arbitrary <*> arbitrary prop_parseDisplay :: DiagramURL -> Bool prop_parseDisplay d
tools/diagrams-haddock.hs view
@@ -15,6 +15,7 @@ import qualified Distribution.PackageDescription as P import Distribution.Simple.Configure (maybeGetPersistBuildConfig) import Distribution.Simple.LocalBuildInfo (localPkgDescr)+import Distribution.Simple.Utils (cabalVersion) import Language.Preprocessor.Cpphs @@ -75,7 +76,8 @@ } &= program "diagrams-haddock" &= summary (unlines- [ "diagrams-haddock v" ++ showVersion version ++ ", (c) 2013 diagrams-haddock team (see LICENSE)"+ [ "diagrams-haddock v" ++ showVersion version ++ ", (c) 2013-2016 diagrams-haddock team (see LICENSE)"+ , "compiled using version " ++ showVersion cabalVersion ++ " of the Cabal library" , "" , "Compile inline diagrams code in Haddock documentation." , ""@@ -126,8 +128,16 @@ mlbi <- maybeGetPersistBuildConfig fullDistDir case mlbi of- Nothing -> putStrLn $- "No setup-config found in " ++ fullDistDir ++ ", please run 'cabal configure' first."+ Nothing -> putStrLn $ unlines [+ "diagrams-haddock: No appropriate setup-config found in " ++ fullDistDir+ , "Either it does not exist or it is in the wrong format."+ , "* You may need to run 'cabal configure' first."+ , "* Make sure that the version of Cabal used to compile"+ , " diagrams-haddock (" ++ showVersion cabalVersion ++ ") matches the version used"+ , " by the cabal tool."+ , "* Use the -d option if you want diagrams-haddock to look in"+ , " a different dist directory."+ ] Just lbi -> do let mlib = P.library . localPkgDescr $ lbi case mlib of