{- This file is part of Vervis. - - Written in 2016 by fr33domlover . - - ♡ Copying is an act of love. Please copy, reuse and share. - - The author(s) have dedicated all copyright and related and neighboring - rights to this software to the public domain worldwide. This software is - distributed without any warranty. - - You should have received a copy of the CC0 Public Domain Dedication along - with this software. If not, see - . -} -- | File content types and tools for detecting them. The focus is on content -- that gets special treatment in Vervis, and not general MIME type modeling or -- detection (although that could be done in the future). module Vervis.MediaType ( MediaType (..) , FileName , FileBaseName , FileExtension , WorkType , SourceViewOptions , chooseMediaType ) where import Prelude import Data.Text (Text) data MediaType = PlainText | XML | JSON | YAML | HTML | CSS | Markdown | CSource | CHeader | Haskell | LiterateHaskell | CabalPackageDescription | PersistentTemplate | YesodRouteTemplate | Hamlet | Cassius deriving Show type FileName = Text type FileBaseName = Text type FileExtension = Text type WorkType = () type SourceViewOptions = () chooseMediaType :: [FileName] -> FileBaseName -> FileExtension -> WorkType -- project type -> SourceViewOptions -- e.g. whether to see rendered pages or their sources -> MediaType chooseMediaType dir base ext wt opts = case (dir, base, ext, wt) of -- * Data interchange (_, _, "xml" , _) -> PlainText (_, _, "json" , _) -> PlainText (_, _, "yml" , _) -> PlainText (_, _, "yaml" , _) -> PlainText -- * Documents (_, _, "txt" , _) -> PlainText (_, _, "md" , _) -> Markdown (_, _, "mdwn" , _) -> Markdown (_, _, "mkdn" , _) -> Markdown (_, _, "markdown", _) -> Markdown -- * Web page basics (_, _, "html" , _) -> PlainText (_, _, "xhtml" , _) -> PlainText (_, _, "css" , _) -> PlainText (_, _, "js" , _) -> PlainText -- * Programming languages -- ** C (_, _, "c" , _) -> PlainText (_, _, "h" , _) -> PlainText -- ** C++ (_, _, "cc" , _) -> PlainText (_, _, "cpp" , _) -> PlainText (_, _, "cxx" , _) -> PlainText (_, _, "hh" , _) -> PlainText (_, _, "hpp" , _) -> PlainText -- ** Haskell (_, _, "hs" , _) -> Haskell (_, _, "lhs" , _) -> PlainText (_, _, "cabal" , _) -> PlainText (_, _, "hamlet" , _) -> PlainText (_, _, "cassius" , _) -> PlainText -- ** Java (_, _, "java" , _) -> PlainText -- ** Lisp (_, _, "cl" , _) -> PlainText (_, _, "el" , _) -> PlainText -- ** Lua (_, _, "lua" , _) -> PlainText -- ** Perl (_, _, "pl" , _) -> PlainText -- ** PHP (_, _, "php" , _) -> PlainText -- ** Python (_, _, "py" , _) -> PlainText -- ** Ruby (_, _, "rb" , _) -> PlainText -- ** Scheme (_, _, "scm" , _) -> PlainText (_, _, _ , _) -> PlainText