mirror of
https://github.com/macocianradu/RosettaHaskellCompiler.git
synced 2026-03-18 21:10:07 +00:00
added headers to files
This commit is contained in:
@@ -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
|
||||
|
||||
36
src/PrettyPrinter/Header.hs
Normal file
36
src/PrettyPrinter/Header.hs
Normal 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
|
||||
Reference in New Issue
Block a user