lib: refactor, add embedFileRelative

This commit is contained in:
Simon Michael 2019-01-26 15:52:58 -08:00
parent 4f8153cf82
commit 550aa408eb
8 changed files with 55 additions and 51 deletions

View File

@ -37,15 +37,19 @@ where
import Control.Monad (liftM, when)
-- import Data.Char
import Data.Default
import Data.FileEmbed (makeRelativeToProject, embedFile)
import Data.List
-- import Data.Maybe
-- import Data.PPrint
import Data.String.Here (hereFile)
import Data.Text (Text)
import qualified Data.Text.IO as T
import Data.Time.Clock
import Data.Time.LocalTime
-- import Data.Text (Text)
-- import qualified Data.Text as T
import Language.Haskell.TH.Quote (QuasiQuoter(..))
import Language.Haskell.TH.Syntax (Q, Exp)
import System.Directory (getHomeDirectory)
import System.FilePath((</>), isRelative)
import System.IO
@ -220,6 +224,18 @@ sequence' ms = do
mapM' :: Monad f => (a -> f b) -> [a] -> f [b]
mapM' f = sequence' . map f
-- | Like embedFile, but takes a path relative to the package directory.
-- Similar to hereFileRelative ?
embedFileRelative :: FilePath -> Q Exp
embedFileRelative f = makeRelativeToProject f >>= embedFile
-- | Like hereFile, but takes a path relative to the package directory.
-- Similar to embedFileRelative ?
hereFileRelative :: FilePath -> Q Exp
hereFileRelative f = makeRelativeToProject f >>= hereFileExp
where
QuasiQuoter{quoteExp=hereFileExp} = hereFile
tests_Utils = tests "Utils" [
tests_Text
]

View File

@ -4,7 +4,7 @@ cabal-version: 1.12
--
-- see: https://github.com/sol/hpack
--
-- hash: 510ffa940692e35167ef2f17c5eaa61f6510793dc0a902f0daac254da37fee9e
-- hash: 83c1fff5c5877da9fe972db3b0b57fb31687fbdb4476b7ee0136e76a64e2f69e
name: hledger-lib
version: 1.12.99
@ -121,8 +121,10 @@ library
, directory
, easytest
, extra
, file-embed >=0.0.10
, filepath
, hashtables >=1.2.3.1
, here
, megaparsec >=7.0.0 && <8
, mtl
, mtl-compat
@ -134,6 +136,7 @@ library
, safe >=0.2
, split >=0.1
, tabular >=0.2
, template-haskell
, text >=1.2
, time >=1.5
, transformers >=0.2
@ -221,8 +224,10 @@ test-suite doctests
, doctest >=0.16
, easytest
, extra
, file-embed >=0.0.10
, filepath
, hashtables >=1.2.3.1
, here
, megaparsec >=7.0.0 && <8
, mtl
, mtl-compat
@ -234,6 +239,7 @@ test-suite doctests
, safe >=0.2
, split >=0.1
, tabular >=0.2
, template-haskell
, text >=1.2
, time >=1.5
, transformers >=0.2
@ -320,8 +326,10 @@ test-suite easytests
, directory
, easytest
, extra
, file-embed >=0.0.10
, filepath
, hashtables >=1.2.3.1
, here
, hledger-lib
, megaparsec >=7.0.0 && <8
, mtl
@ -334,6 +342,7 @@ test-suite easytests
, safe >=0.2
, split >=0.1
, tabular >=0.2
, template-haskell
, text >=1.2
, time >=1.5
, transformers >=0.2

View File

@ -55,8 +55,10 @@ dependencies:
- deepseq
- directory
- easytest
- file-embed >=0.0.10
- filepath
- hashtables >=1.2.3.1
- here
- megaparsec >=7.0.0 && <8
- mtl
- mtl-compat
@ -68,6 +70,7 @@ dependencies:
- safe >=0.2
- split >=0.1
- tabular >=0.2
- template-haskell
- text >=1.2
- time >=1.5
- transformers >=0.2

View File

@ -14,7 +14,6 @@ import System.Console.CmdArgs.Explicit as C
import Hledger
import Hledger.Cli.CliOptions
import Hledger.Cli.Utils (hereFileRelative)
closemode = hledgerCommandMode
$(hereFileRelative "Hledger/Cli/Commands/Close.md")

View File

