> module Para
>        (para)
>        where

> import Data.String.Utils

> import Delimiters

-- nlm1 = '♣' -- black club suit
-- nlm2 = '♠' -- black spade suit
-- nlm3 = '♥' -- black heart suit
-- nlm4 = '♡' -- white heart suit

> fixpre :: [Char] -> [Char]
> fixpre = replace "<pre>\n" "<pre>"

> fixline :: [Char] -> [Char]
> fixline line | (take 3 line) == "<p>" = line ++ "</p>"
>              | (head line)   /= '<'   = line ++ "</p>"
>              |  otherwise            = line

> fixlast :: String -> String
> fixlast s = unlines (
>                     (init (lines s)) ++
>                        [fixline (last (lines s))]
>                     )

> dropnls :: [Char] -> [Char]
> dropnls = reverse . dropWhile (=='\n') . reverse

> para :: [Char] -> [Char]
> para = fixpre                                   .
>        fixlast                                  .
>        (replace [nlm4]     "</p>\n\n"         ) .
>        (replace [nlm3]     "</p>\n\n<p>"      ) .
>        (replace [nlm2]     ">\n\n<p>"         ) .
>        (replace [nlm1]     ">\n\n<"           ) .
>        (replace "\n\n"     [nlm3]             ) .
>        (replace "\n\n<"    ([nlm4] ++ "<")    ) .
>        (replace ">\n\n"    [nlm2]             ) .
>        (replace ">\n\n<"   [nlm1]             ) .
>        (replace "/a>\n\n"  ("/a>"  ++ [nlm3]) ) .
>        (replace "\n\n\n"   "\n\n"             ) .
>        (replace "\n\n\n\n" "\n\n"             ) .
>        dropnls

