Initial commit
This commit is contained in:
commit
38ff06ea45
16 changed files with 1107 additions and 0 deletions
BIN
src/assets/hero.png
Normal file
BIN
src/assets/hero.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
1
src/assets/typescript.svg
Normal file
1
src/assets/typescript.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="32" height="32" viewBox="0 0 256 256"><path fill="#007ACC" d="M0 128v128h256V0H0z"/><path fill="#FFF" d="m56.612 128.85l-.081 10.483h33.32v94.68h23.568v-94.68h33.321v-10.28c0-5.69-.122-10.444-.284-10.566c-.122-.162-20.4-.244-44.983-.203l-44.74.122l-.121 10.443Zm149.955-10.742c6.501 1.625 11.459 4.51 16.01 9.224c2.357 2.52 5.851 7.111 6.136 8.208c.08.325-11.053 7.802-17.798 11.988c-.244.162-1.22-.894-2.317-2.52c-3.291-4.795-6.745-6.867-12.028-7.233c-7.76-.528-12.759 3.535-12.718 10.321c0 1.992.284 3.17 1.097 4.795c1.707 3.536 4.876 5.649 14.832 9.956c18.326 7.883 26.168 13.084 31.045 20.48c5.445 8.249 6.664 21.415 2.966 31.208c-4.063 10.646-14.14 17.879-28.323 20.276c-4.388.772-14.79.65-19.504-.203c-10.28-1.828-20.033-6.908-26.047-13.572c-2.357-2.6-6.949-9.387-6.664-9.874c.122-.163 1.178-.813 2.356-1.504c1.138-.65 5.446-3.129 9.509-5.485l7.355-4.267l1.544 2.276c2.154 3.29 6.867 7.801 9.712 9.305c8.167 4.307 19.383 3.698 24.909-1.26c2.357-2.153 3.332-4.388 3.332-7.68c0-2.966-.366-4.266-1.91-6.501c-1.99-2.845-6.054-5.242-17.595-10.24c-13.206-5.69-18.895-9.224-24.096-14.832c-3.007-3.25-5.852-8.452-7.03-12.8c-.975-3.617-1.22-12.678-.447-16.335c2.723-12.76 12.353-21.659 26.25-24.3c4.51-.853 14.994-.528 19.424.569Z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
1
src/assets/vite.svg
Normal file
1
src/assets/vite.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 8.5 KiB |
77
src/main.ts
Normal file
77
src/main.ts
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
import './style.css'
|
||||
import { SourceText, SourceRegion, sourceText } from 'source-region';
|
||||
import type { SourceLocation, Span } from 'source-region';
|
||||
|
||||
|
||||
type Expr =
|
||||
| { tag: "literal", value: Literal }
|
||||
| { tag: "list", values: Expr[] }
|
||||
|
||||
namespace Expr {
|
||||
export function number(value: number): Expr {
|
||||
return { tag: "literal", value: { tag: "number", value } };
|
||||
}
|
||||
export function identifier(value: Identifier): Expr {
|
||||
return { tag: "literal", value: { tag: "identifier", value } };
|
||||
}
|
||||
export function list(values: Expr[]): Expr {
|
||||
return { tag: "list", values };
|
||||
}
|
||||
|
||||
export function show(e: Expr): string {
|
||||
switch (e.tag) {
|
||||
case "literal":
|
||||
return showLiteral(e.value);
|
||||
case "list":
|
||||
return `(${e.values.map(show).join(" ")})`;
|
||||
}
|
||||
}
|
||||
|
||||
function showLiteral(e: Literal): string {
|
||||
switch (e.tag) {
|
||||
case "number":
|
||||
return `${e.value}`;
|
||||
case "identifier":
|
||||
return `${e.value}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type Literal =
|
||||
| { tag: "number", value: number }
|
||||
| { tag: "identifier", value: Identifier }
|
||||
|
||||
type Identifier = string
|
||||
|
||||
|
||||
// === Examples ===
|
||||
|
||||
function example00() {
|
||||
const v: Expr = Expr.list([Expr.identifier("f"), Expr.number(123), Expr.number(512)]);
|
||||
console.log(v);
|
||||
console.log(Expr.show(v));
|
||||
}
|
||||
|
||||
function example01() {
|
||||
const str = `hello, world!
|
||||
foo
|
||||
bar `;
|
||||
|
||||
const source = sourceText(str);
|
||||
const region = source.fullRegion();
|
||||
|
||||
console.log(region);
|
||||
console.log(region.lineCount);
|
||||
region.forEachLine((span, lineNo) => {
|
||||
console.log(lineNo, region.stringOf(span));
|
||||
});
|
||||
}
|
||||
|
||||
[
|
||||
example00,
|
||||
example01,
|
||||
].forEach((f, i) => {
|
||||
console.log(`====${i}===`);
|
||||
f();
|
||||
})
|
||||
|
||||
0
src/style.css
Normal file
0
src/style.css
Normal file
Loading…
Add table
Add a link
Reference in a new issue