mirror of
https://github.com/Dummi26/mers.git
synced 2026-02-05 06:46:31 +01:00
update site
This commit is contained in:
@@ -1,26 +1,34 @@
|
||||
#!/usr/bin/env mers
|
||||
|
||||
// helper functions
|
||||
|
||||
fn read_string(path string) {
|
||||
bytes_to_string(fs_read(path).assume_no_enum()).assume_no_enum()
|
||||
}
|
||||
fn code_to_html(code string code_width_limit_chars int) {
|
||||
out = ""
|
||||
for line code.regex(".*").assume_no_enum() {
|
||||
if code_width_limit_chars.gtoe(0).and(line.len().gt(code_width_limit_chars)) {
|
||||
line = line.substring(0 code_width_limit_chars)
|
||||
}
|
||||
line = line
|
||||
.replace("&" "&")
|
||||
.replace("<" "<")
|
||||
.replace(">" ">")
|
||||
out = out.add(line.add("<br>"))
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
// data
|
||||
|
||||
index = read_string("index.html")
|
||||
|
||||
welcome_script: []/string = []
|
||||
get_welcome_script = () {
|
||||
script = welcome_script
|
||||
switch! script {
|
||||
string script
|
||||
[] {
|
||||
scr = ""
|
||||
for line read_string("welcome.mers").regex(".*").assume_no_enum() {
|
||||
scr = scr.add(line.add("<br>"))
|
||||
}
|
||||
welcome_script = scr
|
||||
scr
|
||||
}
|
||||
}
|
||||
}
|
||||
index_html = index.code_to_html(75)
|
||||
build_script = read_string("build.mers").code_to_html(-1)
|
||||
welcome_script = read_string("welcome.mers").code_to_html(-1)
|
||||
|
||||
// process index.html
|
||||
|
||||
out = ""
|
||||
for line index.regex("\\S*.*").assume_no_enum() {
|
||||
@@ -28,10 +36,14 @@ for line index.regex("\\S*.*").assume_no_enum() {
|
||||
// comment, ignore
|
||||
} else if line.starts_with("$") {
|
||||
if line.eq("$welcome_script") {
|
||||
script = get_welcome_script.run()
|
||||
out = out.add(script)
|
||||
out = out.add(welcome_script)
|
||||
} else if line.eq("$build_script") {
|
||||
out = out.add(build_script)
|
||||
} else if line.eq("$index.html") {
|
||||
out = out.add(index_html)
|
||||
}
|
||||
} else {
|
||||
// remove spaces
|
||||
loop {
|
||||
if line.starts_with(" ") {
|
||||
line = line.substring(1)
|
||||
|
||||
@@ -3,14 +3,26 @@ body {
|
||||
background-color: DarkSlateBlue;
|
||||
/* background-color: MidnightBlue; */
|
||||
}
|
||||
h1 {
|
||||
h1, h2, h3 {
|
||||
text-align: center;
|
||||
}
|
||||
hr {
|
||||
display: block;
|
||||
height: 1px;
|
||||
border: 0;
|
||||
border-top: 1px solid #ccc;
|
||||
margin: 1em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.mers-code-snippet {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.container {
|
||||
height: auto;
|
||||
overflow: auto;
|
||||
}
|
||||
.container_left {
|
||||
margin-left: 9%;
|
||||
width: 20%;
|
||||
@@ -25,6 +37,13 @@ h1 {
|
||||
border-style: dotted;
|
||||
display: inline-block;
|
||||
}
|
||||
.container_left2 {
|
||||
margin-left: 9%;
|
||||
width: 50%;
|
||||
margin-right: 5%;
|
||||
float: left;
|
||||
display: inline-block;
|
||||
}
|
||||
.container_right {
|
||||
margin-left: 5%;
|
||||
width: 20%;
|
||||
@@ -32,9 +51,29 @@ h1 {
|
||||
float: right;
|
||||
display: inline-block;
|
||||
}
|
||||
.container2_left {
|
||||
margin-left: 9%;
|
||||
width: 40%;
|
||||
float: left;
|
||||
display: inline-block;
|
||||
}
|
||||
.container2_right {
|
||||
margin-right: 9%;
|
||||
width: 40%;
|
||||
float: right;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.code-border {
|
||||
border-style: double;
|
||||
}
|
||||
.textalign-center {
|
||||
text-align: center;
|
||||
}
|
||||
.afterpagebreak {
|
||||
width: 100%;
|
||||
page-break-before: always;
|
||||
}
|
||||
.fullwide {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -10,19 +10,45 @@
|
||||
</head>
|
||||
<body>
|
||||
<h1>Mers</h1>
|
||||
<section>
|
||||
<div class="container_left textalign-center">
|
||||
mers gud?<br>
|
||||
Second line.<br>
|
||||
(yes this is a prototype)
|
||||
</div>
|
||||
<section class="container_center code-border">
|
||||
<code class="mers-code-snippet">
|
||||
<section class="container">
|
||||
<section class="container_left2 code-border">
|
||||
<pre><code class="mers-code-snippet">
|
||||
$welcome_script
|
||||
</code>
|
||||
</code></pre>
|
||||
</section>
|
||||
<section class="container_right">
|
||||
<image src="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////2wBDAf//////////////////////////////////////////////////////////////////////////////////////wAARCAGCAcQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECA//EACIQAQEAAgICAwEBAQEAAAAAAAABAhESMUFRIWFxgTLRIv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/8QAFhEBAQEAAAAAAAAAAAAAAAAAABFB/9oADAMBAAIRAxEAPwDQACgAAAAAKAAAIoCCoAAAAAAAioAAAAAACYeW2MPLYAAAAAAAAAAAAAAAAAAAAAAAAAAMgAoAAACooAICbWXbDWINAAAAIoCAAAAAAIoCBakoKDNoLh5bYw8tgAAAAAAAAAAAAAAAAAAAAAAAAAAyCgAAAoAACKwCXSy6RFR03By26Y1FaAAAARUABAUEBWLV2yAgA3OmasqA1h1W2MOq2Dje6F7pJsAa4nEGRricQZCzSAogCiAKIAogCiAKIAoig7AAAAyqKAAAqKAACXphuufQKyuyfKomlx+KfiyIroz5Wsg2ImwL2qeUBpIJsGmL2WpsBAAAAABvDptjDpsHG91cUvdXEHRm5KxQXksu3NqA1YxXRigyKaBAABdGgQU0CC6NUEF0AiooOwAAAMgbBRNqCeVZ8tUE2bRIDW0olvwCImwGo1GcemgavTMNoCoAKixARFQAAAAAEBRAHTDptjDpsHG91cUvdXEG2K6M3EGGpF4nQK51bUBqLUi0GKFAbiZLEyBmOmmI2B0biWsA6M2LKUHNQB2AAABkFBBQEFAZ+DUaAZ0lnw2lnwDkDWINaNNAM6qarYDGqfLYDHyny6AOaOqQHMdNRNQGBvXyagMDWouoDmN6iaBrDptjDpsHG91cUvdXEHRi1pigsrVc43AYqOljANRakWgxQpAbiZLEyBI2xG/AMVlqsg3GqzGqDnQoDsAAADKooAAAKCCoAXqiZX4oOSy6J2tx9A6S7VxlsrcyBsZ2bBTcZAa3E3E0mga3DbGjQNbNs/J8gogCgnyCoANYdNs4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">
|
||||
<image
|
||||
alt="some picture related to mers (todo)"
|
||||
src="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////2wBDAf//////////////////////////////////////////////////////////////////////////////////////wAARCAGCAcQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECA//EACIQAQEAAgICAwEBAQEAAAAAAAABAhESMUFRIWFxgTLRIv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/8QAFhEBAQEAAAAAAAAAAAAAAAAAABFB/9oADAMBAAIRAxEAPwDQACgAAAAAKAAAIoCCoAAAAAAAioAAAAAACYeW2MPLYAAAAAAAAAAAAAAAAAAAAAAAAAAMgAoAAACooAICbWXbDWINAAAAIoCAAAAAAIoCBakoKDNoLh5bYw8tgAAAAAAAAAAAAAAAAAAAAAAAAAAyCgAAAoAACKwCXSy6RFR03By26Y1FaAAAARUABAUEBWLV2yAgA3OmasqA1h1W2MOq2Dje6F7pJsAa4nEGRricQZCzSAogCiAKIAogCiAKIAoig7AAAAyqKAAAqKAACXphuufQKyuyfKomlx+KfiyIroz5Wsg2ImwL2qeUBpIJsGmL2WpsBAAAAABvDptjDpsHG91cUvdXEHRm5KxQXksu3NqA1YxXRigyKaBAABdGgQU0CC6NUEF0AiooOwAAAMgbBRNqCeVZ8tUE2bRIDW0olvwCImwGo1GcemgavTMNoCoAKixARFQAAAAAEBRAHTDptjDpsHG91cUvdXEG2K6M3EGGpF4nQK51bUBqLUi0GKFAbiZLEyBmOmmI2B0biWsA6M2LKUHNQB2AAABkFBBQEFAZ+DUaAZ0lnw2lnwDkDWINaNNAM6qarYDGqfLYDHyny6AOaOqQHMdNRNQGBvXyagMDWouoDmN6iaBrDptjDpsHG91cUvdXEHRi1pigsrVc43AYqOljANRakWgxQpAbiZLEyBI2xG/AMVlqsg3GqzGqDnQoDsAAADKooAAAKCCoAXqiZX4oOSy6J2tx9A6S7VxlsrcyBsZ2bBTcZAa3E3E0mga3DbGjQNbNs/J8gogCgnyCoANYdNs4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"
|
||||
width="100%" height="100%"
|
||||
>
|
||||
<h3>Mers types</h3>
|
||||
<div>
|
||||
Mers uses a multiple-types system.
|
||||
It keeps track of which types a variable could have
|
||||
and constructs a type with that information.
|
||||
<br>
|
||||
For example, <code>int/float</code> can represent a number - int or float.
|
||||
Optional types can be <code>[]/[t]</code> - either nothing or one value (tuple with length 0 or 1).
|
||||
Mers doesn't have null, it just has the empty tuple <code>[]</code>.
|
||||
</div>
|
||||
<h3>No exceptions, no crashes</h3>
|
||||
<div>
|
||||
Errors in mers are passed as values.
|
||||
Because of the type system, you are forced to handle them explicitly.
|
||||
Mers will not crash in unexpected places, because the only way to crash
|
||||
it is by using one of the assume*() functions (similar to unwrap()s).
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<hr>
|
||||
<h3>HTML preprocessor to help build this document written in mers:</h3>
|
||||
<section class="container">
|
||||
<pre class="container2_left"><code>
|
||||
$index.html
|
||||
</code></pre>
|
||||
<pre class="container2_right"><code class="mers-code-snippet">
|
||||
$build_script
|
||||
</code></pre>
|
||||
</section>
|
||||
</body>
|
||||
|
||||
56
site/welcome.mers
Normal file → Executable file
56
site/welcome.mers
Normal file → Executable file
@@ -1,4 +1,52 @@
|
||||
#!/usr/bin/env mers
|
||||
/* welcome to mers */
|
||||
println("Hello, World!")
|
||||
42 // return value
|
||||
fn get_number_input(question string) {
|
||||
println(question)
|
||||
input = read_line()
|
||||
// try to parse to an int, then a float.
|
||||
in = match input {
|
||||
input.parse_int() input
|
||||
input.parse_float() input
|
||||
}
|
||||
// 'in' has type int/float/[] because of the match statement
|
||||
switch! in {
|
||||
int/float in
|
||||
// replace [] with an appropriate error before returning
|
||||
[] Err: "input was not a number."
|
||||
}
|
||||
// return type is int/float/Err(string)
|
||||
}
|
||||
|
||||
answer = get_number_input("What is your favorite number?")
|
||||
|
||||
// switch can be used to branch based on a variables type.
|
||||
// switch! indicates that every possible type must be handled.
|
||||
switch! answer {
|
||||
int {
|
||||
println("Entered an integer")
|
||||
answer.debug() // int
|
||||
}
|
||||
float {
|
||||
println("Entered a decimal number")
|
||||
answer.debug() // float
|
||||
}
|
||||
Err(string) println("Input was not a number!")
|
||||
}
|
||||
|
||||
sleep(2)
|
||||
|
||||
|
||||
// function that returns an anonymous function (function object).
|
||||
// anonymous functions can be used as iterators in for-loops.
|
||||
fn count_up() {
|
||||
count = -1
|
||||
() {
|
||||
count = count.add(1)
|
||||
count
|
||||
}
|
||||
}
|
||||
|
||||
for num count_up() {
|
||||
println(num.to_string())
|
||||
// once num is greater than 60,
|
||||
// the loop stops and returns num.
|
||||
if num.gt(60) num else []
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user