diff --git a/lib/Text/Filter/Linearize.hs b/lib/Text/Filter/Linearize.hs new file mode 100644 index 0000000000000000000000000000000000000000..3f0c40d37dc49a28485cb78b62788091dcfccf74 --- /dev/null +++ b/lib/Text/Filter/Linearize.hs @@ -0,0 +1,16 @@ +module Text.Filter.Linearize + ( linearize ) where + +import Data.Char (isUpper, isLower) + +linearize :: Bool -> String -> String +linearize _ "" = "" +linearize b ('¬':'\n':s) = linearize b s +linearize b ('\n':'\n':s) = "\n\n" ++ linearize b s +linearize True ('.':'\n':c0:c1:c2:s) + | isUpper c0 && isLower c1 && isLower c2 = ".\n\n" ++ c0:c1:c2:linearize True s +linearize b ('.':'\n':'—':s) = ".\n\n—" ++ linearize b s +linearize b ('\n':s) = ' ' : linearize b s +linearize b ('-':'\n':c:s) + | isUpper c = '-' : c : linearize b s +linearize b (c:s) = c : linearize b s diff --git a/scripts/linearize.hs b/scripts/linearize.hs index f5501a2cce365cebb3c8089edc54e339abd6f144..c0b029fe0aefdaed71991f2190b86f3c90a0931a 100755 --- a/scripts/linearize.hs +++ b/scripts/linearize.hs @@ -1,24 +1,13 @@ #!/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 +import Text.Filter.Linearize (linearize) main :: IO () main = getArgs >>= cli where - cli [target] = xargs (pure.linearize) target - cli _ = syntax "TARGET_DIR" + cli [inferParagraphs, target] = + xargs (pure.linearize (inferParagraphs == "Y")) target + cli _ = syntax "[Y|N] TARGET_DIR"