src/Development/Shake/Language/C/Language.hs

-- Copyright 2012-2014 Samplecount S.L.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0 
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

{-# LANGUAGE TemplateHaskell #-}

module Development.Shake.Language.C.Language (
 Language(..)
 , defaultLanguageMap
 , languageOf
) where

import Development.Shake.FilePath (takeExtension)

-- | Source language.
--
-- Currently something derived from @C@.
data Language =
 C -- ^ Plain old C
 | Cpp -- ^ C++
 | ObjC -- ^ Objective-C
 | ObjCpp -- ^ Objective-C with C++ (Apple extension)
 deriving (Enum, Eq, Show)

-- | Default mapping from file extension to source language.
defaultLanguageMap :: [(String, Language)]
defaultLanguageMap = concatMap f [
 (C, [".c"])
 , (Cpp, [".cc", ".CC", ".cpp", ".CPP", ".C", ".cxx", ".CXX"])
 , (ObjC, [".m"])
 , (ObjCpp, [".mm", ".M"])
 ]
 where f (lang, exts) = map (\ext -> (ext, lang)) exts

-- | Determine the source language of a file based on its extension.
languageOf :: FilePath -> Maybe Language
languageOf = flip lookup defaultLanguageMap . takeExtension

AltStyle によって変換されたページ (->オリジナル) /