marxup-3.1.0.0: Main.hs
import Text.ParserCombinators.Parsek.Position
import System.Environment
import Data.Monoid
import Data.DList hiding (foldr, map)
import MarXupParser
import qualified Literate as Lit
import Output
rHaskells :: [Haskell] -> Doc
rHaskells xs = mconcat $ map rHaskell xs
rHaskell :: Haskell -> DList Char
rHaskell (HaskChunk s) = text s
rHaskell (HaskLn pos) = oPos pos
rHaskell (Quote xs) = parens $ oConcat $ map rMarxup xs
rHaskell (List xs) = brackets $ rHaskells xs
rHaskell (Parens xs) = parens $ rHaskells xs
rHaskell (String xs) = doubleQuotes $ text xs
rArg :: (SourcePos, Haskell) -> Doc
rArg (pos,h) = oPos pos <> parens (rHaskell h)
rMarxup :: MarXup -> Doc
rMarxup (TextChunk s) = oText s
rMarxup (Unquote var val) =
maybe mempty (\(pos,x) -> oPos pos <> text (x <> "<-")) var <>
text "element" <+> parens (hcat $ map rArg val)
rMarxup (Comment _) = mempty
main :: IO ()
main = do
x : y : z : _ <- getArgs
parseFile y $ \res -> writeFile z $ render (rHaskells res <> Lit.rHaskells res)