From 0866223c2b51cc1eed9b23fe56b1bd2ead9eee54 Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Sat, 12 Jul 2025 23:14:40 +0200 Subject: initial somewhat works --- Toks.hs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Toks.hs (limited to 'Toks.hs') diff --git a/Toks.hs b/Toks.hs new file mode 100644 index 0000000..c8ec567 --- /dev/null +++ b/Toks.hs @@ -0,0 +1,33 @@ +module Toks where + +import Data.Char +import Data.Function +import Data.List + +escape '\\' = "\\\\" +escape '\n' = "\\n" +escape x = pure x + +unescape [] = [] +unescape ('\\':'\\':xs) = '\\' : unescape xs +unescape ('\\':'n':xs) = '\n' : unescape xs +unescape ('\\':_) = error "bad escape?" +unescape (x:xs) = x : unescape xs + +markSpace [] = error "wat" +markSpace s@(c:_) + | isSpace c = '.' : s + | otherwise = '|' : s + +unmarkSpace ('.':s) = s +unmarkSpace ('|':s) = s +unmarkSpace _ = error "wat" + +split = + unlines + . map (concatMap escape . markSpace) + . groupBy ((==) `on` generalCategory) + +glueToks = concatMap (unmarkSpace . unescape) + +glue = glueToks . lines -- cgit v1.2.3