try online page added to docs

This commit is contained in:
Thakee Nathees 2022-05-19 00:05:22 +05:30
parent ade5d9ee44
commit 97f9a364f3
3 changed files with 252 additions and 7 deletions

View File

@ -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
View 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 &lt; 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>

View File

@ -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;