{-|
Description : Facade for HSE without location handling

See also "Language.Haskell.Formatter.Location".
-}
module Language.Haskell.Formatter.Source
       (Comments.Comment, ExactPrint.exactPrint, Exts.parseFileContents,
        Exts.parseFileContentsWithComments, Parser.defaultParseMode,
        Parser.parseFilename, Parser.ParseResult(..),
        module Language.Haskell.Exts.Pretty, (Syntax.=~=), Syntax.Module,
        createComment, commentCore)
       where
import qualified Language.Haskell.Exts as Exts
import qualified Language.Haskell.Exts.Comments as Comments
import qualified Language.Haskell.Exts.ExactPrint as ExactPrint
import qualified Language.Haskell.Exts.Parser as Parser
import Language.Haskell.Exts.Pretty
import qualified Language.Haskell.Exts.Syntax as Syntax
import qualified Language.Haskell.Formatter.CommentCore as CommentCore
import qualified Language.Haskell.Formatter.Location as Location

createComment :: CommentCore.CommentCore -> Location.SrcSpan -> Comments.Comment
createComment core portion = Comments.Comment isMultiLine portion content
  where isMultiLine
          = case CommentCore.kind core of
                CommentCore.Ordinary -> False
                CommentCore.Nested -> True
        content = CommentCore.content core

commentCore :: Comments.Comment -> CommentCore.CommentCore
commentCore comment = CommentCore.create kind content
  where kind = commentKind comment
        content = commentContent comment

commentKind :: Comments.Comment -> CommentCore.Kind
commentKind (Comments.Comment False _ _) = CommentCore.Ordinary
commentKind (Comments.Comment True _ _) = CommentCore.Nested

commentContent :: Comments.Comment -> String
commentContent (Comments.Comment _ _ content) = content