字段 codec
read 从已确认的语法范围派生字段,patch 编码精确的源码修改。可以只安装语义而不提供视图。
@quirekit/msfe-core不依赖特定解析器的语义编解码器;渲染是可选能力,不负责持久化。
export interface SourceDefinition<Attrs extends object, Resource = unknown> {
readonly nodes: readonly string[];
readonly syntax?: InlineSyntax;
readonly placement?: "replace" | "before";
readonly showWhenActive?: boolean;
readonly measureHeight?: boolean;
readonly read: (document: SourceDocument, node: SourceNode) => Attrs | null;
readonly source?: (document: SourceDocument, node: SourceNode) => string;
readonly patch: (document: SourceDocument, node: SourceNode, patch: Partial<Attrs>) => SourceEdit | readonly SourceEdit[] | null;
readonly load?: (attrs: Readonly<Attrs>, signal: AbortSignal) => MsfeNodeViewResource<Resource> | Promise<MsfeNodeViewResource<Resource>>;
readonly renderer?: MsfeNodeViewRenderer;
}文档与语法范围
范围使用 UTF-16 偏移,结束位置不包含在范围内。语法访问是派生查询,不代表另一份可持久化文档。
@quirekit/msfe-core对已接受文档的只读访问,不依赖解析器和视图实现。
export interface SourceDocument extends SourceText {
resolveReference(label: string): MarkdownReferenceResult;
}@quirekit/msfe-core按需访问语法,不依赖特定解析器,也不分配另一份持久化 AST。
export interface SourceNode {
readonly kind: string;
readonly parentKind: string | null;
readonly from: number;
readonly to: number;
parent(): SourceNode | null;
child(kind: string): SourceNode | null;
children(kind?: string): readonly SourceNode[];
}节点组件
attrs 由源码派生。字段修改、删除和显露源码必须使用提供的受控动作;先前持有的 props 可能因文档变化失效。
@quirekit/msfe-core从源码派生的组件输入;所有动作都会先校验此快照,再修改源码。
export interface MsfeNodeViewProps<Attrs extends object = object, Resource = unknown> {
readonly id: string;
readonly attrs: Readonly<Attrs>;
readonly readOnly: boolean;
readonly status: "ready" | "loading" | "error";
readonly resource: Resource | undefined;
getRange(): MsfeSourceRange | null;
updateAttributes(patch: Partial<Attrs>): MsfeResult;
deleteNode(): MsfeResult;
revealSource(): boolean;
}定义和解析需求
defineSource 创建可安装的源码协议;读取、写回、指纹和资源分别承担不同职责。不能用资源值代替持久字段。完整流程见 节点教程。
@quirekit/msfe-core参数 definition:类型化源码协议。返回可安装的源码定义。
function defineSource<Attrs extends object, Resource = unknown>(definition: SourceDefinition<Attrs, Resource>): SourceSpec语义查询返回 pending 时可以注册解析需求,等待已接受状态再重试。该入口不会同步扫描整篇文档。
@quirekit/msfe-core参数 state:尚未完整解析的已接受快照。记录解析需求,不会同步强制推进解析。
function requestMarkdownParse(state: EditorState): void查询结果的处理
editor.querySource(name, range?) 返回 status 与 matches。每个 match 包含语义名、扩展类别 kind、字段、范围和 SourceNode;真实语法名称通过 node.kind 读取。范围参数使用 UTF-16 逻辑坐标。默认查询当前选区,不能将其当作一个全文件节点列表。
字符串工具 decodeMarkdownString、decodeMarkdownDestination、encodeMarkdownField 服务于不同的 Markdown 字段。保留用户原始表示时只编码被修改的字段,不对整篇文章统一格式化。位置与异步动作见 命令 API。