oberonjs.html 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Oberon online compiler</title>
  6. <link rel="stylesheet" href="jslibs/codemirror/codemirror.css">
  7. <!-- <link rel="stylesheet" href="http://codemirror.net/doc/docs.css"> -->
  8. <script src="jslibs/codemirror/codemirror.js"></script>
  9. <script src="jslibs/codemirror/javascript.js"></script>
  10. <script src="jslibs/processing/processing.js"></script>
  11. <script src="codemirror/oberon07.js"></script>
  12. <style type="text/css">
  13. .code {
  14. display: inline-block;
  15. }
  16. #links {
  17. float:right;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <div id="links">
  23. <p><a href="http://oberspace.dyndns.org">Home</a></p>
  24. <p><a href="https://github.com/vladfolts/oberonjs">Development</a></p>
  25. </div>
  26. <p>
  27. <form action="">
  28. Oberon module(s):
  29. <input type="radio" name="compiler" value="oberon" checked>Oberon</input>
  30. <input type="radio" name="compiler" value="eberon" id="eberon">
  31. <a href="https://github.com/vladfolts/oberonjs/wiki/Eberon">
  32. Eberon
  33. </a>
  34. </input>
  35. <p/>
  36. <input type="checkbox" id="checkIndexesOption">checked indexes</input>
  37. </form>
  38. </p>
  39. <div class="code">
  40. <textarea id="source" rows="10" cols="80">
  41. MODULE test;
  42. IMPORT JS;
  43. BEGIN
  44. JS.alert("Hello, World!")
  45. END test.
  46. </textarea>
  47. </div>
  48. <p>
  49. <button onclick="compile()">Compile</button>
  50. <button onclick="compile(); run()">Compile &amp; Run</button>
  51. </p>
  52. <p id="compileErrors" style="color:red"></p>
  53. <p id="compileTime"></p>
  54. <div class="code">
  55. <textarea id="result" rows="10" cols="80">
  56. </textarea>
  57. </div>
  58. <p><button onclick="run()">Run</button></p>
  59. <p><button onclick="run_tests()">Run Tests</button></p>
  60. <p id="runErrors" style="color:red"></p>
  61. <p id="runTime"></p>
  62. <p id="testsResult"></p>
  63. <p id="version"></p>
  64. <script src="oc.js"></script>
  65. <script>
  66. var oberonEditor = CodeMirror.fromTextArea(document.getElementById('source'), {
  67. lineNumbers: true,
  68. mode: "text/x-oberon07"
  69. });
  70. var javascriptEditor = CodeMirror.fromTextArea(document.getElementById('result'), {
  71. lineNumbers: true,
  72. mode: "text/javascript"
  73. });
  74. if (typeof buildVersion != "undefined")
  75. document.getElementById("version").textContent = buildVersion;
  76. function compile(){
  77. var src = oberonEditor.getValue();
  78. var result;
  79. var errors = "";
  80. var start = new Date();
  81. try {
  82. var language = require(
  83. document.getElementById("eberon").checked
  84. ? "eberon/eberon_grammar.js"
  85. : "oberon/oberon_grammar.js").language;
  86. var options = {checkIndexes: document.getElementById("checkIndexesOption").checked};
  87. oc = require("oc.js")
  88. result = oc.compile(
  89. new oc.ReadModule(src),
  90. language,
  91. function(e){errors += e;},
  92. options
  93. );
  94. }
  95. catch (e) {
  96. errors += e;
  97. }
  98. var compileTime = (new Date() - start) / 1000;
  99. if (!result)
  100. result = "";
  101. javascriptEditor.setValue(result);
  102. document.getElementById("compileErrors").textContent = errors;
  103. document.getElementById("compileTime").textContent = "compile time (seconds): " + compileTime;
  104. }
  105. function timed_run(action){
  106. var start = new Date();
  107. var result = action();
  108. var runTime = (new Date() - start) / 1000;
  109. document.getElementById("runTime").textContent = "run time (seconds): " + runTime;
  110. return result;
  111. }
  112. function run(){
  113. var errElement = document.getElementById("runErrors");
  114. errElement.textContent = "";
  115. timed_run(function(){
  116. try{
  117. eval(javascriptEditor.getValue());
  118. }
  119. catch (e){
  120. var errors = "" + e;
  121. errElement.textContent = errors;
  122. }
  123. });
  124. }
  125. function run_tests(){
  126. var resultsElement = document.getElementById("testsResult");
  127. resultsElement.textContent = "running...";
  128. var result = timed_run(function(){
  129. return require("test_unit.js").run();
  130. });
  131. resultsElement.textContent = result ? "Tests OK" : "Tests failed";
  132. }
  133. </script>
  134. </body>
  135. </html>