packages feed

zeroth-2009.6.23: Language/Haskell/TH/ZeroTH/Comments.hs

module Language.Haskell.TH.ZeroTH.Comments where

type Location = (Int, Int)

type Comment = (Location,String)

mixComments :: [Comment] -> [(Location,String)] -> [String]
mixComments c [] = map (showComment.lines.snd) c
mixComments [] i = map snd i
mixComments c@(((cl, _),cc):cs) i@(((il, _),ic):is)
    | cl <= il = showComment (lines cc):mixComments cs i
    | otherwise = ic:mixComments c is

showComment :: [String] -> String
showComment [x] = '-':'-':' ':x
showComment c = "{- " ++ unlines c ++ " -}"

-- FIXME!
parseComments :: String -> [Comment]
parseComments input = parseComments' (lines input) 1

parseComments' :: [String] -> Int -> [Comment]
parseComments' [] _ = []
parseComments' (('-':'-':c):xs) l = ((l, 1), c):parseComments' xs (l+1)
parseComments' (_:xs) l = parseComments' xs (l+1)