Skip to content

Commit

Permalink
初步完成DSL语言Tee
Browse files Browse the repository at this point in the history
  • Loading branch information
LaneSun committed Aug 29, 2024
1 parent 1596670 commit bf6796a
Show file tree
Hide file tree
Showing 26 changed files with 1,263 additions and 813 deletions.
57 changes: 38 additions & 19 deletions src/core/plugin/basic/rule/editor.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,39 @@
export default {
".core:editor": {
"modifiers": {
"modify": class extends TTModer.Map {
modify(node, offset, delete_count, inserts) {
super.modify(node);
const deletes = node.inner.modify(offset, delete_count, inserts);
this.data_src = [offset, inserts.length, deletes];
}
},
"move": class extends TTModer.Map {
modify(node, offset, count, delta) {
super.modify(node);
this.data_src = [offset + delta, count, -delta];
node.inner.move(offset, count, delta);
}
},
},
export default (plugin) => ({
".core:editor": {
modifiers: {
modify: class extends TTModer.Map {
modify(node, offset, delete_count, inserts) {
super.modify(node);
const deletes = node.inner.modify(offset, delete_count, inserts);
this.data_src = [offset, inserts.length, deletes];
}
},
move: class extends TTModer.Map {
modify(node, offset, count, delta) {
super.modify(node);
this.data_src = [offset + delta, count, -delta];
node.inner.move(offset, count, delta);
}
},
},
}
},

".core:editor > .core:selection": {
actions: {
"core:switch": class extends TTAction {
static name = Names("Switch");
static icon = "switch";
static unique = true;
static async call(sel) {
const node = sel.parent;
const nnode = await plugin.request_insert(sel);
if (nnode) {
const [offset] = sel.data_range;
node.mod("modify", offset, 1, [nnode]);
sel.set(offset, offset + 1);
}
}
},
},
},
});
87 changes: 44 additions & 43 deletions src/core/plugin/basic/rule/layout.js
Original file line number Diff line number Diff line change
@@ -1,45 +1,46 @@
export default {
".core:editor": {
"able.core:layout.select": true,
"handles.core:layout": {
"get-selection"(p, anchor_node, focus_node) {
let anchor = this.inner.indexOf(anchor_node);
let focus = this.inner.indexOf(focus_node);
if (anchor <= focus) {
focus++;
} else {
anchor++;
}
return this.$type["#core:selection"]({
scope: this,
anchor, focus,
});
},
},
"handles.core:selection": {
"select"(p, sel, node) {
sel.data_scope.val = this;
const offset = this.inner.indexOf(node);
sel.set(offset, offset + 1);
},
"resolve"(p, {anchor, focus}) {
return ["range", this.inner.slice(...[anchor, focus].num_sorted())];
},
"dir"(p) {
return {};
},
"collapsed"(p) {
return false;
},
"side"(p, dir, pos) {
return pos;
},
"move"(p, dir, pos) {
return pos;
},
"varify"(p, pos) {
return false;
},
},
".core:editor": {
"able.core:layout.select": true,
"handles.core:layout": {
"get-selection"(p, anchor_node, focus_node) {
let anchor = this.inner.indexOf(anchor_node);
let focus = this.inner.indexOf(focus_node);
if (anchor <= focus) {
focus++;
} else {
anchor++;
}
return this.$type["#core:selection"]({
scope: this,
anchor,
focus,
});
},
},
}
"handles.core:selection": {
select(p, sel, node) {
sel.data_scope.val = this;
const offset = this.inner.indexOf(node);
sel.set(offset, offset + 1);
},
resolve(p, { anchor, focus }) {
return ["range", this.inner.slice(...[anchor, focus].num_sorted())];
},
dir(p) {
return {};
},
collapsed(p) {
return false;
},
side(p, dir, pos) {
return pos;
},
move(p, dir, pos) {
return pos;
},
varify(p, pos) {
return false;
},
},
},
};
77 changes: 42 additions & 35 deletions src/core/plugin/basic/types.plugin.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,48 @@
const id = "#types:core:basic"
const provides = [".types:core:basic", ".types"]
const requires = {
}
const id = "#types:core:basic";
const provides = [".types:core:basic", ".types"];
const requires = {};

export default class extends TTPlugin {
static id = id
static provides = provides
static requires(plugins) {
return this.req_essential(plugins, requires);
}
static id = id;
static provides = provides;
static requires(plugins) {
return this.req_essential(plugins, requires);
}

".core:type-loader" = [
"type/frame",
"type/text-field",
"type/selection",
"type/vector-cursor",
"type/vector-range",
"type/data/base",
"type/data/atom",
"type/data/seq",
"type/pattern/base",
"type/pattern/atom",
"type/pattern/seq",
]
".core:type-loader" = [
"type/frame",
"type/text-field",
"type/selection",
"type/vector-cursor",
"type/vector-range",
"type/data/base",
"type/data/atom",
"type/data/seq",
"type/pattern/base",
"type/pattern/atom",
"type/pattern/seq",
];

".core:rule-loader" = [
"rule/editor",
"rule/keymap",
]
".core:rule-loader" = ["rule/editor", "rule/keymap"];

".core:style-loader" = [
"style/context-menu",
"style/cursor",
"style/frame",
"style/layout",
"style/range",
"style/selector",
"style/text-field",
]
".core:style-loader" = [
"style/context-menu",
"style/cursor",
"style/frame",
"style/layout",
"style/range",
"style/selector",
"style/text-field",
];

async request_insert(anchor) {
const id = await this.root.$require[".core:type-selector"].request(anchor);
if (id) {
const Node = this.root.$type[id];
const nnode = Node();
return nnode;
} else {
return null;
}
}
}
Loading

0 comments on commit bf6796a

Please sign in to comment.