module MagicHaskeller.ExpToHtml(expSigToString, refer, pprnn, annotateFree) where
import Language.Haskell.TH as TH
import Language.Haskell.TH.PprLib(to_HPJ_Doc)
import Text.PrettyPrint
import Network.URI(escapeURIString, isUnreserved)
import Text.Html(stringToHtmlString)
import MagicHaskeller.LibTH(fromPrelude, fromDataList, fromDataChar, fromDataMaybe, Primitive)
import Data.Char(isAlpha, ord)
import qualified Data.Map
import Data.Generics
expToString :: Exp -> String
-- expToString = ('\n':) . pprint
-- expToString = (\xs -> '(':xs++")
") . {- replaceRightArrow . -} pprint . annotateEverywhere -- simple and stupid
expToString = (\xs -> '(':xs++")
") . filter (/='\n') . {- replaceRightArrow . -} pprint . annotateFree [] -- no buttons
expSigToString predStr sig expr
= mkButton predStr sig expr (pprnn (annotateFree [] expr)) -- with buttons
pprnn = renderStyle style{mode=OneLineMode} . to_HPJ_Doc . pprExp 4
isAbsent :: TH.Exp -> Bool
isAbsent (LamE pats e) = any (==WildP) pats || isAbsent e
isAbsent (VarE name) = nameBase name == "const"
isAbsent _ = False
-- どうも ->をescapeする必要はないみたい.ま,<->みたいな演算子はescapeされているはずだし,みたいなコメントはないはずなので,→で置き換えても害はなさそう.
-- と思ったけど,コピペするのに不便.
replaceRightArrow "" = ""
replaceRightArrow ('-':'>':xs) = "→"++replaceRightArrow xs
replaceRightArrow (x:xs) = x : replaceRightArrow xs
-- Unfortunately, w3m does not understand