{-| Description : Comments without location -} module Language.Haskell.Formatter.CommentCore (CommentCore, kind, content, Kind(..), DocumentationDisplacement(..), create, wrappedLineCount, documentationDisplacement) where import qualified Data.Char as Char import qualified Data.Monoid as Monoid import qualified Language.Haskell.Formatter.Internal.Newline as Newline data CommentCore = CommentCore{kind :: Kind, content :: String} deriving (Eq, Ord) data Kind = Ordinary | Nested deriving (Eq, Ord, Show) data DocumentationDisplacement = BeforeActualCode | AfterActualCode | None deriving (Eq, Ord, Show) instance Show CommentCore where show comment = case kind comment of Ordinary -> Monoid.mappend "--" rawContent Nested -> concat ["{-", rawContent, "-}"] where rawContent = content comment create :: Kind -> String -> CommentCore create rawKind rawContent = CommentCore{kind = rawKind, content = rawContent} wrappedLineCount :: CommentCore -> Int wrappedLineCount = length . Newline.splitSeparatedLines . show documentationDisplacement :: CommentCore -> DocumentationDisplacement documentationDisplacement comment = case unwrappedContent of ('|' : _) -> BeforeActualCode ('^' : _) -> AfterActualCode _ -> None where unwrappedContent = Monoid.mappend (dropWhile Char.isSpace deformable) rigid (deformable, rigid) = splitAt spaceLimit $ content comment spaceLimit = 1