on master help sign in
Idris-dev/src/IRTS/CodegenJavaScript.hs
78 lines 2.3 kB history raw
1{-|
2Module : IRTS.CodegenJavaScript
3Description : The JavaScript code generator.
5License : BSD3
6Maintainer : The Idris Community.
7-}
8{-# LANGUAGE OverloadedStrings, PatternGuards #-}
9module IRTS.CodegenJavaScript (codegenJavaScript
10 , codegenNode
11 , JSTarget(..)
12 ) where
14import Data.Char
15import Data.Text (Text)
16import qualified Data.Text as T
17import IRTS.CodegenCommon
18import IRTS.JavaScript.Codegen
19import System.Directory
20import System.FilePath
23data JSTarget = Node | JavaScript deriving Eq
26htmlHeader :: Text
27htmlHeader =
28 T.concat [ "<html>\n"
29 , " <head>\n"
30 , " <meta charset='utf-8'>\n"
31 , " </head>\n"
32 , " <body>\n"
33 , " <script type='text/javascript'>\n"
34 ]
36htmlFooter :: Text
37htmlFooter =
38 T.concat [ "\n </script>\n"
39 , " </body>\n"
40 , "</html>"
41 ]
43codegenJavaScript :: CodeGenerator
44codegenJavaScript ci =
45 let (h, f) = if (map toLower $ takeExtension $ outputFile ci) == ".html" then
46 (htmlHeader, htmlFooter)
47 else ("","")
48 in codegenJs (CGConf { header = h
49 , footer = f
50 , jsbnPath = "jsbn/jsbn-browser.js"
51 , extraRunTime = "Runtime-javascript.js"
52 }
53 )
54 ci
56codegenNode :: CodeGenerator
57codegenNode ci =
58 if interfaces ci then
59 codegenJs (CGConf { header = ""
60 , footer = ""
61 , jsbnPath = "jsbn/jsbn-browser.js"
62 , extraRunTime = "Runtime-node.js"
63 }
64 )
65 ci
66 else
67 do
68 codegenJs (CGConf { header = "#!/usr/bin/env node\n"
69 , footer = ""
70 , jsbnPath = "jsbn/jsbn-browser.js"
71 , extraRunTime = "Runtime-node.js"
72 }
73 )
74 ci
75 setPermissions (outputFile ci) (emptyPermissions { readable = True
76 , executable = True
77 , writable = True
78 })