@@ -8,6 +8,7 @@ import Data.Char (isAlpha,isDigit)
8import Data.List (intercalate,sortBy,inits)
8import Data.List (intercalate,sortBy,inits)
9import Data.Map (toList)
9import Data.Map (toList)
10import Data.Maybe (mapMaybe)
10import Data.Maybe (mapMaybe)
11+import qualified Text.Pandoc as Pan
12import Initialize
13import Initialize
13import Rename (derename)
14import Rename (derename)
@@ -141,6 +142,10 @@ toJS' expr =
141 Let defs e -> jsLet defs e
142 Let defs e -> jsLet defs e
142 Case e cases -> caseToJS e cases
143 Case e cases -> caseToJS e cases
143 Data name es -> (\ss -> jsList $ show name : ss) `liftM` mapM toJS' es
144 Data name es -> (\ss -> jsList $ show name : ss) `liftM` mapM toJS' es
146+ return $ concat [ "text('<div style=\"height:0;width:0;\"> </div>"
147+ , filter (/='\n') $ Pan.writeHtmlString Pan.defaultWriterOptions doc
148+ , "<div style=\"height:0;width:0;\"> </div>')" ]
145jsLet defs e' = do
150jsLet defs e' = do
146 body <- (++) `liftM` jsDefs defs `ap` (ret `liftM` toJS' e')
151 body <- (++) `liftM` jsDefs defs `ap` (ret `liftM` toJS' e')
@@ -156,7 +161,7 @@ jsDefs defs = concat `liftM` mapM toDef (sortBy f defs)
157caseToJS e ps = do
162caseToJS e ps = do
158 match <- caseToMatch ps
163 match <- caseToMatch ps
159− var <- liftM (\n -> "vv" ++ show n) guid
164+ var <- liftM (\n -> "case" ++ show n) guid
160 matches <- matchToJS var match
165 matches <- matchToJS var match
161 e' <- toJS' e
166 e' <- toJS' e
162 return $ concat [ "function(", var, "){"
167 return $ concat [ "function(", var, "){"
@@ -176,9 +181,12 @@ matchToJS v (Seq ms) = concat `liftM` mapM (matchToJS v) ms
176clauseToJS var (Clause name vars e) = do
181clauseToJS var (Clause name vars e) = do
177 s <- matchToJS var e
182 s <- matchToJS var e
178 return $ concat [ "\ncase ", show name, ":"
183 return $ concat [ "\ncase ", show name, ":"
179− , concat $ zipWith toDef vars [ 1 .. length vars ]
184+ , defs
181− where toDef v n = assign v (var ++ "[" ++ show n ++ "]")
186+ where toDef v n = v ++ "=" ++ var ++ "[" ++ show n ++ "]"
187+ defs = case vars of [] -> ""
188+ _ -> ("\nvar "++) . (++";") . intercalate "," $
189+ zipWith toDef vars [ 1 .. length vars ]
183jsNil = "[\"Nil\"]"
191jsNil = "[\"Nil\"]"
184jsCons e1 e2 = jsList [ show "Cons", e1, e2 ]
192jsCons e1 e2 = jsList [ show "Cons", e1, e2 ]