Materialized query parser redo

This commit is contained in:
Zef Hemel
2022-04-11 20:34:09 +02:00
parent d649009dd2
commit b3c3302970
31 changed files with 1182 additions and 667 deletions
+21 -8
View File
@@ -1,16 +1,23 @@
import type { ClickEvent } from "../../webapp/app_event";
import { IndexEvent } from "../../webapp/app_event";
import { whiteOutQueries } from "../core/materialized_queries";
import { whiteOutQueries } from "../query/materialized_queries";
import { batchSet } from "plugos-silverbullet-syscall/index";
import { readPage, writePage } from "plugos-silverbullet-syscall/space";
import { parseMarkdown } from "plugos-silverbullet-syscall/markdown";
import { dispatch, getText } from "plugos-silverbullet-syscall/editor";
import { addParentPointers, collectNodesMatching, nodeAtPos, renderMarkdown } from "../lib/tree";
import {
addParentPointers,
collectNodesMatching,
collectNodesOfType,
nodeAtPos,
renderToText
} from "../../common/tree";
type Task = {
task: string;
complete: boolean;
deadline?: string;
pos?: number;
nested?: string;
};
@@ -21,23 +28,29 @@ export async function indexTasks({ name, text }: IndexEvent) {
text = whiteOutQueries(text);
let mdTree = await parseMarkdown(text);
addParentPointers(mdTree);
collectNodesMatching(mdTree, (n) => n.type === "Task").forEach((n) => {
let task = n.children!.slice(1).map(renderMarkdown).join("").trim();
collectNodesOfType(mdTree, "Task").forEach((n) => {
let task = n.children!.slice(1).map(renderToText).join("").trim();
let complete = n.children![0].children![0].text! !== "[ ]";
let value: Task = {
task,
complete,
};
let deadlineNodes = collectNodesOfType(n, "DeadlineDate");
if (deadlineNodes.length > 0) {
value.deadline = deadlineNodes[0].children![0].text!.replace(/📅\s*/, "");
}
let taskIndex = n.parent!.children!.indexOf(n);
let nestedItems = n.parent!.children!.slice(taskIndex + 1);
if (nestedItems.length > 0) {
value.nested = nestedItems.map(renderMarkdown).join("").trim();
value.nested = nestedItems.map(renderToText).join("").trim();
}
tasks.push({
key: `task:${n.from}`,
value,
});
// console.log("Task", value);
});
console.log("Found", tasks.length, "task(s)");
@@ -95,9 +108,9 @@ export async function taskToggleAtPos(pos: number) {
taskMarkerNode.children![0].text = changeTo;
console.log(
"This will be the new marker",
renderMarkdown(taskMarkerNode)
renderToText(taskMarkerNode)
);
text = renderMarkdown(referenceMdTree);
text = renderToText(referenceMdTree);
console.log("Updated reference paged text", text);
await writePage(page, text);
}
+19
View File
@@ -1,3 +1,22 @@
syntax:
DeadlineDate:
firstCharacters:
- "📅"
regex: "📅\\s*\\d{4}\\-\\d{2}\\-\\d{2}"
styles:
backgroundColor: "rgba(22,22,22,0.07)"
CompletedDate:
firstCharacters:
- "✅"
regex: "✅\\s*\\d{4}\\-\\d{2}\\-\\d{2}"
styles:
backgroundColor: "rgba(22,22,22,0.07)"
RepeatInterval:
firstCharacters:
- "🔁"
regex: "🔁\\s*every\\s+\\w+"
styles:
backgroundColor: "rgba(22,22,22,0.07)"
functions:
indexTasks:
path: "./task.ts:indexTasks"