added headers to files

This commit is contained in:
Macocian Adrian Radu
2022-02-17 23:26:47 +01:00
parent 8743dc0874
commit 50498e53d5
6 changed files with 49 additions and 6 deletions

View File

@@ -11,11 +11,12 @@ import Text.ParserCombinators.ReadP (many1)
headerParser :: Parser Header
headerParser = do
_ <- lexeme $ string "namespace"
name <- namespaceParser
name <- lexeme namespaceParser
_ <- lexeme $ char ':'
desc <- optional descriptionParser
_ <- lexeme $ string "version"
vers <- between (char '\"') (char '\"') (many (letterChar <|> char '.' <|> char '$' <|> digitChar))
imports <- many importParser
vers <- lexeme $ between (string "\"${") (string "}\"") (many (letterChar <|> char '.' <|> char '$' <|> digitChar))
imports <- many $ lexeme importParser
return $ MakeHeader name desc vers imports
importParser :: Parser String

View File

@@ -0,0 +1,36 @@
{-# LANGUAGE OverloadedStrings #-}
module PrettyPrinter.Header where
import Model.Header
import PrettyPrinter.General
import Prettyprinter
import Data.Char
-- |Converts a Header into a haskell valid String
printHeader :: Header -> String
printHeader (MakeHeader name (Just description) _ imports) =
show $ vcat ["module" <+> pretty (convertFirst name) <+> "where",
enclose "{-" "-}" (pretty description),
emptyDoc,
vcat (map printImport imports),
emptyDoc]
printHeader (MakeHeader name Nothing _ imports) =
show $ vcat ["module" <+> pretty (convertFirst name) <+> "where",
emptyDoc,
vcat (map printImport imports),
emptyDoc]
-- |Converts an import name into an import prettyprinter doc
printImport :: String -> Doc a
printImport name = "import" <+> pretty name
convertName :: String -> String
convertName [] = []
convertName (c:cs)
| c == '.' = c : convertFirst cs
| otherwise = c : convertName cs
convertFirst :: String -> String
convertFirst [] = []
convertFirst (c:cs) = toUpper c : convertName cs