Fix builtins syntax highlighting
This commit is contained in:
parent
ad5acdeb12
commit
8c750ac2dc
19
codetab.ts
19
codetab.ts
@ -5,7 +5,7 @@ import { COLOR } from "./colors.ts";
|
||||
import { getCodeSheet, setSheet } from "./sheet.ts";
|
||||
import { K, ctrlKeyDown, getKeyboardString, keyPressed, shiftKeyDown } from "./keyboard.ts";
|
||||
import { clipboard, tokenize } from "./deps.ts";
|
||||
import { getContext } from "./runcode.ts";
|
||||
import { getBuiltins } from "./runcode.ts";
|
||||
import { page } from "./viewsheets.ts";
|
||||
|
||||
const historyDebounceFrames = 20;
|
||||
@ -39,9 +39,11 @@ const state = {
|
||||
if (this.historyIndex === this.history.length && this.historyDebounce > 0) {
|
||||
this.snapshot();
|
||||
}
|
||||
console.log('historyIndex', this.historyIndex);
|
||||
if (this.historyIndex > 0) {
|
||||
this.historyIndex -= 1;
|
||||
const snap = this.history[this.historyIndex];
|
||||
console.log('historyIndex', this.historyIndex);
|
||||
this.code = snap.code;
|
||||
this.setSelection(snap.anchor, snap.focus);
|
||||
}
|
||||
@ -437,18 +439,16 @@ const drawCodeField = (code: string, x: number, y: number, w: number, h: number)
|
||||
focus,
|
||||
} = state;
|
||||
fillRect(x, y, w, h, COLOR.DARKERBLUE);
|
||||
if (anchor === focus) {
|
||||
const rect = indexToRect(code, focus);
|
||||
fillRect(x+rect.x-scrollX, y+rect.y-scrollY, 1, rect.h+1, COLOR.YELLOW);
|
||||
} else {
|
||||
if (anchor !== focus) {
|
||||
for (let i = Math.min(anchor, focus); i < Math.max(anchor, focus); i++) {
|
||||
const sel = indexToRect(code, i);
|
||||
fillRect(x+sel.x-scrollX, y+sel.y-scrollY, sel.w+2, sel.h+1, COLOR.WHITE);
|
||||
fillRect(x+sel.x-scrollX, y+sel.y-scrollY, sel.w+2, sel.h, COLOR.WHITE);
|
||||
}
|
||||
}
|
||||
const rect = indexToRect(code, focus);
|
||||
fillRect(x+rect.x-scrollX, y+rect.y-scrollY, 1, rect.h+1, COLOR.YELLOW);
|
||||
}
|
||||
const builtins = Object.keys(getContext());
|
||||
fillRect(x+rect.x-scrollX, y+rect.y-scrollY, 1, rect.h, COLOR.YELLOW);
|
||||
|
||||
const builtins = Object.keys(getBuiltins());
|
||||
const tokens = [...tokenize(code)];
|
||||
let cx = 0;
|
||||
let cy = 0;
|
||||
@ -554,7 +554,6 @@ const update = async () => {
|
||||
}
|
||||
if (keyPressed(K.ARROW_UP)) {
|
||||
const rect = indexToRect(state.code, focus);
|
||||
console.log(rect, focus, pixelToIndex(state.code, rect.x, rect.y-1));
|
||||
const newIndex = pixelToIndex(state.code, rect.x, rect.y-1-1);
|
||||
if (shiftKeyDown()) {
|
||||
state.setFocus(newIndex);
|
||||
|
11
runcode.ts
11
runcode.ts
@ -2,8 +2,13 @@
|
||||
const G: any = {
|
||||
eval: eval,
|
||||
};
|
||||
// deno-lint-ignore no-explicit-any
|
||||
const builtins: any = {};
|
||||
const context = new Proxy(G, {
|
||||
get: (target, prop) => {
|
||||
if (prop in builtins) {
|
||||
return builtins[prop as keyof typeof builtins];
|
||||
}
|
||||
return target[prop];
|
||||
},
|
||||
set: (target, prop, value) => {
|
||||
@ -43,9 +48,9 @@ export const evalCode = (code: string) => {
|
||||
|
||||
// deno-lint-ignore no-explicit-any
|
||||
export const addToContext = (name: string, value: any) => {
|
||||
G[name] = value;
|
||||
builtins[name] = value;
|
||||
}
|
||||
|
||||
export const getContext = () => {
|
||||
return G;
|
||||
export const getBuiltins = () => {
|
||||
return builtins;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user