module WordDef ( WordFullDef(WordFullDef), WordDefHeader(WordDefHeader), WordName(WordName), WordType(WordType), WordSentence(..), renderHeaderList, renderHeader, renderFullDef ) where import Data.Text import Text.Wrap data WordFullDef = WordFullDef WordDefHeader [WordSentence] deriving Show data WordSentence = WordDefSentence String | WordExampleSentence String deriving Show data WordDefHeader = WordDefHeader WordName WordType deriving Show data WordName = WordName String deriving Show data WordType = WordType String deriving Show getNameString :: WordName -> String getNameString (WordName s) = s getTypeString :: WordType -> String getTypeString (WordType s) = s renderFullDef :: WordFullDef -> String renderFullDef (WordFullDef wordDefHeader wordSentenceList) = unpack $ wrapText wrapSettings 70 fullDef where fullDef = pack (renderHeader wordDefHeader ++ "\n\n" ++ renderWordSentenceList wordSentenceList) wrapSettings = WrapSettings True False renderHeader :: WordDefHeader -> String renderHeader (WordDefHeader n t) = (getNameString n) ++ (getTypeString t) renderHeaderList :: [WordDefHeader] -> String renderHeaderList [] = "" renderHeaderList (x:xs) = (renderHeader x) ++ "\n" ++ (renderHeaderList xs) renderWordSentence :: WordSentence -> String renderWordSentence (WordDefSentence s) = s renderWordSentence (WordExampleSentence s) = s renderWordSentenceList :: [WordSentence] -> String renderWordSentenceList [] = [] renderWordSentenceList (x:xs) = renderWordSentence x ++ renderWordSentenceList xs