1
0
Fork 0
mirror of https://code.sup39.dev/repos/Wqawg synced 2025-01-07 20:06:45 +09:00
vervis/src/Vervis/MediaType.hs

121 lines
3.4 KiB
Haskell

{- This file is part of Vervis.
-
- Written in 2016 by fr33domlover <fr33domlover@riseup.net>.
-
- ♡ 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
- <http://creativecommons.org/publicdomain/zero/1.0/>.
-}
-- | 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