etherpad-webcomponents 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EpDropdown.d.ts +3 -0
- package/dist/EpDropdown.d.ts.map +1 -1
- package/dist/EpDropdown.js +30 -4
- package/dist/EpDropdown.js.map +1 -1
- package/dist/EpEditor.d.ts +108 -0
- package/dist/EpEditor.d.ts.map +1 -0
- package/dist/EpEditor.js +288 -0
- package/dist/EpEditor.js.map +1 -0
- package/dist/editor/AceEditor.d.ts +204 -0
- package/dist/editor/AceEditor.d.ts.map +1 -0
- package/dist/editor/AceEditor.js +2847 -0
- package/dist/editor/AceEditor.js.map +1 -0
- package/dist/editor/AttributeManager.d.ts +25 -0
- package/dist/editor/AttributeManager.d.ts.map +1 -0
- package/dist/editor/AttributeManager.js +236 -0
- package/dist/editor/AttributeManager.js.map +1 -0
- package/dist/editor/AttributeMap.d.ts +13 -0
- package/dist/editor/AttributeMap.d.ts.map +1 -0
- package/dist/editor/AttributeMap.js +37 -0
- package/dist/editor/AttributeMap.js.map +1 -0
- package/dist/editor/AttributePool.d.ts +22 -0
- package/dist/editor/AttributePool.d.ts.map +1 -0
- package/dist/editor/AttributePool.js +101 -0
- package/dist/editor/AttributePool.js.map +1 -0
- package/dist/editor/Builder.d.ts +15 -0
- package/dist/editor/Builder.d.ts.map +1 -0
- package/dist/editor/Builder.js +47 -0
- package/dist/editor/Builder.js.map +1 -0
- package/dist/editor/Changeset.d.ts +61 -0
- package/dist/editor/Changeset.d.ts.map +1 -0
- package/dist/editor/Changeset.js +942 -0
- package/dist/editor/Changeset.js.map +1 -0
- package/dist/editor/ChangesetUtils.d.ts +11 -0
- package/dist/editor/ChangesetUtils.d.ts.map +1 -0
- package/dist/editor/ChangesetUtils.js +30 -0
- package/dist/editor/ChangesetUtils.js.map +1 -0
- package/dist/editor/MergingOpAssembler.d.ts +13 -0
- package/dist/editor/MergingOpAssembler.d.ts.map +1 -0
- package/dist/editor/MergingOpAssembler.js +60 -0
- package/dist/editor/MergingOpAssembler.js.map +1 -0
- package/dist/editor/Op.d.ts +10 -0
- package/dist/editor/Op.d.ts.map +1 -0
- package/dist/editor/Op.js +18 -0
- package/dist/editor/Op.js.map +1 -0
- package/dist/editor/OpAssembler.d.ts +9 -0
- package/dist/editor/OpAssembler.d.ts.map +1 -0
- package/dist/editor/OpAssembler.js +16 -0
- package/dist/editor/OpAssembler.js.map +1 -0
- package/dist/editor/OpIter.d.ts +9 -0
- package/dist/editor/OpIter.d.ts.map +1 -0
- package/dist/editor/OpIter.js +22 -0
- package/dist/editor/OpIter.js.map +1 -0
- package/dist/editor/SmartOpAssembler.d.ts +21 -0
- package/dist/editor/SmartOpAssembler.d.ts.map +1 -0
- package/dist/editor/SmartOpAssembler.js +71 -0
- package/dist/editor/SmartOpAssembler.js.map +1 -0
- package/dist/editor/StringAssembler.d.ts +7 -0
- package/dist/editor/StringAssembler.d.ts.map +1 -0
- package/dist/editor/StringAssembler.js +15 -0
- package/dist/editor/StringAssembler.js.map +1 -0
- package/dist/editor/StringIterator.d.ts +13 -0
- package/dist/editor/StringIterator.d.ts.map +1 -0
- package/dist/editor/StringIterator.js +29 -0
- package/dist/editor/StringIterator.js.map +1 -0
- package/dist/editor/TextLinesMutator.d.ts +31 -0
- package/dist/editor/TextLinesMutator.d.ts.map +1 -0
- package/dist/editor/TextLinesMutator.js +198 -0
- package/dist/editor/TextLinesMutator.js.map +1 -0
- package/dist/editor/ace2_common.d.ts +9 -0
- package/dist/editor/ace2_common.d.ts.map +1 -0
- package/dist/editor/ace2_common.js +31 -0
- package/dist/editor/ace2_common.js.map +1 -0
- package/dist/editor/attributes.d.ts +20 -0
- package/dist/editor/attributes.d.ts.map +1 -0
- package/dist/editor/attributes.js +54 -0
- package/dist/editor/attributes.js.map +1 -0
- package/dist/editor/browser_flags.d.ts +7 -0
- package/dist/editor/browser_flags.d.ts.map +1 -0
- package/dist/editor/browser_flags.js +8 -0
- package/dist/editor/browser_flags.js.map +1 -0
- package/dist/editor/changesettracker.d.ts +54 -0
- package/dist/editor/changesettracker.d.ts.map +1 -0
- package/dist/editor/changesettracker.js +193 -0
- package/dist/editor/changesettracker.js.map +1 -0
- package/dist/editor/colorutils.d.ts +22 -0
- package/dist/editor/colorutils.d.ts.map +1 -0
- package/dist/editor/colorutils.js +81 -0
- package/dist/editor/colorutils.js.map +1 -0
- package/dist/editor/contentcollector.d.ts +52 -0
- package/dist/editor/contentcollector.d.ts.map +1 -0
- package/dist/editor/contentcollector.js +692 -0
- package/dist/editor/contentcollector.js.map +1 -0
- package/dist/editor/core/EventBus.d.ts +187 -0
- package/dist/editor/core/EventBus.d.ts.map +1 -0
- package/dist/editor/core/EventBus.js +169 -0
- package/dist/editor/core/EventBus.js.map +1 -0
- package/dist/editor/cssmanager.d.ts +6 -0
- package/dist/editor/cssmanager.d.ts.map +1 -0
- package/dist/editor/cssmanager.js +35 -0
- package/dist/editor/cssmanager.js.map +1 -0
- package/dist/editor/domline.d.ts +35 -0
- package/dist/editor/domline.d.ts.map +1 -0
- package/dist/editor/domline.js +267 -0
- package/dist/editor/domline.js.map +1 -0
- package/dist/editor/html_escape.d.ts +3 -0
- package/dist/editor/html_escape.d.ts.map +1 -0
- package/dist/editor/html_escape.js +8 -0
- package/dist/editor/html_escape.js.map +1 -0
- package/dist/editor/linestylefilter.d.ts +22 -0
- package/dist/editor/linestylefilter.d.ts.map +1 -0
- package/dist/editor/linestylefilter.js +298 -0
- package/dist/editor/linestylefilter.js.map +1 -0
- package/dist/editor/skiplist.d.ts +51 -0
- package/dist/editor/skiplist.d.ts.map +1 -0
- package/dist/editor/skiplist.js +327 -0
- package/dist/editor/skiplist.js.map +1 -0
- package/dist/editor/types/AText.d.ts +5 -0
- package/dist/editor/types/AText.d.ts.map +1 -0
- package/dist/editor/types/AText.js +2 -0
- package/dist/editor/types/AText.js.map +1 -0
- package/dist/editor/types/Attribute.d.ts +2 -0
- package/dist/editor/types/Attribute.d.ts.map +1 -0
- package/dist/editor/types/Attribute.js +2 -0
- package/dist/editor/types/Attribute.js.map +1 -0
- package/dist/editor/types/ChangeSet.d.ts +7 -0
- package/dist/editor/types/ChangeSet.d.ts.map +1 -0
- package/dist/editor/types/ChangeSet.js +2 -0
- package/dist/editor/types/ChangeSet.js.map +1 -0
- package/dist/editor/types/ChangeSetBuilder.d.ts +7 -0
- package/dist/editor/types/ChangeSetBuilder.d.ts.map +1 -0
- package/dist/editor/types/ChangeSetBuilder.js +2 -0
- package/dist/editor/types/ChangeSetBuilder.js.map +1 -0
- package/dist/editor/types/RepModel.d.ts +25 -0
- package/dist/editor/types/RepModel.d.ts.map +1 -0
- package/dist/editor/types/RepModel.js +2 -0
- package/dist/editor/types/RepModel.js.map +1 -0
- package/dist/editor/undomodule.d.ts +30 -0
- package/dist/editor/undomodule.d.ts.map +1 -0
- package/dist/editor/undomodule.js +266 -0
- package/dist/editor/undomodule.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +7 -5
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
class AttributePool {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.numToAttrib = {};
|
|
4
|
+
this.attribToNum = {};
|
|
5
|
+
this.nextNum = 0;
|
|
6
|
+
}
|
|
7
|
+
clone() {
|
|
8
|
+
const c = new AttributePool();
|
|
9
|
+
for (const [n, a] of Object.entries(this.numToAttrib)) {
|
|
10
|
+
c.numToAttrib[n] = [a[0], a[1]];
|
|
11
|
+
}
|
|
12
|
+
Object.assign(c.attribToNum, this.attribToNum);
|
|
13
|
+
c.nextNum = this.nextNum;
|
|
14
|
+
return c;
|
|
15
|
+
}
|
|
16
|
+
putAttrib(attrib, dontAddIfAbsent = false) {
|
|
17
|
+
const str = String(attrib);
|
|
18
|
+
if (str in this.attribToNum)
|
|
19
|
+
return this.attribToNum[str];
|
|
20
|
+
if (dontAddIfAbsent)
|
|
21
|
+
return -1;
|
|
22
|
+
const num = this.nextNum++;
|
|
23
|
+
this.attribToNum[str] = num;
|
|
24
|
+
this.numToAttrib[num] = [String(attrib[0] || ''), String(attrib[1] || '')];
|
|
25
|
+
return num;
|
|
26
|
+
}
|
|
27
|
+
getAttrib(num) {
|
|
28
|
+
const pair = this.numToAttrib[num];
|
|
29
|
+
if (!pair)
|
|
30
|
+
return pair;
|
|
31
|
+
return [pair[0], pair[1]];
|
|
32
|
+
}
|
|
33
|
+
getAttribKey(num) {
|
|
34
|
+
const pair = this.numToAttrib[num];
|
|
35
|
+
if (!pair)
|
|
36
|
+
return '';
|
|
37
|
+
return pair[0];
|
|
38
|
+
}
|
|
39
|
+
getAttribValue(num) {
|
|
40
|
+
const pair = this.numToAttrib[num];
|
|
41
|
+
if (!pair)
|
|
42
|
+
return '';
|
|
43
|
+
return pair[1];
|
|
44
|
+
}
|
|
45
|
+
eachAttrib(func) {
|
|
46
|
+
for (const n in this.numToAttrib) {
|
|
47
|
+
const pair = this.numToAttrib[n];
|
|
48
|
+
func(pair[0], pair[1]);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
toJsonable() {
|
|
52
|
+
return { numToAttrib: this.numToAttrib, nextNum: this.nextNum };
|
|
53
|
+
}
|
|
54
|
+
fromJsonable(obj) {
|
|
55
|
+
this.numToAttrib = obj.numToAttrib;
|
|
56
|
+
this.nextNum = obj.nextNum;
|
|
57
|
+
this.attribToNum = {};
|
|
58
|
+
for (const n of Object.keys(this.numToAttrib)) {
|
|
59
|
+
this.attribToNum[String(this.numToAttrib[n])] = Number(n);
|
|
60
|
+
}
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
check() {
|
|
64
|
+
if (!Number.isInteger(this.nextNum))
|
|
65
|
+
throw new Error('nextNum property is not an integer');
|
|
66
|
+
if (this.nextNum < 0)
|
|
67
|
+
throw new Error('nextNum property is negative');
|
|
68
|
+
for (const prop of ['numToAttrib', 'attribToNum']) {
|
|
69
|
+
const obj = prop === 'numToAttrib' ? this.numToAttrib : this.attribToNum;
|
|
70
|
+
if (obj == null)
|
|
71
|
+
throw new Error(`${prop} property is null`);
|
|
72
|
+
if (typeof obj !== 'object')
|
|
73
|
+
throw new TypeError(`${prop} property is not an object`);
|
|
74
|
+
const keys = Object.keys(obj);
|
|
75
|
+
if (keys.length !== this.nextNum) {
|
|
76
|
+
throw new Error(`${prop} size mismatch (want ${this.nextNum}, got ${keys.length})`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (let i = 0; i < this.nextNum; ++i) {
|
|
80
|
+
const attr = this.numToAttrib[`${i}`];
|
|
81
|
+
if (!Array.isArray(attr))
|
|
82
|
+
throw new TypeError(`attrib ${i} is not an array`);
|
|
83
|
+
if (attr.length !== 2)
|
|
84
|
+
throw new Error(`attrib ${i} is not an array of length 2`);
|
|
85
|
+
const [k, v] = attr;
|
|
86
|
+
if (k == null)
|
|
87
|
+
throw new TypeError(`attrib ${i} key is null`);
|
|
88
|
+
if (typeof k !== 'string')
|
|
89
|
+
throw new TypeError(`attrib ${i} key is not a string`);
|
|
90
|
+
if (v == null)
|
|
91
|
+
throw new TypeError(`attrib ${i} value is null`);
|
|
92
|
+
if (typeof v !== 'string')
|
|
93
|
+
throw new TypeError(`attrib ${i} value is not a string`);
|
|
94
|
+
const attrStr = String(attr);
|
|
95
|
+
if (this.attribToNum[attrStr] !== i)
|
|
96
|
+
throw new Error(`attribToNum for ${attrStr} !== ${i}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export default AttributePool;
|
|
101
|
+
//# sourceMappingURL=AttributePool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttributePool.js","sourceRoot":"","sources":["../../src/editor/AttributePool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Attribute } from "./types/Attribute.js";
|
|
2
|
+
import AttributePool from "./AttributePool.js";
|
|
3
|
+
export declare class Builder {
|
|
4
|
+
private readonly oldLen;
|
|
5
|
+
private assem;
|
|
6
|
+
private readonly o;
|
|
7
|
+
private charBank;
|
|
8
|
+
constructor(oldLen: number);
|
|
9
|
+
keep: (N: number, L?: number, attribs?: string | Attribute[], pool?: AttributePool) => Builder;
|
|
10
|
+
keepText: (text: string, attribs?: string | Attribute[], pool?: AttributePool) => Builder;
|
|
11
|
+
insert: (text: string, attribs: string | Attribute[] | undefined, pool?: AttributePool | null | undefined) => Builder;
|
|
12
|
+
remove: (N: number, L?: number) => Builder;
|
|
13
|
+
toString: () => string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=Builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/editor/Builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAC/C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAG/C,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,MAAM,EAAE,MAAM;IAO1B,IAAI,GAAI,GAAG,MAAM,EAAE,IAAI,MAAM,EAAE,UAAU,MAAM,GAAC,SAAS,EAAE,EAAE,OAAO,aAAa,KAAG,OAAO,CAQ1F;IAED,QAAQ,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,GAAC,SAAS,EAAE,EAAE,OAAO,aAAa,KAAG,OAAO,CAGrF;IAED,MAAM,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,GAAG,SAAS,EAAE,GAAG,SAAS,EAAE,OAAO,aAAa,GAAG,IAAI,GAAG,SAAS,KAAG,OAAO,CAInH;IAED,MAAM,GAAI,GAAG,MAAM,EAAE,IAAI,MAAM,KAAG,OAAO,CAOxC;IAED,QAAQ,eAIP;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { SmartOpAssembler } from "./SmartOpAssembler.js";
|
|
2
|
+
import Op from "./Op.js";
|
|
3
|
+
import { StringAssembler } from "./StringAssembler.js";
|
|
4
|
+
import AttributeMap from "./AttributeMap.js";
|
|
5
|
+
import { opsFromText, pack } from "./Changeset.js";
|
|
6
|
+
export class Builder {
|
|
7
|
+
constructor(oldLen) {
|
|
8
|
+
this.keep = (N, L, attribs, pool) => {
|
|
9
|
+
this.o.opcode = '=';
|
|
10
|
+
this.o.attribs = typeof attribs === 'string'
|
|
11
|
+
? attribs : new AttributeMap(pool).update(attribs || []).toString();
|
|
12
|
+
this.o.chars = N;
|
|
13
|
+
this.o.lines = (L || 0);
|
|
14
|
+
this.assem.append(this.o);
|
|
15
|
+
return this;
|
|
16
|
+
};
|
|
17
|
+
this.keepText = (text, attribs, pool) => {
|
|
18
|
+
for (const op of opsFromText('=', text, attribs, pool))
|
|
19
|
+
this.assem.append(op);
|
|
20
|
+
return this;
|
|
21
|
+
};
|
|
22
|
+
this.insert = (text, attribs, pool) => {
|
|
23
|
+
for (const op of opsFromText('+', text, attribs, pool))
|
|
24
|
+
this.assem.append(op);
|
|
25
|
+
this.charBank.append(text);
|
|
26
|
+
return this;
|
|
27
|
+
};
|
|
28
|
+
this.remove = (N, L) => {
|
|
29
|
+
this.o.opcode = '-';
|
|
30
|
+
this.o.attribs = '';
|
|
31
|
+
this.o.chars = N;
|
|
32
|
+
this.o.lines = (L || 0);
|
|
33
|
+
this.assem.append(this.o);
|
|
34
|
+
return this;
|
|
35
|
+
};
|
|
36
|
+
this.toString = () => {
|
|
37
|
+
this.assem.endDocument();
|
|
38
|
+
const newLen = this.oldLen + this.assem.getLengthChange();
|
|
39
|
+
return pack(this.oldLen, newLen, this.assem.toString(), this.charBank.toString());
|
|
40
|
+
};
|
|
41
|
+
this.oldLen = oldLen;
|
|
42
|
+
this.assem = new SmartOpAssembler();
|
|
43
|
+
this.o = new Op();
|
|
44
|
+
this.charBank = new StringAssembler();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=Builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.js","sourceRoot":"","sources":["../../src/editor/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import AttributePool from "./AttributePool.js";
|
|
2
|
+
import Op from './Op.js';
|
|
3
|
+
import { OpIter } from "./OpIter.js";
|
|
4
|
+
import { Attribute } from "./types/Attribute.js";
|
|
5
|
+
import { SmartOpAssembler } from "./SmartOpAssembler.js";
|
|
6
|
+
import TextLinesMutator from "./TextLinesMutator.js";
|
|
7
|
+
import { ChangeSet } from "./types/ChangeSet.js";
|
|
8
|
+
import { AText } from "./types/AText.js";
|
|
9
|
+
export declare const assert: (b: boolean, msg: string) => asserts b;
|
|
10
|
+
export declare const oldLen: (cs: string) => number;
|
|
11
|
+
export declare const newLen: (cs: string) => number;
|
|
12
|
+
export declare const deserializeOps: (ops: string) => Generator<Op, void, unknown>;
|
|
13
|
+
export declare const opIterator: (opsStr: string) => OpIter;
|
|
14
|
+
export declare const clearOp: (op: Op) => void;
|
|
15
|
+
export declare const newOp: (optOpcode: "+" | "-" | "=" | "") => Op;
|
|
16
|
+
export declare const copyOp: (op1: Op, op2?: Op) => Op;
|
|
17
|
+
export declare const opsFromText: (opcode: "" | "=" | "+" | "-" | undefined, text: string, attribs?: string | Attribute[], pool?: AttributePool | null) => Generator<Op, void, unknown>;
|
|
18
|
+
export declare const checkRep: (cs: string) => string;
|
|
19
|
+
export declare const unpack: (cs: string) => ChangeSet;
|
|
20
|
+
export declare const pack: (oldLen: number, newLen: number, opsStr: string, bank: string) => string;
|
|
21
|
+
export declare const applyToText: (cs: string, str: string) => string;
|
|
22
|
+
export declare const mutateTextLines: (cs: string, lines: RegExpMatchArray | string[] | null) => void;
|
|
23
|
+
export declare const composeAttributes: (att1: string, att2: string, resultIsMutation: boolean, pool?: AttributePool | null) => string;
|
|
24
|
+
export declare const mutateAttributionLines: (cs: string, lines: string[] | RegExpMatchArray, pool: AttributePool | null) => void;
|
|
25
|
+
export declare const slicerZipperFunc: (attOp: Op, csOp: Op, pool: AttributePool | null) => Op;
|
|
26
|
+
export declare const applyToAttribution: (cs: string, astr: string, pool: AttributePool) => string;
|
|
27
|
+
export declare const joinAttributionLines: (theAlines: string[]) => string;
|
|
28
|
+
export declare const splitAttributionLines: (attrOps: string, text: string) => string[];
|
|
29
|
+
export declare const splitTextLines: (text: string) => RegExpMatchArray | null;
|
|
30
|
+
export declare const compose: (cs1: string, cs2: string, pool: AttributePool) => string;
|
|
31
|
+
export declare const attributeTester: (attribPair: Attribute, pool: AttributePool) => (attribs: string) => boolean;
|
|
32
|
+
export declare const identity: (N: number) => string;
|
|
33
|
+
export declare const makeSplice: (orig: string, start: number, ndel: number, ins: string | null, attribs?: string | Attribute[] | undefined, pool?: AttributePool | null | undefined) => string;
|
|
34
|
+
export declare const characterRangeFollow: (cs: string, startChar: number, endChar: number, insertionsAfter: number) => [number, number];
|
|
35
|
+
export declare const moveOpsToNewPool: (cs: string, oldPool: AttributePool, newPool: AttributePool) => string;
|
|
36
|
+
export declare const makeAttribution: (text: string) => string;
|
|
37
|
+
export declare const eachAttribNumber: (cs: string, func: (num: number) => void) => void;
|
|
38
|
+
export declare const filterAttribNumbers: (cs: string, filter: (num: number) => boolean | number) => string;
|
|
39
|
+
export declare const mapAttribNumbers: (cs: string, func: (num: number) => boolean | number) => string;
|
|
40
|
+
export declare const makeAText: (text: string, attribs?: string) => AText;
|
|
41
|
+
export declare const applyToAText: (cs: string, atext: AText, pool: AttributePool) => AText;
|
|
42
|
+
export declare const cloneAText: (atext: AText) => AText;
|
|
43
|
+
export declare const copyAText: (atext1: AText, atext2: AText) => void;
|
|
44
|
+
export declare const opsFromAText: (atext: AText) => Generator<Op>;
|
|
45
|
+
export declare const appendATextToAssembler: (atext: AText, assem: SmartOpAssembler) => void;
|
|
46
|
+
export declare const prepareForWire: (cs: string, pool: AttributePool) => {
|
|
47
|
+
translated: string;
|
|
48
|
+
pool: AttributePool;
|
|
49
|
+
};
|
|
50
|
+
export declare const isIdentity: (cs: string) => boolean;
|
|
51
|
+
export declare const subattribution: (astr: string, start: number, optEnd?: number) => string;
|
|
52
|
+
export declare const inverse: (cs: string, lines: string | RegExpMatchArray | string[] | null, alines: string[] | {
|
|
53
|
+
get: (idx: number) => string;
|
|
54
|
+
}, pool: AttributePool) => string;
|
|
55
|
+
export declare const follow: (cs1: string, cs2: string, reverseInsertOrder: boolean, pool: AttributePool) => string;
|
|
56
|
+
export declare const exportedForTestingOnly: {
|
|
57
|
+
TextLinesMutator: typeof TextLinesMutator;
|
|
58
|
+
followAttributes: (att1: string, att2: string, pool: AttributePool) => string;
|
|
59
|
+
toSplices: (cs: string) => [number, number, string][];
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=Changeset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Changeset.d.ts","sourceRoot":"","sources":["../../src/editor/Changeset.ts"],"names":[],"mappings":"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"}
|