@ -24,57 +24,56 @@ import Prelude ()
import "base-compat-batteries" Prelude.Compat
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as BC
import Data.FileEmbed
import Data.String
import System.IO
import System.IO.Temp
import System.Process
import Hledger.Utils (first3, second3, third3)
import Hledger.Utils (first3, second3, third3, embedFileRelative)
type Topic = String
docFiles :: [(Topic, (ByteString, ByteString, ByteString))]
docFiles = [
("hledger",
($(makeRelativeToProject "embeddedfiles/hledger.1" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger.txt" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger.info" >>= embedFile)
($(embedFileRelative "embeddedfiles/hledger.1")
,$(embedFileRelative "embeddedfiles/hledger.txt")
,$(embedFileRelative "embeddedfiles/hledger.info")
))
,("hledger-ui",
($(makeRelativeToProject "embeddedfiles/hledger-ui.1" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger-ui.txt" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger-ui.info" >>= embedFile)
($(embedFileRelative "embeddedfiles/hledger-ui.1")
,$(embedFileRelative "embeddedfiles/hledger-ui.txt")
,$(embedFileRelative "embeddedfiles/hledger-ui.info")
))
,("hledger-web",
($(makeRelativeToProject "embeddedfiles/hledger-web.1" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger-web.txt" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger-web.info" >>= embedFile)
($(embedFileRelative "embeddedfiles/hledger-web.1")
,$(embedFileRelative "embeddedfiles/hledger-web.txt")
,$(embedFileRelative "embeddedfiles/hledger-web.info")
))
,("hledger-api",
($(makeRelativeToProject "embeddedfiles/hledger-api.1" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger-api.txt" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger-api.info" >>= embedFile)
($(embedFileRelative "embeddedfiles/hledger-api.1")
,$(embedFileRelative "embeddedfiles/hledger-api.txt")
,$(embedFileRelative "embeddedfiles/hledger-api.info")
))
,("journal",
($(makeRelativeToProject "embeddedfiles/hledger_journal.5" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger_journal.txt" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger_journal.info" >>= embedFile)
($(embedFileRelative "embeddedfiles/hledger_journal.5")
,$(embedFileRelative "embeddedfiles/hledger_journal.txt")
,$(embedFileRelative "embeddedfiles/hledger_journal.info")
))
,("csv",
($(makeRelativeToProject "embeddedfiles/hledger_csv.5" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger_csv.txt" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger_csv.info" >>= embedFile)
($(embedFileRelative "embeddedfiles/hledger_csv.5")
,$(embedFileRelative "embeddedfiles/hledger_csv.txt")
,$(embedFileRelative "embeddedfiles/hledger_csv.info")
))
,("timeclock",
($(makeRelativeToProject "embeddedfiles/hledger_timeclock.5" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.txt" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.info" >>= embedFile)
($(embedFileRelative "embeddedfiles/hledger_timeclock.5")
,$(embedFileRelative "embeddedfiles/hledger_timeclock.txt")
,$(embedFileRelative "embeddedfiles/hledger_timeclock.info")
))
,("timedot",
($(makeRelativeToProject "embeddedfiles/hledger_timedot.5" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger_timedot.txt" >>= embedFile)
,$(makeRelativeToProject "embeddedfiles/hledger_timedot.info" >>= embedFile)
($(embedFileRelative "embeddedfiles/hledger_timedot.5")
,$(embedFileRelative "embeddedfiles/hledger_timedot.txt")
,$(embedFileRelative "embeddedfiles/hledger_timedot.info")
))
]

View File

@ -9,7 +9,6 @@ Hledger.Utils.
module Hledger.Cli.Utils
(
hereFileRelative,
withJournalDo,
writeOutput,
journalTransform,
@ -32,16 +31,12 @@ import Control.Exception as C
import Control.Monad
import Data.Hashable (hash)
import Data.FileEmbed (makeRelativeToProject)
import Data.List
import Data.Maybe
import qualified Data.Text as T
import qualified Data.Text.IO as T
import Data.String.Here (hereFile)
import Data.Time (Day, addDays)
import Data.Word
import Language.Haskell.TH.Quote (QuasiQuoter(..))
import Language.Haskell.TH.Syntax (Q, Exp)
import Numeric
import Safe (readMay)
import System.Console.CmdArgs
@ -63,13 +58,6 @@ import Hledger.Read
import Hledger.Reports
import Hledger.Utils
-- XXX hereFile or embedFile ? QQ or TH ? does it matter ?
-- | Embed the contents of a file, given a path relative to the current package.
hereFileRelative :: FilePath -> Q Exp
hereFileRelative f = makeRelativeToProject f >>= hereFileExp
where
QuasiQuoter{quoteExp=hereFileExp} = hereFile
-- | Parse the user's specified journal file(s) as a Journal, maybe apply some
-- transformations according to options, and run a hledger command with it.
-- Or, throw an error.

View File

@ -4,7 +4,7 @@ cabal-version: 1.12
--
-- see: https://github.com/sol/hpack
--
-- hash: 2b1a58e0e13c29b497037f556b0bbe5836e1667dc222aafc546683392fd9c211
-- hash: f7e09ce5d14e5c6c98b49831e7542ad9c40c969033841ca17e144a06bcda89cb
name: hledger
version: 1.12.99
@ -125,7 +125,6 @@ library
, data-default >=0.5
, directory
, easytest
, file-embed >=0.0.10
, filepath
, hashable >=1.2.4
, haskeline >=0.6
@ -145,7 +144,6 @@ library
, shakespeare >=2.0.2.2
, split >=0.1
, tabular >=0.2
, template-haskell
, temporary
, text >=0.11
, time >=1.5
@ -178,7 +176,6 @@ executable hledger
, data-default >=0.5
, directory
, easytest
, file-embed >=0.0.10
, filepath
, haskeline >=0.6
, here
@ -197,7 +194,6 @@ executable hledger
, shakespeare >=2.0.2.2
, split >=0.1
, tabular >=0.2
, template-haskell
, temporary
, text >=0.11
, time >=1.5
@ -233,7 +229,6 @@ test-suite test
, data-default >=0.5
, directory
, easytest
, file-embed >=0.0.10
, filepath
, haskeline >=0.6
, here
@ -252,7 +247,6 @@ test-suite test
, shakespeare >=2.0.2.2
, split >=0.1
, tabular >=0.2
, template-haskell
, temporary
, test-framework
, test-framework-hunit
@ -288,7 +282,6 @@ benchmark bench
, data-default >=0.5
, directory
, easytest
, file-embed >=0.0.10
, filepath
, haskeline >=0.6
, here
@ -308,7 +301,6 @@ benchmark bench
, shakespeare >=2.0.2.2
, split >=0.1
, tabular >=0.2
, template-haskell
, temporary
, text >=0.11
, time >=1.5

View File

@ -89,7 +89,6 @@ dependencies:
- Decimal
- directory
- easytest
- file-embed >=0.0.10
- filepath
- haskeline >=0.6
- here
@ -104,7 +103,6 @@ dependencies:
- safe >=0.2
- shakespeare >=2.0.2.2
- split >=0.1
- template-haskell
- math-functions >=0.2.0.0
- tabular >=0.2
- temporary