mirror of
https://code.sup39.dev/repos/Wqawg
synced 2025-01-07 21:16:45 +09:00
121 lines
3.4 KiB
Haskell
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
|