lib: refactor, add embedFileRelative
This commit is contained in:
parent
4f8153cf82
commit
550aa408eb
@ -37,15 +37,19 @@ where
|
|||||||
import Control.Monad (liftM, when)
|
import Control.Monad (liftM, when)
|
||||||
-- import Data.Char
|
-- import Data.Char
|
||||||
import Data.Default
|
import Data.Default
|
||||||
|
import Data.FileEmbed (makeRelativeToProject, embedFile)
|
||||||
import Data.List
|
import Data.List
|
||||||
-- import Data.Maybe
|
-- import Data.Maybe
|
||||||
-- import Data.PPrint
|
-- import Data.PPrint
|
||||||
|
import Data.String.Here (hereFile)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
import Data.Time.Clock
|
import Data.Time.Clock
|
||||||
import Data.Time.LocalTime
|
import Data.Time.LocalTime
|
||||||
-- import Data.Text (Text)
|
-- import Data.Text (Text)
|
||||||
-- import qualified Data.Text as T
|
-- 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.Directory (getHomeDirectory)
|
||||||
import System.FilePath((</>), isRelative)
|
import System.FilePath((</>), isRelative)
|
||||||
import System.IO
|
import System.IO
|
||||||
@ -220,6 +224,18 @@ sequence' ms = do
|
|||||||
mapM' :: Monad f => (a -> f b) -> [a] -> f [b]
|
mapM' :: Monad f => (a -> f b) -> [a] -> f [b]
|
||||||
mapM' f = sequence' . map f
|
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_Utils = tests "Utils" [
|
||||||
tests_Text
|
tests_Text
|
||||||
]
|
]
|
||||||
|
|||||||
@ -4,7 +4,7 @@ cabal-version: 1.12
|
|||||||
--
|
--
|
||||||
-- see: https://github.com/sol/hpack
|
-- see: https://github.com/sol/hpack
|
||||||
--
|
--
|
||||||
-- hash: 510ffa940692e35167ef2f17c5eaa61f6510793dc0a902f0daac254da37fee9e
|
-- hash: 83c1fff5c5877da9fe972db3b0b57fb31687fbdb4476b7ee0136e76a64e2f69e
|
||||||
|
|
||||||
name: hledger-lib
|
name: hledger-lib
|
||||||
version: 1.12.99
|
version: 1.12.99
|
||||||
@ -121,8 +121,10 @@ library
|
|||||||
, directory
|
, directory
|
||||||
, easytest
|
, easytest
|
||||||
, extra
|
, extra
|
||||||
|
, file-embed >=0.0.10
|
||||||
, filepath
|
, filepath
|
||||||
, hashtables >=1.2.3.1
|
, hashtables >=1.2.3.1
|
||||||
|
, here
|
||||||
, megaparsec >=7.0.0 && <8
|
, megaparsec >=7.0.0 && <8
|
||||||
, mtl
|
, mtl
|
||||||
, mtl-compat
|
, mtl-compat
|
||||||
@ -134,6 +136,7 @@ library
|
|||||||
, safe >=0.2
|
, safe >=0.2
|
||||||
, split >=0.1
|
, split >=0.1
|
||||||
, tabular >=0.2
|
, tabular >=0.2
|
||||||
|
, template-haskell
|
||||||
, text >=1.2
|
, text >=1.2
|
||||||
, time >=1.5
|
, time >=1.5
|
||||||
, transformers >=0.2
|
, transformers >=0.2
|
||||||
@ -221,8 +224,10 @@ test-suite doctests
|
|||||||
, doctest >=0.16
|
, doctest >=0.16
|
||||||
, easytest
|
, easytest
|
||||||
, extra
|
, extra
|
||||||
|
, file-embed >=0.0.10
|
||||||
, filepath
|
, filepath
|
||||||
, hashtables >=1.2.3.1
|
, hashtables >=1.2.3.1
|
||||||
|
, here
|
||||||
, megaparsec >=7.0.0 && <8
|
, megaparsec >=7.0.0 && <8
|
||||||
, mtl
|
, mtl
|
||||||
, mtl-compat
|
, mtl-compat
|
||||||
@ -234,6 +239,7 @@ test-suite doctests
|
|||||||
, safe >=0.2
|
, safe >=0.2
|
||||||
, split >=0.1
|
, split >=0.1
|
||||||
, tabular >=0.2
|
, tabular >=0.2
|
||||||
|
, template-haskell
|
||||||
, text >=1.2
|
, text >=1.2
|
||||||
, time >=1.5
|
, time >=1.5
|
||||||
, transformers >=0.2
|
, transformers >=0.2
|
||||||
@ -320,8 +326,10 @@ test-suite easytests
|
|||||||
, directory
|
, directory
|
||||||
, easytest
|
, easytest
|
||||||
, extra
|
, extra
|
||||||
|
, file-embed >=0.0.10
|
||||||
, filepath
|
, filepath
|
||||||
, hashtables >=1.2.3.1
|
, hashtables >=1.2.3.1
|
||||||
|
, here
|
||||||
, hledger-lib
|
, hledger-lib
|
||||||
, megaparsec >=7.0.0 && <8
|
, megaparsec >=7.0.0 && <8
|
||||||
, mtl
|
, mtl
|
||||||
@ -334,6 +342,7 @@ test-suite easytests
|
|||||||
, safe >=0.2
|
, safe >=0.2
|
||||||
, split >=0.1
|
, split >=0.1
|
||||||
, tabular >=0.2
|
, tabular >=0.2
|
||||||
|
, template-haskell
|
||||||
, text >=1.2
|
, text >=1.2
|
||||||
, time >=1.5
|
, time >=1.5
|
||||||
, transformers >=0.2
|
, transformers >=0.2
|
||||||
|
|||||||
@ -55,8 +55,10 @@ dependencies:
|
|||||||
- deepseq
|
- deepseq
|
||||||
- directory
|
- directory
|
||||||
- easytest
|
- easytest
|
||||||
|
- file-embed >=0.0.10
|
||||||
- filepath
|
- filepath
|
||||||
- hashtables >=1.2.3.1
|
- hashtables >=1.2.3.1
|
||||||
|
- here
|
||||||
- megaparsec >=7.0.0 && <8
|
- megaparsec >=7.0.0 && <8
|
||||||
- mtl
|
- mtl
|
||||||
- mtl-compat
|
- mtl-compat
|
||||||
@ -68,6 +70,7 @@ dependencies:
|
|||||||
- safe >=0.2
|
- safe >=0.2
|
||||||
- split >=0.1
|
- split >=0.1
|
||||||
- tabular >=0.2
|
- tabular >=0.2
|
||||||
|
- template-haskell
|
||||||
- text >=1.2
|
- text >=1.2
|
||||||
- time >=1.5
|
- time >=1.5
|
||||||
- transformers >=0.2
|
- transformers >=0.2
|
||||||
|
|||||||
@ -14,7 +14,6 @@ import System.Console.CmdArgs.Explicit as C
|
|||||||
|
|
||||||
import Hledger
|
import Hledger
|
||||||
import Hledger.Cli.CliOptions
|
import Hledger.Cli.CliOptions
|
||||||
import Hledger.Cli.Utils (hereFileRelative)
|
|
||||||
|
|
||||||
closemode = hledgerCommandMode
|
closemode = hledgerCommandMode
|
||||||
$(hereFileRelative "Hledger/Cli/Commands/Close.md")
|
$(hereFileRelative "Hledger/Cli/Commands/Close.md")
|
||||||
|
|||||||
@ -24,57 +24,56 @@ import Prelude ()
|
|||||||
import "base-compat-batteries" Prelude.Compat
|
import "base-compat-batteries" Prelude.Compat
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import qualified Data.ByteString.Char8 as BC
|
import qualified Data.ByteString.Char8 as BC
|
||||||
import Data.FileEmbed
|
|
||||||
import Data.String
|
import Data.String
|
||||||
import System.IO
|
import System.IO
|
||||||
import System.IO.Temp
|
import System.IO.Temp
|
||||||
import System.Process
|
import System.Process
|
||||||
|
|
||||||
import Hledger.Utils (first3, second3, third3)
|
import Hledger.Utils (first3, second3, third3, embedFileRelative)
|
||||||
|
|
||||||
type Topic = String
|
type Topic = String
|
||||||
|
|
||||||
docFiles :: [(Topic, (ByteString, ByteString, ByteString))]
|
docFiles :: [(Topic, (ByteString, ByteString, ByteString))]
|
||||||
docFiles = [
|
docFiles = [
|
||||||
("hledger",
|
("hledger",
|
||||||
($(makeRelativeToProject "embeddedfiles/hledger.1" >>= embedFile)
|
($(embedFileRelative "embeddedfiles/hledger.1")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger.txt" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger.txt")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger.info" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger.info")
|
||||||
))
|
))
|
||||||
,("hledger-ui",
|
,("hledger-ui",
|
||||||
($(makeRelativeToProject "embeddedfiles/hledger-ui.1" >>= embedFile)
|
($(embedFileRelative "embeddedfiles/hledger-ui.1")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger-ui.txt" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger-ui.txt")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger-ui.info" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger-ui.info")
|
||||||
))
|
))
|
||||||
,("hledger-web",
|
,("hledger-web",
|
||||||
($(makeRelativeToProject "embeddedfiles/hledger-web.1" >>= embedFile)
|
($(embedFileRelative "embeddedfiles/hledger-web.1")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger-web.txt" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger-web.txt")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger-web.info" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger-web.info")
|
||||||
))
|
))
|
||||||
,("hledger-api",
|
,("hledger-api",
|
||||||
($(makeRelativeToProject "embeddedfiles/hledger-api.1" >>= embedFile)
|
($(embedFileRelative "embeddedfiles/hledger-api.1")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger-api.txt" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger-api.txt")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger-api.info" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger-api.info")
|
||||||
))
|
))
|
||||||
,("journal",
|
,("journal",
|
||||||
($(makeRelativeToProject "embeddedfiles/hledger_journal.5" >>= embedFile)
|
($(embedFileRelative "embeddedfiles/hledger_journal.5")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger_journal.txt" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger_journal.txt")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger_journal.info" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger_journal.info")
|
||||||
))
|
))
|
||||||
,("csv",
|
,("csv",
|
||||||
($(makeRelativeToProject "embeddedfiles/hledger_csv.5" >>= embedFile)
|
($(embedFileRelative "embeddedfiles/hledger_csv.5")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger_csv.txt" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger_csv.txt")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger_csv.info" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger_csv.info")
|
||||||
))
|
))
|
||||||
,("timeclock",
|
,("timeclock",
|
||||||
($(makeRelativeToProject "embeddedfiles/hledger_timeclock.5" >>= embedFile)
|
($(embedFileRelative "embeddedfiles/hledger_timeclock.5")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.txt" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger_timeclock.txt")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.info" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger_timeclock.info")
|
||||||
))
|
))
|
||||||
,("timedot",
|
,("timedot",
|
||||||
($(makeRelativeToProject "embeddedfiles/hledger_timedot.5" >>= embedFile)
|
($(embedFileRelative "embeddedfiles/hledger_timedot.5")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger_timedot.txt" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger_timedot.txt")
|
||||||
,$(makeRelativeToProject "embeddedfiles/hledger_timedot.info" >>= embedFile)
|
,$(embedFileRelative "embeddedfiles/hledger_timedot.info")
|
||||||
))
|
))
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,6 @@ Hledger.Utils.
|
|||||||
|
|
||||||
module Hledger.Cli.Utils
|
module Hledger.Cli.Utils
|
||||||
(
|
(
|
||||||
hereFileRelative,
|
|
||||||
withJournalDo,
|
withJournalDo,
|
||||||
writeOutput,
|
writeOutput,
|
||||||
journalTransform,
|
journalTransform,
|
||||||
@ -32,16 +31,12 @@ import Control.Exception as C
|
|||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
|
||||||
import Data.Hashable (hash)
|
import Data.Hashable (hash)
|
||||||
import Data.FileEmbed (makeRelativeToProject)
|
|
||||||
import Data.List
|
import Data.List
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
import Data.String.Here (hereFile)
|
|
||||||
import Data.Time (Day, addDays)
|
import Data.Time (Day, addDays)
|
||||||
import Data.Word
|
import Data.Word
|
||||||
import Language.Haskell.TH.Quote (QuasiQuoter(..))
|
|
||||||
import Language.Haskell.TH.Syntax (Q, Exp)
|
|
||||||
import Numeric
|
import Numeric
|
||||||
import Safe (readMay)
|
import Safe (readMay)
|
||||||
import System.Console.CmdArgs
|
import System.Console.CmdArgs
|
||||||
@ -63,13 +58,6 @@ import Hledger.Read
|
|||||||
import Hledger.Reports
|
import Hledger.Reports
|
||||||
import Hledger.Utils
|
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
|
-- | 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.
|
-- transformations according to options, and run a hledger command with it.
|
||||||
-- Or, throw an error.
|
-- Or, throw an error.
|
||||||
|
|||||||
@ -4,7 +4,7 @@ cabal-version: 1.12
|
|||||||
--
|
--
|
||||||
-- see: https://github.com/sol/hpack
|
-- see: https://github.com/sol/hpack
|
||||||
--
|
--
|
||||||
-- hash: 2b1a58e0e13c29b497037f556b0bbe5836e1667dc222aafc546683392fd9c211
|
-- hash: f7e09ce5d14e5c6c98b49831e7542ad9c40c969033841ca17e144a06bcda89cb
|
||||||
|
|
||||||
name: hledger
|
name: hledger
|
||||||
version: 1.12.99
|
version: 1.12.99
|
||||||
@ -125,7 +125,6 @@ library
|
|||||||
, data-default >=0.5
|
, data-default >=0.5
|
||||||
, directory
|
, directory
|
||||||
, easytest
|
, easytest
|
||||||
, file-embed >=0.0.10
|
|
||||||
, filepath
|
, filepath
|
||||||
, hashable >=1.2.4
|
, hashable >=1.2.4
|
||||||
, haskeline >=0.6
|
, haskeline >=0.6
|
||||||
@ -145,7 +144,6 @@ library
|
|||||||
, shakespeare >=2.0.2.2
|
, shakespeare >=2.0.2.2
|
||||||
, split >=0.1
|
, split >=0.1
|
||||||
, tabular >=0.2
|
, tabular >=0.2
|
||||||
, template-haskell
|
|
||||||
, temporary
|
, temporary
|
||||||
, text >=0.11
|
, text >=0.11
|
||||||
, time >=1.5
|
, time >=1.5
|
||||||
@ -178,7 +176,6 @@ executable hledger
|
|||||||
, data-default >=0.5
|
, data-default >=0.5
|
||||||
, directory
|
, directory
|
||||||
, easytest
|
, easytest
|
||||||
, file-embed >=0.0.10
|
|
||||||
, filepath
|
, filepath
|
||||||
, haskeline >=0.6
|
, haskeline >=0.6
|
||||||
, here
|
, here
|
||||||
@ -197,7 +194,6 @@ executable hledger
|
|||||||
, shakespeare >=2.0.2.2
|
, shakespeare >=2.0.2.2
|
||||||
, split >=0.1
|
, split >=0.1
|
||||||
, tabular >=0.2
|
, tabular >=0.2
|
||||||
, template-haskell
|
|
||||||
, temporary
|
, temporary
|
||||||
, text >=0.11
|
, text >=0.11
|
||||||
, time >=1.5
|
, time >=1.5
|
||||||
@ -233,7 +229,6 @@ test-suite test
|
|||||||
, data-default >=0.5
|
, data-default >=0.5
|
||||||
, directory
|
, directory
|
||||||
, easytest
|
, easytest
|
||||||
, file-embed >=0.0.10
|
|
||||||
, filepath
|
, filepath
|
||||||
, haskeline >=0.6
|
, haskeline >=0.6
|
||||||
, here
|
, here
|
||||||
@ -252,7 +247,6 @@ test-suite test
|
|||||||
, shakespeare >=2.0.2.2
|
, shakespeare >=2.0.2.2
|
||||||
, split >=0.1
|
, split >=0.1
|
||||||
, tabular >=0.2
|
, tabular >=0.2
|
||||||
, template-haskell
|
|
||||||
, temporary
|
, temporary
|
||||||
, test-framework
|
, test-framework
|
||||||
, test-framework-hunit
|
, test-framework-hunit
|
||||||
@ -288,7 +282,6 @@ benchmark bench
|
|||||||
, data-default >=0.5
|
, data-default >=0.5
|
||||||
, directory
|
, directory
|
||||||
, easytest
|
, easytest
|
||||||
, file-embed >=0.0.10
|
|
||||||
, filepath
|
, filepath
|
||||||
, haskeline >=0.6
|
, haskeline >=0.6
|
||||||
, here
|
, here
|
||||||
@ -308,7 +301,6 @@ benchmark bench
|
|||||||
, shakespeare >=2.0.2.2
|
, shakespeare >=2.0.2.2
|
||||||
, split >=0.1
|
, split >=0.1
|
||||||
, tabular >=0.2
|
, tabular >=0.2
|
||||||
, template-haskell
|
|
||||||
, temporary
|
, temporary
|
||||||
, text >=0.11
|
, text >=0.11
|
||||||
, time >=1.5
|
, time >=1.5
|
||||||
|
|||||||
@ -89,7 +89,6 @@ dependencies:
|
|||||||
- Decimal
|
- Decimal
|
||||||
- directory
|
- directory
|
||||||
- easytest
|
- easytest
|
||||||
- file-embed >=0.0.10
|
|
||||||
- filepath
|
- filepath
|
||||||
- haskeline >=0.6
|
- haskeline >=0.6
|
||||||
- here
|
- here
|
||||||
@ -104,7 +103,6 @@ dependencies:
|
|||||||
- safe >=0.2
|
- safe >=0.2
|
||||||
- shakespeare >=2.0.2.2
|
- shakespeare >=2.0.2.2
|
||||||
- split >=0.1
|
- split >=0.1
|
||||||
- template-haskell
|
|
||||||
- math-functions >=0.2.0.0
|
- math-functions >=0.2.0.0
|
||||||
- tabular >=0.2
|
- tabular >=0.2
|
||||||
- temporary
|
- temporary
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user