module DatabaseDesign.Ampersand.Misc.Explain
( string2Blocks
, blocks2String
, PandocFormat(..)
)
where
import Text.Pandoc
import Data.List (isPrefixOf)
import DatabaseDesign.Ampersand.Core.ParseTree (PandocFormat(..))
string2Blocks :: PandocFormat -> String -> [Block]
string2Blocks defaultformat str
= case blocks of
[Para is] -> [Plain is]
_ -> blocks
where
Pandoc _ blocks = thePandocParser (removeCRs str')
removeCRs :: String -> String
removeCRs [] = []
removeCRs ('\r' :'\n' : xs) = '\n' : removeCRs xs
removeCRs (c:xs) = c:removeCRs xs
(thePandocParser,str') = whatParser2UseOnWhatString
whatParser2UseOnWhatString :: (String -> Pandoc,String)
whatParser2UseOnWhatString
| markDownPrefix `isPrefixOf` str = (readMarkdown def, drop (length markDownPrefix) str)
| reSTPrefix `isPrefixOf` str = (readRST def, drop (length reSTPrefix) str)
| hTMLPrefix `isPrefixOf` str = (readHtml def, drop (length hTMLPrefix) str)
| laTeXPrefix `isPrefixOf` str = (readLaTeX def, drop (length laTeXPrefix) str)
| otherwise = case defaultformat of
Markdown -> (readMarkdown def, str)
ReST -> (readRST def, str)
HTML -> (readHtml def, str)
LaTeX -> (readLaTeX def, str)
where markDownPrefix = makePrefix Markdown
reSTPrefix = makePrefix ReST
hTMLPrefix = makePrefix HTML
laTeXPrefix = makePrefix LaTeX
makePrefix :: PandocFormat -> String
makePrefix format = ":"++show format++":"
blocks2String :: PandocFormat -> Bool -> [Block] -> String
blocks2String format writeprefix ec
= [c | c<-makePrefix format,writeprefix]
++ ( writer def (Pandoc nullMeta ec))
where writer = case format of
Markdown -> writeMarkdown
ReST -> writeRST
HTML -> writeHtmlString
LaTeX -> writeLaTeX