on master help sign in
Merge pull request #2660 from melted/html
bad3dd6Niklas Larsson
src/IRTS/CodegenJavaScript.hs+14−6
@@ -27,6 +27,7 @@ import Data.Word
27import Data.Traversable hiding (mapM)
27import Data.Traversable hiding (mapM)
28import System.IO
28import System.IO
29import System.Directory
29import System.Directory
30+import System.FilePath
30
31
31import qualified Data.Map.Strict as M
32import qualified Data.Map.Strict as M
32import qualified Data.Text as T
33import qualified Data.Text as T
@@ -113,6 +114,10 @@ codegenJS_all target definitions includes libs filename outputType = do
113 let js = concatMap (translateDecl info) bytecode
114 let js = concatMap (translateDecl info) bytecode
114 let full = concatMap processFunction js
115 let full = concatMap processFunction js
115 let code = deadCodeElim full
116 let code = deadCodeElim full
117+ let ext = takeExtension filename
118+ let isHtml = target == JavaScript && ext == ".html"
119+ let htmlPrologue = T.pack "<!doctype html><html><head><script>\n"
120+ let htmlEpilogue = T.pack "\n</script></head><body></body></html>"
116 let (cons, opt) = optimizeConstructors code
121 let (cons, opt) = optimizeConstructors code
117 let (header, rt) = case target of
122 let (header, rt) = case target of
118 Node -> ("#!/usr/bin/env node\n", "-node")
123 Node -> ("#!/usr/bin/env node\n", "-node")
@@ -132,12 +137,15 @@ codegenJS_all target definitions includes libs filename outputType = do
132 ++ idrRuntime
137 ++ idrRuntime
133 ++ tgtRuntime
138 ++ tgtRuntime
134 )
139 )
135− writeSourceText filename ( T.pack runtime
140+ let jsSource = T.pack runtime
136− `T.append` T.concat (map compileJS opt)
141+ `T.append` T.concat (map compileJS opt)
137− `T.append` T.concat (map compileJS cons)
142+ `T.append` T.concat (map compileJS cons)
138− `T.append` main
143+ `T.append` main
139− `T.append` invokeMain
144+ `T.append` invokeMain
140− )
145+ let source = if isHtml
146+ then htmlPrologue `T.append` jsSource `T.append` htmlEpilogue
147+ else jsSource
148+ writeSourceText filename source
141 setPermissions filename (emptyPermissions { readable = True
149 setPermissions filename (emptyPermissions { readable = True
142 , executable = target == Node
150 , executable = target == Node
143 , writable = True
151 , writable = True