#!/usr/bin/env -S runhaskell --ghc-arg="-Wall" --ghc-arg="-i lib"

import Data.Char (isUpper, isLower)
import System.Environment (getArgs)
import System.Script (syntax)
import Text.Filter (xargs)

linearize :: String -> String
linearize "" = ""
linearize ('¬':'\n':s) = linearize s
linearize ('\n':'\n':s) = "\n\n" ++ linearize s
linearize ('.':'\n':c0:c1:c2:s)
  | isUpper c0 && isLower c1 && isLower c2 = ".\n\n" ++ c0:c1:c2:linearize s
linearize ('.':'\n':'—':s) = ".\n\n—" ++ linearize s
linearize ('\n':s) = ' ' : linearize s
linearize ('-':'\n':c:s)
  | isUpper c = '-' : c : linearize s
linearize (c:s) = c : linearize s

main :: IO ()
main = getArgs >>= cli
  where
    cli [target] = xargs (pure.linearize) target
    cli _ = syntax "TARGET_DIR"