From 6c057015cd3b649eee365d04fe3de2f29d7abb2c Mon Sep 17 00:00:00 2001
From: Alice BRENON <alice.brenon@ens-lyon.fr>
Date: Thu, 7 Sep 2023 18:47:28 +0200
Subject: [PATCH] Take linearize out into a module for reuse

---
 lib/Text/Filter/Linearize.hs | 16 ++++++++++++++++
 scripts/linearize.hs         | 19 ++++---------------
 2 files changed, 20 insertions(+), 15 deletions(-)
 create mode 100644 lib/Text/Filter/Linearize.hs

diff --git a/lib/Text/Filter/Linearize.hs b/lib/Text/Filter/Linearize.hs
new file mode 100644
index 0000000..3f0c40d
--- /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 f5501a2..c0b029f 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"
-- 
GitLab