mirror of
https://github.com/zekexiao/pocketlang.git
synced 2025-03-04 05:05:57 +08:00
Merge pull request #231 from ThakeeNathees/try-online
try online page added to docs
This commit is contained in:
commit
f613153dcb
@ -11,7 +11,7 @@ which is less than <strong>300KB</strong> and the language itself can be compile
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="center">
|
<div class="center">
|
||||||
<a class="button" target="_blank" href="./try-online.html"> Try Online </a>
|
<a class="button" target="_blank" href="./tryonline.html"> Try Online </a>
|
||||||
<a class="button" target="_blank" href="https://www.github.com/ThakeeNathees/pocketlang/"> GitHub </a>
|
<a class="button" target="_blank" href="https://www.github.com/ThakeeNathees/pocketlang/"> GitHub </a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
247
docs/tryonline.html
Normal file
247
docs/tryonline.html
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Note:
|
||||||
|
This site was created by modifying code pen https://codepen.io/antonmedv/pen/PoPoGwg
|
||||||
|
written by 'Anton Medvedev' the license can be found bellow.
|
||||||
|
|
||||||
|
LICENSE
|
||||||
|
-------
|
||||||
|
Copyright (c) 2022 by Anton Medvedev (https://codepen.io/antonmedv/pen/PoPoGwg)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<script src="static/codejar/codejar.js"></script>
|
||||||
|
<script src="static/codejar/linenumbers.js"></script>
|
||||||
|
<script src="static/highlight.js/highlight.min.js"></script>
|
||||||
|
<script src="static/wasm/pocketlang.js"></script>
|
||||||
|
<link rel="stylesheet" href="static/highlight.js/github-dark-dimmed.min.css">
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Lato:wght@300&family=PT+Mono&display=swap");
|
||||||
|
|
||||||
|
.hljs{display:block;overflow-x:auto;padding:.5em;background:#282a36}
|
||||||
|
.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-section,.hljs-link{color:#73cbde}
|
||||||
|
.hljs,.hljs-subst{color:#f8f8f2}
|
||||||
|
.hljs-string,.hljs-title,.hljs-name,.hljs-type,.hljs-attribute,.hljs-symbol,
|
||||||
|
.hljs-bullet,.hljs-addition,.hljs-variable,.hljs-template-tag,.hljs-template-variable{color:#f1fa8c}
|
||||||
|
.hljs-comment,.hljs-quote,.hljs-deletion,.hljs-meta{color:#6272a4}
|
||||||
|
.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-title,.hljs-section,.hljs-doctag,
|
||||||
|
.hljs-type,.hljs-name,.hljs-strong{font-weight:bold}.hljs-emphasis{font-style:italic}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--window-width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-image: linear-gradient(
|
||||||
|
109.6deg,
|
||||||
|
rgba(253, 199, 141, 1) 11.3%,
|
||||||
|
rgba(249, 143, 253, 1) 100.2%
|
||||||
|
);
|
||||||
|
font-family: Lato, sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 15px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
*,
|
||||||
|
*:before,
|
||||||
|
*:after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
*:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
a,
|
||||||
|
a:visited,
|
||||||
|
a:active {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 34px;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.window {
|
||||||
|
width: var(--window-width);
|
||||||
|
border-radius: 6px;
|
||||||
|
box-shadow: 0 8px 12px rgba(0, 0, 0, 0.1);
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.window .window-header {
|
||||||
|
height: 25px;
|
||||||
|
background: Gainsboro;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.window .window-header .action-buttons {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 10px;
|
||||||
|
margin-top: -5px;
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
background: Crimson;
|
||||||
|
border-radius: 50%;
|
||||||
|
box-shadow: 15px 0 0 Orange, 30px 0 0 LimeGreen;
|
||||||
|
}
|
||||||
|
#code-editor {
|
||||||
|
border-bottom-left-radius: 6px;
|
||||||
|
border-bottom-right-radius: 6px;
|
||||||
|
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12),
|
||||||
|
0 3px 1px -2px rgba(0, 0, 0, 0.2);
|
||||||
|
font-family: "PT Mono", monospace;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
min-height: 340px;
|
||||||
|
letter-spacing: normal;
|
||||||
|
line-height: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
resize: none !important;
|
||||||
|
tab-size: 4;
|
||||||
|
}
|
||||||
|
#run-button {
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
#code-editor.hljs {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
#output-wrapper {
|
||||||
|
font-family: "PT Mono", monospace;
|
||||||
|
width: var(--window-width);
|
||||||
|
min-height: 50px;
|
||||||
|
background-color: #282a36;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 10px;
|
||||||
|
color: white;
|
||||||
|
margin:0 !important;
|
||||||
|
}
|
||||||
|
#code-output span.error-line {
|
||||||
|
color: #ec5424;
|
||||||
|
}
|
||||||
|
.controls {
|
||||||
|
font-size: 14px;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
right: 10px;
|
||||||
|
margin-top: -10px;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.controls > div:first-child > a {
|
||||||
|
display: inline-block;
|
||||||
|
width: 40px;
|
||||||
|
}
|
||||||
|
.features {
|
||||||
|
width: 547px;
|
||||||
|
font-size: 16px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<title>Try Online</title>
|
||||||
|
</head>
|
||||||
|
<body id="tryonline-body">
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<br><br>
|
||||||
|
<h1 class="title">POCKETLANG PLAYGROUND</h1>
|
||||||
|
<br>
|
||||||
|
<div class="window">
|
||||||
|
<div class="window-header">
|
||||||
|
<div class="action-buttons"></div>
|
||||||
|
<div class="controls">
|
||||||
|
<div id="run-button">Run</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="window-body">
|
||||||
|
<div id="code-editor" class="language-ruby" data-gramm="false">
|
||||||
|
# Python like import statement.
|
||||||
|
from lang import clock as now
|
||||||
|
|
||||||
|
# A recursive fibonacci function.
|
||||||
|
def fib(n)
|
||||||
|
if n < 2 then return n end
|
||||||
|
return fib(n-1) + fib(n-2)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Prints all fibonacci from 0 to 10 exclusive.
|
||||||
|
for i in 0..10
|
||||||
|
print("fib($i) = ${fib(i)}")
|
||||||
|
end
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<pre id="output-wrapper"><div id="code-output">...</div></pre>
|
||||||
|
<br>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
let code_editor = document.querySelector('#code-editor');
|
||||||
|
let code_output = document.querySelector('#code-output');
|
||||||
|
let run_button = document.querySelector('#run-button');
|
||||||
|
|
||||||
|
let highlight = withLineNumbers(function(editor) {
|
||||||
|
editor.textContent = editor.textContent;
|
||||||
|
hljs.highlightElement(editor);
|
||||||
|
});
|
||||||
|
|
||||||
|
highlight(code_editor);
|
||||||
|
|
||||||
|
CodeJar(code_editor, highlight, { indentOn: /[(\[{]$/});
|
||||||
|
|
||||||
|
var runSource; // Native function.
|
||||||
|
window.onload = function() {
|
||||||
|
// Module will be defined by pocketlang.js when the page is loaded.
|
||||||
|
runSource = Module.cwrap('runSource', 'number', ['string']);
|
||||||
|
run_button.onclick = function() {
|
||||||
|
code_output.classList.remove("has-error");
|
||||||
|
code_output.innerText = '';
|
||||||
|
const source = code_editor.textContent;
|
||||||
|
runSource(source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -11,13 +11,11 @@
|
|||||||
extern void js_errorPrint(const char* message);
|
extern void js_errorPrint(const char* message);
|
||||||
extern void js_writeFunction(const char* message);
|
extern void js_writeFunction(const char* message);
|
||||||
|
|
||||||
void errorPrint(PKVM* vm, const char* message) {
|
void stdoutWrite(PKVM* vm, const char* message) {
|
||||||
// No need to pass the file (since there is only script that'll ever run on
|
|
||||||
// the browser.
|
|
||||||
js_errorPrint(message);
|
js_errorPrint(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void writeFunction(PKVM* vm, const char* text) {
|
void stderrWrite(PKVM* vm, const char* text) {
|
||||||
js_writeFunction(text);
|
js_writeFunction(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,8 +23,8 @@ EMSCRIPTEN_KEEPALIVE
|
|||||||
int runSource(const char* source) {
|
int runSource(const char* source) {
|
||||||
|
|
||||||
PkConfiguration config = pkNewConfiguration();
|
PkConfiguration config = pkNewConfiguration();
|
||||||
config.stderr_write = errorPrint;
|
config.stderr_write = stderrWrite;
|
||||||
config.stdout_write = writeFunction;
|
config.stdout_write = stdoutWrite;
|
||||||
config.load_script_fn = NULL;
|
config.load_script_fn = NULL;
|
||||||
config.resolve_path_fn = NULL;
|
config.resolve_path_fn = NULL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user