import Delta from 'quill-delta-enhanced'; /** * DocPosJSON 表示文档中的某个位置 * * 这个结构是特意按照 Delta 的结构来设计的,目的就是为了方便把这个数据结构转成一个标准的 Delta 类 * 转成 Delta 之后就可以很方便地进行 transform、diff、equal 之类的操作 * 比如: * 1、某个文档中有两个段落,第一个段落长度为 10, 第二个长的为 5,要表示当前光标在第二个段落第二个字后面,可以表示为: * [ * { retain: 12 } * ] * 2、某个文档中有两段内容,第一段是一个普通段落,长度为 10,第二段是一个 5 行 3 列的表格, * 光标在表格第四行第二个单元格中第一个段落的第 5 个字符后面,则可以表示为: * [ * { retain: 10 }, // 先略过 table 前面的长度 * { * retain: { ops: [ * { retain: 3 }, // 再略过三行 * { * retain: { ops: [ * { retain: 1 }, // 再略过第四行的第一个单元格 * { * retain: { ops: [ * { retain: 5 } // 最后涨到第四行第二单元格中第一个段落的第 5 个字 * ]} * } * ]} * } * ]} * } * ] */ declare type DocPosJSON = { ops: Array<{ retain: number | DocPosJSON; }>; }; /** * DocPos 是 DocPosJSON 的简化形式 * DocPosJSON 其实本质上是 Delta 的结构,是一种开放式的数据接口, * 在代码逻辑里面使用的时候不太方便(经常需要做各种边界情况的判断) * 所以在代码中简化为 DocPos,这两种数据很容易用下面的工具方法互相转化 */ export declare type DocPos = { index: number; inner: DocPos | null; }; export declare const jsonToDocumentPos: (jsonObj: DocPosJSON) => DocPos | null; export declare const documentPosToJSON: (docPos: DocPos) => DocPosJSON | null; export declare const moveRight: (docPos: DocPos, offset: number) => DocPos; export declare function cloneDocPos(pos: null): null; export declare function cloneDocPos(pos: DocPos): DocPos; export declare function cloneDocPos(pos: DocPos | null): DocPos | null; export declare const getRelativeDocPos: (start: number, pos: DocPos) => DocPos; /** * 比较两个文档位置,如果 posA 在 posB 后面,就返回 true 否则返回 false */ export declare const compareDocPos: (posA: DocPos, posB: DocPos) => 1 | 0 | -1; export declare const moveDocPos: (pos: DocPos, step: number) => DocPos; export declare const transformDocPos: (pos: DocPos, delta: Delta) => DocPos; export {};