packages feed

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)