@pierre/diffs 1.6.0-beta.1 → 1.6.0
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/components/CodeView.d.ts +3 -2
- package/dist/components/CodeView.d.ts.map +1 -1
- package/dist/components/CodeView.js +18 -14
- package/dist/components/CodeView.js.map +1 -1
- package/dist/components/File.d.ts +31 -9
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +165 -84
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +32 -9
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +213 -124
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/UnresolvedFile.d.ts +14 -4
- package/dist/components/UnresolvedFile.d.ts.map +1 -1
- package/dist/components/UnresolvedFile.js +35 -16
- package/dist/components/UnresolvedFile.js.map +1 -1
- package/dist/components/VirtualizedFile.d.ts +3 -2
- package/dist/components/VirtualizedFile.d.ts.map +1 -1
- package/dist/components/VirtualizedFile.js +28 -20
- package/dist/components/VirtualizedFile.js.map +1 -1
- package/dist/components/VirtualizedFileDiff.d.ts +3 -2
- package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
- package/dist/components/VirtualizedFileDiff.js +31 -24
- package/dist/components/VirtualizedFileDiff.js.map +1 -1
- package/dist/constants.d.ts +2 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/editor/platform.d.ts +1 -1
- package/dist/editor/platform.js +5 -4
- package/dist/editor/platform.js.map +1 -1
- package/dist/editor/selection.d.ts +2 -2
- package/dist/editor/selection.d.ts.map +1 -1
- package/dist/editor/selection.js +31 -6
- package/dist/editor/selection.js.map +1 -1
- package/dist/highlighter/shared_highlighter.d.ts +2 -1
- package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
- package/dist/highlighter/shared_highlighter.js +2 -2
- package/dist/highlighter/shared_highlighter.js.map +1 -1
- package/dist/index.d.ts +10 -5
- package/dist/index.js +8 -3
- package/dist/react/CodeView.d.ts +4 -3
- package/dist/react/CodeView.d.ts.map +1 -1
- package/dist/react/CodeView.js +48 -39
- package/dist/react/CodeView.js.map +1 -1
- package/dist/react/File.js +3 -3
- package/dist/react/File.js.map +1 -1
- package/dist/react/FileDiff.js +3 -3
- package/dist/react/FileDiff.js.map +1 -1
- package/dist/react/MultiFileDiff.js +2 -2
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/PatchDiff.js +3 -3
- package/dist/react/PatchDiff.js.map +1 -1
- package/dist/react/UnresolvedFile.js +2 -2
- package/dist/react/UnresolvedFile.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/types.d.ts +4 -2
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.js +1 -1
- package/dist/react/utils/renderDiffChildren.js.map +1 -1
- package/dist/react/utils/renderFileChildren.js +1 -1
- package/dist/react/utils/renderFileChildren.js.map +1 -1
- package/dist/react/utils/useFileDiffInstance.d.ts +1 -0
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.js +29 -24
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/react/utils/useFileInstance.d.ts +2 -0
- package/dist/react/utils/useFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileInstance.js +38 -28
- package/dist/react/utils/useFileInstance.js.map +1 -1
- package/dist/react/utils/useForceUpdate.d.ts +5 -0
- package/dist/react/utils/useForceUpdate.d.ts.map +1 -0
- package/dist/react/utils/useForceUpdate.js +27 -0
- package/dist/react/utils/useForceUpdate.js.map +1 -0
- package/dist/react/utils/useNextRenderData.d.ts +9 -0
- package/dist/react/utils/useNextRenderData.d.ts.map +1 -0
- package/dist/react/utils/useNextRenderData.js +9 -0
- package/dist/react/utils/useNextRenderData.js.map +1 -0
- package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -0
- package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useUnresolvedFileInstance.js +26 -11
- package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +2 -1
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +62 -32
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +4 -1
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +55 -30
- package/dist/renderers/FileRenderer.js.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
- package/dist/ssr/FileDiffReact.js +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/canUseWASM.d.ts +13 -0
- package/dist/utils/canUseWASM.d.ts.map +1 -0
- package/dist/utils/canUseWASM.js +59 -0
- package/dist/utils/canUseWASM.js.map +1 -0
- package/dist/utils/getCodeViewItemRenderData.d.ts +10 -0
- package/dist/utils/getCodeViewItemRenderData.d.ts.map +1 -0
- package/dist/utils/getCodeViewItemRenderData.js +19 -0
- package/dist/utils/getCodeViewItemRenderData.js.map +1 -0
- package/dist/utils/hastToHtml.d.ts +2 -2
- package/dist/utils/hastToHtml.js +2 -2
- package/dist/utils/hastToHtml.js.map +1 -1
- package/dist/utils/hydratePartialDiff.js +4 -0
- package/dist/utils/hydratePartialDiff.js.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.js +2 -0
- package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
- package/dist/utils/parsePatchFiles.d.ts.map +1 -1
- package/dist/utils/parsePatchFiles.js +24 -4
- package/dist/utils/parsePatchFiles.js.map +1 -1
- package/dist/utils/renderTokenLines.d.ts +6 -1
- package/dist/utils/renderTokenLines.d.ts.map +1 -1
- package/dist/utils/renderTokenLines.js +4 -0
- package/dist/utils/renderTokenLines.js.map +1 -1
- package/dist/utils/resolveRegion.js +20 -10
- package/dist/utils/resolveRegion.js.map +1 -1
- package/dist/utils/tokenStyle.d.ts +5 -1
- package/dist/utils/tokenStyle.d.ts.map +1 -1
- package/dist/utils/tokenStyle.js +5 -1
- package/dist/utils/tokenStyle.js.map +1 -1
- package/dist/utils/tokensToHtml.d.ts +5 -2
- package/dist/utils/tokensToHtml.d.ts.map +1 -1
- package/dist/utils/tokensToHtml.js +5 -2
- package/dist/utils/tokensToHtml.js.map +1 -1
- package/dist/utils/updateDiffHunks.d.ts +2 -2
- package/dist/utils/updateDiffHunks.d.ts.map +1 -1
- package/dist/utils/updateDiffHunks.js +7 -3
- package/dist/utils/updateDiffHunks.js.map +1 -1
- package/dist/worker/WorkerPoolManager.d.ts +12 -0
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +99 -21
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/{highlights-sAHlxqlf.js → highlights-CpZm9DAR.js} +2 -2
- package/dist/worker/{highlights-sAHlxqlf.js.map → highlights-CpZm9DAR.js.map} +1 -1
- package/dist/worker/{shiki-Bx2JpdqZ.js → shiki-Ci4cdHsM.js} +2 -2
- package/dist/worker/{shiki-Bx2JpdqZ.js.map → shiki-Ci4cdHsM.js.map} +1 -1
- package/dist/worker/{stream-tokenizer-YZ6M1qSx.js → stream-tokenizer-DK9xp5M5.js} +8 -5
- package/dist/worker/stream-tokenizer-DK9xp5M5.js.map +1 -0
- package/dist/worker/types.d.ts +11 -0
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/worker-portable.js +2 -2
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +12 -3
- package/dist/worker/worker.js.map +1 -1
- package/package.json +28 -30
- package/dist/worker/stream-tokenizer-YZ6M1qSx.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isLinux, isMacLike, isSafari, resetPlatformDetection } from "../utils/platform.js";
|
|
2
2
|
//#region src/editor/platform.d.ts
|
|
3
3
|
declare function isPrimaryModifier({ metaKey, ctrlKey }: MouseEvent | KeyboardEvent, isMac?: boolean): boolean;
|
|
4
|
-
declare function isMoveCursorShortcut(e: KeyboardEvent): 'up' | 'down' | 'left' | 'right' | 'start' | 'textStart' | 'end' | undefined;
|
|
4
|
+
declare function isMoveCursorShortcut(e: KeyboardEvent): 'up' | 'down' | 'left' | 'right' | 'start' | 'textStart' | 'end' | 'wordLeft' | 'wordRight' | undefined;
|
|
5
5
|
//#endregion
|
|
6
6
|
export { isLinux, isMacLike, isMoveCursorShortcut, isPrimaryModifier, isSafari, resetPlatformDetection };
|
|
7
7
|
//# sourceMappingURL=platform.d.ts.map
|
package/dist/editor/platform.js
CHANGED
|
@@ -4,7 +4,8 @@ function isPrimaryModifier({ metaKey, ctrlKey }, isMac = isMacLike()) {
|
|
|
4
4
|
return isMac ? metaKey && !ctrlKey : ctrlKey && !metaKey;
|
|
5
5
|
}
|
|
6
6
|
function isMoveCursorShortcut(e) {
|
|
7
|
-
|
|
7
|
+
const isMac = isMacLike();
|
|
8
|
+
if (isMac && e.ctrlKey && !e.altKey && !e.metaKey) switch (e.key) {
|
|
8
9
|
case "a": return "start";
|
|
9
10
|
case "e": return "end";
|
|
10
11
|
case "p": return "up";
|
|
@@ -20,9 +21,9 @@ function isMoveCursorShortcut(e) {
|
|
|
20
21
|
else if (e.key === "Home") return "start";
|
|
21
22
|
else if (e.key === "End") return "end";
|
|
22
23
|
}
|
|
23
|
-
if (isPrimaryModifier(e)) {
|
|
24
|
-
if (e.key === "ArrowLeft") return "textStart";
|
|
25
|
-
else if (e.key === "ArrowRight") return "end";
|
|
24
|
+
if (!e.altKey && isPrimaryModifier(e, isMac)) {
|
|
25
|
+
if (e.key === "ArrowLeft") return isMac ? "textStart" : "wordLeft";
|
|
26
|
+
else if (e.key === "ArrowRight") return isMac ? "end" : "wordRight";
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","names":[],"sources":["../../src/editor/platform.ts"],"sourcesContent":["import {\n isLinux,\n isMacLike,\n isSafari,\n resetPlatformDetection,\n} from '../utils/platform';\n\nexport { isLinux, isMacLike, isSafari, resetPlatformDetection };\n\nexport function isPrimaryModifier(\n { metaKey, ctrlKey }: MouseEvent | KeyboardEvent,\n isMac: boolean = isMacLike()\n): boolean {\n return isMac ? metaKey && !ctrlKey : ctrlKey && !metaKey;\n}\n\nexport function isMoveCursorShortcut(\n e: KeyboardEvent\n):\n | 'up'\n | 'down'\n | 'left'\n | 'right'\n | 'start'\n | 'textStart'\n | 'end'\n | undefined {\n // emacs key bindings\n if (
|
|
1
|
+
{"version":3,"file":"platform.js","names":[],"sources":["../../src/editor/platform.ts"],"sourcesContent":["import {\n isLinux,\n isMacLike,\n isSafari,\n resetPlatformDetection,\n} from '../utils/platform';\n\nexport { isLinux, isMacLike, isSafari, resetPlatformDetection };\n\nexport function isPrimaryModifier(\n { metaKey, ctrlKey }: MouseEvent | KeyboardEvent,\n isMac: boolean = isMacLike()\n): boolean {\n return isMac ? metaKey && !ctrlKey : ctrlKey && !metaKey;\n}\n\nexport function isMoveCursorShortcut(\n e: KeyboardEvent\n):\n | 'up'\n | 'down'\n | 'left'\n | 'right'\n | 'start'\n | 'textStart'\n | 'end'\n | 'wordLeft'\n | 'wordRight'\n | undefined {\n const isMac = isMacLike();\n // emacs key bindings\n if (isMac && e.ctrlKey && !e.altKey && !e.metaKey) {\n switch (e.key) {\n case 'a':\n return 'start';\n case 'e':\n return 'end';\n case 'p':\n return 'up';\n case 'n':\n return 'down';\n case 'f':\n return 'right';\n case 'b':\n return 'left';\n }\n }\n\n if (!e.altKey && !e.ctrlKey && !e.metaKey) {\n if (e.key === 'ArrowUp') {\n return 'up';\n } else if (e.key === 'ArrowDown') {\n return 'down';\n } else if (e.key === 'ArrowLeft') {\n return 'left';\n } else if (e.key === 'ArrowRight') {\n return 'right';\n } else if (e.key === 'Home') {\n return 'start';\n } else if (e.key === 'End') {\n return 'end';\n }\n }\n\n // Cmd+Arrow jumps to line edges on macOS; Ctrl+Arrow moves by word on\n // Windows/Linux. macOS Option+Arrow stays with the browser.\n if (!e.altKey && isPrimaryModifier(e, isMac)) {\n if (e.key === 'ArrowLeft') {\n return isMac ? 'textStart' : 'wordLeft';\n } else if (e.key === 'ArrowRight') {\n return isMac ? 'end' : 'wordRight';\n }\n }\n\n return undefined;\n}\n"],"mappings":";;AASA,SAAgB,kBACd,EAAE,SAAS,WACX,QAAiB,UAAU,GAClB;CACT,OAAO,QAAQ,WAAW,CAAC,UAAU,WAAW,CAAC;AACnD;AAEA,SAAgB,qBACd,GAWY;CACZ,MAAM,QAAQ,UAAU;CAExB,IAAI,SAAS,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,SACxC,QAAQ,EAAE,KAAV;EACE,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;CACX;CAGF,IAAI,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,SAAS;EACzC,IAAI,EAAE,QAAQ,WACZ,OAAO;OACF,IAAI,EAAE,QAAQ,aACnB,OAAO;OACF,IAAI,EAAE,QAAQ,aACnB,OAAO;OACF,IAAI,EAAE,QAAQ,cACnB,OAAO;OACF,IAAI,EAAE,QAAQ,QACnB,OAAO;OACF,IAAI,EAAE,QAAQ,OACnB,OAAO;CAEX;CAIA,IAAI,CAAC,EAAE,UAAU,kBAAkB,GAAG,KAAK,GAAG;EAC5C,IAAI,EAAE,QAAQ,aACZ,OAAO,QAAQ,cAAc;OACxB,IAAI,EAAE,QAAQ,cACnB,OAAO,QAAQ,QAAQ;CAE3B;AAGF"}
|
|
@@ -33,12 +33,12 @@ type ResolveRenderableLine = (line: number, direction: 'up' | 'down') => number
|
|
|
33
33
|
/**
|
|
34
34
|
* Maps the cursor move to all selections.
|
|
35
35
|
*/
|
|
36
|
-
declare function mapCursorMove(textDocument: TextDocument, selections: EditorSelection[], shortcut: 'textStart' | 'start' | 'end' | 'up' | 'down' | 'left' | 'right', options?: CursorMoveOptions): EditorSelection[];
|
|
36
|
+
declare function mapCursorMove(textDocument: TextDocument, selections: EditorSelection[], shortcut: 'textStart' | 'start' | 'end' | 'up' | 'down' | 'left' | 'right' | 'wordLeft' | 'wordRight', options?: CursorMoveOptions): EditorSelection[];
|
|
37
37
|
declare function snapCharacterToGraphemeBoundary(lineText: string, character: number): number;
|
|
38
38
|
/**
|
|
39
39
|
* Same as mapCursorMove, but with shift key pressed.
|
|
40
40
|
*/
|
|
41
|
-
declare function mapSelectionShift(textDocument: TextDocument, selections: EditorSelection[], shortcut: 'textStart' | 'start' | 'end' | 'up' | 'down' | 'left' | 'right', options?: CursorMoveOptions): EditorSelection[];
|
|
41
|
+
declare function mapSelectionShift(textDocument: TextDocument, selections: EditorSelection[], shortcut: 'textStart' | 'start' | 'end' | 'up' | 'down' | 'left' | 'right' | 'wordLeft' | 'wordRight', options?: CursorMoveOptions): EditorSelection[];
|
|
42
42
|
/**
|
|
43
43
|
* Applies a text change to the given text document
|
|
44
44
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection.d.ts","names":[],"sources":["../../src/editor/selection.ts"],"mappings":";;;cAkBa;cACA;cACA;UAgBI;EACf,sBAAsB,iBAAiB;;;;;;;;EAQvC,wBAAwB;;;;;iBAaV,iBACd,OAAO,aACP,YAAW,qBACV;;;;iBAgBa,mBACd,cAAc,cACd,WAAW,iBACX,iBACA,oBACE,OAAO,YAAY,eAAe;;;;;;;KAwE1B,yBACV,cACA;;;;iBAMc,cACd,cAAc,cACd,YAAY,mBACZ,
|
|
1
|
+
{"version":3,"file":"selection.d.ts","names":[],"sources":["../../src/editor/selection.ts"],"mappings":"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"}
|
package/dist/editor/selection.js
CHANGED
|
@@ -101,7 +101,7 @@ function resolveIndentEdits(textDocument, selection, tabSize, outdent) {
|
|
|
101
101
|
function mapCursorMove(textDocument, selections, shortcut, options = {}) {
|
|
102
102
|
const lineCount = textDocument.lineCount;
|
|
103
103
|
return selections.map((selection) => {
|
|
104
|
-
let { line, character } = shortcut === "up" || shortcut === "left" ? selection.start : selection.end;
|
|
104
|
+
let { line, character } = shortcut === "up" || shortcut === "left" || shortcut === "wordLeft" ? selection.start : selection.end;
|
|
105
105
|
if (shortcut === "textStart" || shortcut === "start" || shortcut === "end") {
|
|
106
106
|
const caret = getCaretPosition(selection);
|
|
107
107
|
line = caret.line;
|
|
@@ -130,8 +130,8 @@ function mapCursorMove(textDocument, selections, shortcut, options = {}) {
|
|
|
130
130
|
} else if (isCollapsedSelection(selection)) {
|
|
131
131
|
const lineLength = textDocument.getLineLength(line);
|
|
132
132
|
character = Math.min(character, lineLength);
|
|
133
|
-
if (shortcut === "left") {
|
|
134
|
-
if (character > 0) character = stepCharacterByGrapheme(textDocument, line, character, false);
|
|
133
|
+
if (shortcut === "left" || shortcut === "wordLeft") {
|
|
134
|
+
if (character > 0) character = shortcut === "left" ? stepCharacterByGrapheme(textDocument, line, character, false) : findWordBoundary(textDocument.getLineText(line), character, false);
|
|
135
135
|
else if (line > 0) {
|
|
136
136
|
const targetLine = options.resolveRenderableLine == null ? line - 1 : options.resolveRenderableLine(line - 1, "up");
|
|
137
137
|
if (targetLine !== void 0) {
|
|
@@ -139,7 +139,7 @@ function mapCursorMove(textDocument, selections, shortcut, options = {}) {
|
|
|
139
139
|
character = textDocument.getLineLength(line);
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
|
-
} else if (character < lineLength) character = stepCharacterByGrapheme(textDocument, line, character, true);
|
|
142
|
+
} else if (character < lineLength) character = shortcut === "right" ? stepCharacterByGrapheme(textDocument, line, character, true) : findWordBoundary(textDocument.getLineText(line), character, true);
|
|
143
143
|
else if (line < lineCount - 1) {
|
|
144
144
|
const targetLine = options.resolveRenderableLine == null ? line + 1 : options.resolveRenderableLine(line + 1, "down");
|
|
145
145
|
if (targetLine !== void 0) {
|
|
@@ -1260,8 +1260,7 @@ function resolveDeleteWordBackwardRange(textDocument, selection) {
|
|
|
1260
1260
|
let match;
|
|
1261
1261
|
while (pos > 0) {
|
|
1262
1262
|
const prev = findClusterBreak(lineText, pos, false, graphemeStarts);
|
|
1263
|
-
const
|
|
1264
|
-
const nextMatch = !/\S/.test(nextChar) ? 0 : /\p{Alphabetic}|\p{Number}|_/u.test(nextChar) ? 1 : 2;
|
|
1263
|
+
const nextMatch = getWordCharKind(lineText.slice(prev, pos));
|
|
1265
1264
|
if (match !== void 0 && nextMatch !== match) break;
|
|
1266
1265
|
if (nextMatch !== 0 || pos !== head) match = nextMatch;
|
|
1267
1266
|
pos = prev;
|
|
@@ -1274,6 +1273,32 @@ function resolveDeleteWordBackwardRange(textDocument, selection) {
|
|
|
1274
1273
|
character: head
|
|
1275
1274
|
}];
|
|
1276
1275
|
}
|
|
1276
|
+
function getWordCharKind(text) {
|
|
1277
|
+
return !/\S/.test(text) ? 0 : /\p{Alphabetic}|\p{Number}|_/u.test(text) ? 1 : 2;
|
|
1278
|
+
}
|
|
1279
|
+
function findWordBoundary(lineText, character, forward) {
|
|
1280
|
+
const segments = getGraphemeSegmenter()?.segment(lineText);
|
|
1281
|
+
let pos = character;
|
|
1282
|
+
let kind = 0;
|
|
1283
|
+
while (forward ? pos < lineText.length : pos > 0) {
|
|
1284
|
+
let text;
|
|
1285
|
+
let next;
|
|
1286
|
+
const segment = segments?.containing(forward ? pos : pos - 1);
|
|
1287
|
+
if (segment !== void 0) {
|
|
1288
|
+
text = segment.segment;
|
|
1289
|
+
next = forward ? segment.index + text.length : segment.index;
|
|
1290
|
+
} else {
|
|
1291
|
+
const start = forward ? pos : (lineText.codePointAt(pos - 2) ?? 0) > 65535 ? pos - 2 : pos - 1;
|
|
1292
|
+
text = String.fromCodePoint(lineText.codePointAt(start) ?? 0);
|
|
1293
|
+
next = forward ? pos + text.length : start;
|
|
1294
|
+
}
|
|
1295
|
+
const nextKind = getWordCharKind(text);
|
|
1296
|
+
if (kind !== 0 && nextKind !== kind) break;
|
|
1297
|
+
kind = nextKind;
|
|
1298
|
+
pos = next;
|
|
1299
|
+
}
|
|
1300
|
+
return pos;
|
|
1301
|
+
}
|
|
1277
1302
|
function findClusterBreak(text, pos, forward, graphemeStarts) {
|
|
1278
1303
|
if (forward) {
|
|
1279
1304
|
for (const start of graphemeStarts) if (start > pos) return start;
|