summaryrefslogtreecommitdiff
path: root/src/Text/Hakyll/Internal/FileType.hs
blob: 689c77f0347aa97bf0d8bc0dcb8aad29aefb2230 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
-- | A module dealing with file extensions and associated file types.
module Text.Hakyll.Internal.FileType
    ( FileType (..)
    , getFileType
    , isRenderable
    , isRenderableFile
    ) where

import System.FilePath (takeExtension)

-- | Datatype to represent the different file types Hakyll can deal with.
data FileType = Html
              | LaTeX
              | LiterateHaskellMarkdown
              | Markdown
              | ReStructuredText
              | Text
              | UnknownFileType
              deriving (Eq, Ord, Show, Read)

-- | Get the file type for a certain file. The type is determined by extension.
getFileType :: FilePath -> FileType
getFileType = getFileType' . takeExtension
  where
    getFileType' ".htm"      = Html
    getFileType' ".html"     = Html
    getFileType' ".lhs"      = LiterateHaskellMarkdown
    getFileType' ".markdown" = Markdown
    getFileType' ".md"       = Markdown
    getFileType' ".mdn"      = Markdown
    getFileType' ".mdown"    = Markdown
    getFileType' ".mdwn"     = Markdown
    getFileType' ".mkd"      = Markdown
    getFileType' ".mkdwn"    = Markdown
    getFileType' ".page"     = Markdown
    getFileType' ".rst"      = ReStructuredText
    getFileType' ".tex"      = LaTeX
    getFileType' ".text"     = Text
    getFileType' ".txt"      = Text
    getFileType' _           = UnknownFileType

-- | Check if a certain @FileType@ is renderable.
isRenderable :: FileType -> Bool
isRenderable UnknownFileType = False
isRenderable _               = True

-- | Check if a certain file is renderable.
isRenderableFile :: FilePath -> Bool
isRenderableFile = isRenderable . getFileType