5b83b3bb2561f55148fee3d46919e010c7e073b2
[jscl.git] / ecmalisp.html
1 <!doctype html>
2 <html>
3   <head>
4     <style>
5      /* The console container element */
6     body { background-color: black; font-size: 16px; font-family: Courier; overflow: hidden; padding: 0 0 0 0;}
7     #console {
8       position: absolute;
9       top: 0px;
10       bottom: 0px;
11       left: 0px;
12       right: 0px;
13       background-color:black;
14     }
15
16     .parents {
17         font-weight: bold;
18     }
19
20     /* The inner console element. */
21     .jqconsole {
22         padding: 10px;
23     }
24     /* The cursor. */
25     .jqconsole-cursor {
26         background-color: gray;
27     }
28     /* The cursor color when the console looses focus. */
29     .jqconsole-blurred .jqconsole-cursor {
30         background-color: #666;
31     }
32     /* The current prompt text color */
33     .jqconsole-prompt {
34         color: White;
35     }
36     /* The command history */
37     .jqconsole-old-prompt {
38         color: White;
39         font-weight: normal;
40     }
41     /* The text color when in input mode. */
42     .jqconsole-input {
43         color: White;
44     }
45     /* Previously entered input. */
46     .jqconsole-old-input {
47         color: White;
48         font-weight: normal;
49     }
50     /* The text color of the output. */
51     .jqconsole-output {
52         color: green;
53     }
54     .jqconsole-return, .jqconsole-header {
55         color: gray;
56     }
57     .jqconsole-error {
58         color: red;
59     }
60 </style>
61   </head>
62
63   <body>
64     <div id="console"></div>
65     <script src="ecmalisp.js" type="text/javascript"></script>
66     <script src="jquery.js" type="text/javascript" charset="utf-8"></script>
67     <script src="jqconsole.min.js" type="text/javascript" charset="utf-8"></script>
68     <script>
69       $(function () {
70         var jqconsole = $('#console').jqconsole('Welcome to Ecmalisp!\n\n', '');
71         jqconsole.RegisterMatching('(', ')', 'parents');
72
73         lisp.write = function(str){
74            jqconsole.Write(str, 'jqconsole-output');
75            return str;
76         }
77
78         function mv () {
79            var result = [];
80            result["multiple-values"] = true;
81            for (var i=0; i<arguments.length; i++)
82               result.push(arguments[i]);
83            return result;
84         }
85
86         var startPrompt = function () {
87           // Start the prompt with history enabled.
88           jqconsole.Write(lisp.evalString(pv, '(CL:PACKAGE-NAME CL:*PACKAGE*)') + '> ', 'jqconsole-prompt');
89           jqconsole.Prompt(true, function (input) {
90             // Output input with the class jqconsole-return.
91             if (input[0] != ','){
92                 try {
93                     var values = lisp.evalString(pv, input);
94                     if (values !== 'object' || !('multiple-values' in values))
95                        values = [values];
96                     for (var i in values){
97                        jqconsole.Write(lisp.print(pv, values[i]) + '\n', 'jqconsole-return');
98                     }
99                 } catch(error) {
100                     jqconsole.Write('ERROR: ' + (error.message || error) + '\n', 'jqconsole-error');
101                 }
102             } else {
103                 jqconsole.Write(lisp.compileString(pv, input.slice(1)) + '\n', 'jqconsole-return');
104             }
105             // Restart the prompt.
106             startPrompt();
107           }, function(input){
108             try {
109                 lisp.read(pv, input[0]==','? input.slice(1): input);
110             } catch(error) {
111                 return 0;
112             }
113             return false;
114           });
115         };
116         startPrompt();
117       });
118     </script>
119   </body>
120 </html>