packages feed

document-build-0.2.0.0: src/Document/Build.hs

{-# OPTIONS_GHC -Wall #-}

{- | Build documents: convert them between formats, get information about
them, and replace strings in them.

The library has four layers:

1. "System.FilePather" (the @filepather@ package): 'FilePather', a
   computation that depends on the file path being operated on, and
   'Tracked', named build steps that record the files they make, so that a
   chain of steps that would go round in a cycle is stopped.
2. "Document.Build.Operations": the canonical document operations, every one
   a 'FilePather' value, such as 'pdfPages', 'markdownToPdf' and 'sha256'.
3. "Document.Build.Context", "Document.Build.Rules" and
   "Document.Build.Documents": the rules that wrap the operations in named
   steps, each with its settings as arguments, the combinators that choose
   the files rules apply to, and 'build', which runs rules over a project.
4. The build file of each project, a cabal script, which gives 'build' the
   directories of the project and its rules:

@
import Document.Build

main :: IO ()
main =
  'build'
    ('Directories' "public" ["src"] Nothing)
    ( 'prepareRules' ["md"] 'filePlaceholders' "src"
        <> 'markdownRules' (flip replaceExtension) [("pdf", pure ["--standalone"])]
        <> 'pageOneRules' (\p -> dropExtension p <> "-1.pdf") (\`replaceExtension\` "png")
    )
@

Every data type has a name for each of its fields and constructors: a class
whose method is an optic (see the modules under "Document.Build.Name" and
"System.FilePather.Name"). Read a field with
@'Control.Lens.view' ('Control.Lens.cloneLens' n)@, and a constructor with
'Control.Lens.preview' and 'Control.Lens.review'.

This module also exports the class method 'cycle', the name of 'Cycle', which
has the same name as 'Prelude.cycle'.
-}
module Document.Build (
  module Document.Build.Build,
  module Document.Build.CommandLine,
  module Document.Build.Context,
  module Document.Build.Directories,
  module Document.Build.Documents,
  module Document.Build.Error,
  module Document.Build.Error.FileTypeUnsupported,
  module Document.Build.Error.InputFilesTooFew,
  module Document.Build.Error.OutputFileMissing,
  module Document.Build.Error.OutputNotInDirectory,
  module Document.Build.Error.ProcessFailed,
  module Document.Build.Error.ProcessOutputUnrecognised,
  module Document.Build.Error.StringsMissing,
  module Document.Build.GitDetails,
  module Document.Build.ImageInfo,
  module Document.Build.Name.CommandLineArguments,
  module Document.Build.Name.CommandLineProgram,
  module Document.Build.Name.ContextProject,
  module Document.Build.Name.Directory,
  module Document.Build.Name.ExpectedOutput,
  module Document.Build.Name.FileNotInGit,
  module Document.Build.Name.FileNotUtf8,
  module Document.Build.Name.FontsDirectory,
  module Document.Build.Name.GitAuthorEmail,
  module Document.Build.Name.GitAuthorName,
  module Document.Build.Name.GitAuthorTime,
  module Document.Build.Name.GitAuthors,
  module Document.Build.Name.GitCommitHash,
  module Document.Build.Name.GitCommitHashShort,
  module Document.Build.Name.GitCommitTime,
  module Document.Build.Name.GitCommitterEmail,
  module Document.Build.Name.GitCommitterName,
  module Document.Build.Name.GitSubject,
  module Document.Build.Name.ImageColourspace,
  module Document.Build.Name.ImageDepth,
  module Document.Build.Name.ImageFormat,
  module Document.Build.Name.ImageFrames,
  module Document.Build.Name.ImageHeight,
  module Document.Build.Name.ImageResolutionUnits,
  module Document.Build.Name.ImageResolutionX,
  module Document.Build.Name.ImageResolutionY,
  module Document.Build.Name.ImageWidth,
  module Document.Build.Name.InputDirectories,
  module Document.Build.Name.InputFileCount,
  module Document.Build.Name.InputFileMissing,
  module Document.Build.Name.InputFilesNeeded,
  module Document.Build.Name.MissingStrings,
  module Document.Build.Name.OutputDirectory,
  module Document.Build.Name.OutputGitDetails,
  module Document.Build.Name.OutputImageInfo,
  module Document.Build.Name.OutputPages,
  module Document.Build.Name.OutputPath,
  module Document.Build.Name.OutputSha256,
  module Document.Build.Name.ShallowRepository,
  module Document.Build.Name.StandardError,
  module Document.Build.Name.StandardOutput,
  module Document.Build.Name.SupportedExtensions,
  module Document.Build.Name.TargetComplete,
  module Document.Build.Name.TargetDirectory,
  module Document.Build.Name.TargetFile,
  module Document.Build.Operations,
  module Document.Build.Output,
  module Document.Build.OutputFile,
  module Document.Build.Project,
  module Document.Build.Rules,
  module Document.Build.Target,
  module System.FilePather,
) where

import Document.Build.Build
import Document.Build.CommandLine
import Document.Build.Context
import Document.Build.Directories
import Document.Build.Documents
import Document.Build.Error
import Document.Build.Error.FileTypeUnsupported
import Document.Build.Error.InputFilesTooFew
import Document.Build.Error.OutputFileMissing
import Document.Build.Error.OutputNotInDirectory
import Document.Build.Error.ProcessFailed
import Document.Build.Error.ProcessOutputUnrecognised
import Document.Build.Error.StringsMissing
import Document.Build.GitDetails
import Document.Build.ImageInfo
import Document.Build.Name.CommandLineArguments
import Document.Build.Name.CommandLineProgram
import Document.Build.Name.ContextProject
import Document.Build.Name.Directory
import Document.Build.Name.ExpectedOutput
import Document.Build.Name.FileNotInGit
import Document.Build.Name.FileNotUtf8
import Document.Build.Name.FontsDirectory
import Document.Build.Name.GitAuthorEmail
import Document.Build.Name.GitAuthorName
import Document.Build.Name.GitAuthorTime
import Document.Build.Name.GitAuthors
import Document.Build.Name.GitCommitHash
import Document.Build.Name.GitCommitHashShort
import Document.Build.Name.GitCommitTime
import Document.Build.Name.GitCommitterEmail
import Document.Build.Name.GitCommitterName
import Document.Build.Name.GitSubject
import Document.Build.Name.ImageColourspace
import Document.Build.Name.ImageDepth
import Document.Build.Name.ImageFormat
import Document.Build.Name.ImageFrames
import Document.Build.Name.ImageHeight
import Document.Build.Name.ImageResolutionUnits
import Document.Build.Name.ImageResolutionX
import Document.Build.Name.ImageResolutionY
import Document.Build.Name.ImageWidth
import Document.Build.Name.InputDirectories
import Document.Build.Name.InputFileCount
import Document.Build.Name.InputFileMissing
import Document.Build.Name.InputFilesNeeded
import Document.Build.Name.MissingStrings
import Document.Build.Name.OutputDirectory
import Document.Build.Name.OutputGitDetails
import Document.Build.Name.OutputImageInfo
import Document.Build.Name.OutputPages
import Document.Build.Name.OutputPath
import Document.Build.Name.OutputSha256
import Document.Build.Name.ShallowRepository
import Document.Build.Name.StandardError
import Document.Build.Name.StandardOutput
import Document.Build.Name.SupportedExtensions
import Document.Build.Name.TargetComplete
import Document.Build.Name.TargetDirectory
import Document.Build.Name.TargetFile
import Document.Build.Operations
import Document.Build.Output
import Document.Build.OutputFile
import Document.Build.Project
import Document.Build.Rules
import Document.Build.Target
import System.FilePather
import Prelude hiding (cycle)