mdoc-0.1.0.0: src/Mdoc/Dump/Main.hs
-- |
--
-- Module : Mdoc.Dump.Main
-- Copyright : (c) 2026 Patrick Brisbin
-- License : AGPL-3
-- Maintainer : pbrisbin@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Mdoc.Dump.Main
( main
)
where
import Mdoc.Prelude
import Mdoc
import Mdoc.Detect
import Mdoc.Dump.Diff
import Mdoc.Dump.Options
import Mdoc.Input
import Mdoc.Parse (exitParseError)
import Mdoc.Pretty (Ann (..), Color (..), putDoc, renderPlain)
import Mdoc.UpdateMdocdate
import Prettyprinter
import System.Exit (exitFailure)
import System.IO (stderr, stdout)
main :: IO ()
main = do
options <- parseOptions
let
color = fromMaybe ColorAuto options.color
postProcess mdoc =
if options.updateMdocdate
then updateMdocdate mdoc
else pure mdoc
forInputs_ options.input $ \input -> do
case input.parsed of
SkipParse reason ->
when options.debug
$ putDoc color stderr
$ annotate AnnFile (pretty input.name)
<> ":"
<+> "refusing to parse"
<+> prettyUnparsable reason
ParseError err -> exitParseError err
Parsed mdoc -> do
mdoc' <- postProcess mdoc
putDoc color stdout $ prettyMdoc mdoc'
-- NB. The --check option operates on mdoc before any --update-mdocdate
-- changes. Unclear what the least surprising behavior is here.
when options.check $ do
let
src = input.source
txt = renderPlain $ prettyMdoc mdoc
diffs = getDifferences src txt
case diffs of
NoDifferences ->
putDoc color stdout $ prettyDifferences input.name diffs
Differences {} -> do
putDoc color stderr $ prettyDifferences input.name diffs
exitFailure