{-| 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 import qualified Language.Haskell.Formatter.Toolkit.ListTool as ListTool 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 = ListTool.dropWhileAtMost Char.isSpace spaceLimit $ content comment spaceLimit = 1