git-fmt-0.1.0.0: src/Git/Fmt/Language.hs
{-|
Module : Git.Fmt.Language
Description : Utilities for working with a general language.
Copyright : (c) Henry J. Wylde, 2015
License : BSD3
Maintainer : public@hjwylde.com
Utilities for working with a general language.
-}
module Git.Fmt.Language (
-- * Languages
Language(..),
languages, languageOf, extension, parser, renderWithTabs,
) where
import Git.Fmt.Language.Json.Parser as Json
import Git.Fmt.Language.Json.Pretty ()
import Text.Parsec.String
import Text.PrettyPrint.HughesPJClass
-- | Supported languages.
data Language = Json
deriving (Eq, Ord, Show)
-- | Array of supported languages.
languages :: [Language]
languages = [Json]
-- | Gets the language of an extension.
languageOf :: String -> Maybe Language
languageOf ext
| ext `elem` [".json"] = Just Json
| otherwise = Nothing
-- | Gets the default extension of a language.
extension :: Language -> String
extension Json = "json"
-- | Gets the parser for a language.
parser :: Language -> Parser Doc
parser Json = pPrint <$> Json.topLevelValue
-- | Renders the document using the default "style" and replaces any prefixed spaces with tabs.
renderWithTabs :: Doc -> String
renderWithTabs doc = unlines $ map withTabs (lines $ render doc)
where
withTabs (' ':xs) = '\t':withTabs xs
withTabs line = line