53 lines
1.6 KiB
Haskell
53 lines
1.6 KiB
Haskell
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
|