aboutsummaryrefslogtreecommitdiff
path: root/bbcode
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2015-10-18 00:12:55 +0200
committerGregor Kleen <gkleen@yggdrasil.li>2015-10-18 00:12:55 +0200
commit6db9326c348f54cd25f399ad1e472b20cb7771c0 (patch)
treeb1d860091f914b0be92377d85c157b203189ae10 /bbcode
parente65e1eaac335a4738abb9e8ee8da7a229f96c2c0 (diff)
downloadthermoprint-6db9326c348f54cd25f399ad1e472b20cb7771c0.tar
thermoprint-6db9326c348f54cd25f399ad1e472b20cb7771c0.tar.gz
thermoprint-6db9326c348f54cd25f399ad1e472b20cb7771c0.tar.bz2
thermoprint-6db9326c348f54cd25f399ad1e472b20cb7771c0.tar.xz
thermoprint-6db9326c348f54cd25f399ad1e472b20cb7771c0.zip
Added massaging to make sure blocks are not followed by extraneous whitespace
Diffstat (limited to 'bbcode')
-rw-r--r--bbcode/src/BBCode.hs15
1 files changed, 14 insertions, 1 deletions
diff --git a/bbcode/src/BBCode.hs b/bbcode/src/BBCode.hs
index 3071db6..118aed7 100644
--- a/bbcode/src/BBCode.hs
+++ b/bbcode/src/BBCode.hs
@@ -55,7 +55,20 @@ make' (Cooked c) = c
55make' (Raw _) = error "Cannot transform block containing raw data to bbcode" 55make' (Raw _) = error "Cannot transform block containing raw data to bbcode"
56 56
57parse :: String -> Either String (Block String) 57parse :: String -> Either String (Block String)
58parse input = (remerge . blockify <$> (tokenize input >>= treeify)) >>= semantics 58parse input = (remerge . massage . blockify <$> (tokenize input >>= treeify)) >>= semantics
59
60massage :: [Decorated String] -> [Decorated String]
61massage [] = []
62massage (x@(Decorated _ tags) : x'@(Decorated wSpace []) : xs)
63 | any $ map isSpace wSpace
64 , any $ map isBlock tags = (x:Decorated (massage' wSpace) []:xs)
65 | otherwise = x : massage (x':xs)
66 where
67 massage' [] = []
68 massage' l@(x:xs)
69 | isSpace x = massage' xs
70 | otherwise = l
71massage (x:xs) = x : massage xs
59 72
60blockify :: ContentForest -> [Decorated String] 73blockify :: ContentForest -> [Decorated String]
61blockify = map sortDeco . concat . map (blockify' []) 74blockify = map sortDeco . concat . map (blockify' [])