monaco-editor-core 0.54.0 → 0.55.0-dev-20251007
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/esm/nls.messages.de.js +1 -1
- package/esm/nls.messages.es.js +1 -1
- package/esm/nls.messages.fr.js +1 -1
- package/esm/nls.messages.it.js +1 -1
- package/esm/nls.messages.ja.js +1 -1
- package/esm/nls.messages.ko.js +1 -1
- package/esm/nls.messages.ru.js +1 -1
- package/esm/nls.messages.zh-cn.js +1 -1
- package/esm/nls.messages.zh-tw.js +1 -1
- package/esm/vs/base/browser/canIUse.js +1 -0
- package/esm/vs/base/browser/canIUse.js.map +1 -1
- package/esm/vs/base/browser/dom.js +9 -0
- package/esm/vs/base/browser/dom.js.map +1 -1
- package/esm/vs/base/browser/fastDomNode.js.map +1 -1
- package/esm/vs/base/browser/mouseEvent.js +3 -0
- package/esm/vs/base/browser/mouseEvent.js.map +1 -1
- package/esm/vs/base/browser/trustedTypes.js +2 -0
- package/esm/vs/base/browser/trustedTypes.js.map +1 -1
- package/esm/vs/base/browser/ui/list/listWidget.js +5 -5
- package/esm/vs/base/browser/ui/list/listWidget.js.map +1 -1
- package/esm/vs/base/browser/ui/sash/sash.css +1 -1
- package/esm/vs/base/browser/ui/sash/sash.js +4 -0
- package/esm/vs/base/browser/ui/sash/sash.js.map +1 -1
- package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js +1 -1
- package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js.map +1 -1
- package/esm/vs/base/browser/ui/table/table.css +2 -2
- package/esm/vs/base/browser/ui/tree/abstractTree.js +7 -3
- package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/asyncDataTree.js +4 -0
- package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/indexTreeModel.js +1 -0
- package/esm/vs/base/browser/ui/tree/indexTreeModel.js.map +1 -1
- package/esm/vs/base/browser/ui/tree/media/tree.css +2 -2
- package/esm/vs/base/browser/webWorkerFactory.js +3 -0
- package/esm/vs/base/browser/webWorkerFactory.js.map +1 -1
- package/esm/vs/base/common/buffer.js.map +1 -1
- package/esm/vs/base/common/decorators.js +1 -0
- package/esm/vs/base/common/decorators.js.map +1 -1
- package/esm/vs/base/common/errors.js +1 -0
- package/esm/vs/base/common/errors.js.map +1 -1
- package/esm/vs/base/common/glob.js +1 -1
- package/esm/vs/base/common/glob.js.map +1 -1
- package/esm/vs/base/common/hash.js.map +1 -1
- package/esm/vs/base/common/hotReload.js +2 -0
- package/esm/vs/base/common/hotReload.js.map +1 -1
- package/esm/vs/base/common/hotReloadHelpers.js +1 -0
- package/esm/vs/base/common/hotReloadHelpers.js.map +1 -1
- package/esm/vs/base/common/lifecycle.js +19 -0
- package/esm/vs/base/common/lifecycle.js.map +1 -1
- package/esm/vs/base/common/map.js.map +1 -1
- package/esm/vs/base/common/marshalling.js +4 -0
- package/esm/vs/base/common/marshalling.js.map +1 -1
- package/esm/vs/base/common/network.js +1 -0
- package/esm/vs/base/common/network.js.map +1 -1
- package/esm/vs/base/common/objects.js +1 -0
- package/esm/vs/base/common/objects.js.map +1 -1
- package/esm/vs/base/common/observableInternal/changeTracker.js +4 -0
- package/esm/vs/base/common/observableInternal/changeTracker.js.map +1 -1
- package/esm/vs/base/common/observableInternal/debugLocation.js +1 -0
- package/esm/vs/base/common/observableInternal/debugLocation.js.map +1 -1
- package/esm/vs/base/common/observableInternal/debugName.js +1 -0
- package/esm/vs/base/common/observableInternal/debugName.js.map +1 -1
- package/esm/vs/base/common/observableInternal/logging/consoleObservableLogger.js +1 -0
- package/esm/vs/base/common/observableInternal/logging/consoleObservableLogger.js.map +1 -1
- package/esm/vs/base/common/observableInternal/logging/debugger/debuggerRpc.js +1 -0
- package/esm/vs/base/common/observableInternal/logging/debugger/debuggerRpc.js.map +1 -1
- package/esm/vs/base/common/observableInternal/logging/debugger/rpc.js +1 -0
- package/esm/vs/base/common/observableInternal/logging/debugger/rpc.js.map +1 -1
- package/esm/vs/base/common/observableInternal/observables/derived.js +7 -1
- package/esm/vs/base/common/observableInternal/observables/derived.js.map +1 -1
- package/esm/vs/base/common/observableInternal/observables/derivedImpl.js +2 -0
- package/esm/vs/base/common/observableInternal/observables/derivedImpl.js.map +1 -1
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -0
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +1 -0
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
- package/esm/vs/base/common/process.js +1 -0
- package/esm/vs/base/common/process.js.map +1 -1
- package/esm/vs/base/common/product.js.map +1 -1
- package/esm/vs/base/common/types.js +2 -0
- package/esm/vs/base/common/types.js.map +1 -1
- package/esm/vs/base/common/worker/webWorker.js +26 -14
- package/esm/vs/base/common/worker/webWorker.js.map +1 -1
- package/esm/vs/base/parts/sandbox/common/sandboxTypes.js +2 -0
- package/esm/vs/base/parts/sandbox/common/sandboxTypes.js.map +1 -0
- package/esm/vs/editor/browser/config/editorConfiguration.js +3 -2
- package/esm/vs/editor/browser/config/editorConfiguration.js.map +1 -1
- package/esm/vs/editor/browser/config/migrateOptions.js +1 -1
- package/esm/vs/editor/browser/config/migrateOptions.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/editContextFactory.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.js +2 -0
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/mouseHandler.js +2 -1
- package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
- package/esm/vs/editor/browser/controller/mouseTarget.js +7 -0
- package/esm/vs/editor/browser/controller/mouseTarget.js.map +1 -1
- package/esm/vs/editor/browser/controller/pointerHandler.js.map +1 -1
- package/esm/vs/editor/browser/coreCommands.js.map +1 -1
- package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
- package/esm/vs/editor/browser/editorDom.js.map +1 -1
- package/esm/vs/editor/browser/editorExtensions.js.map +1 -1
- package/esm/vs/editor/browser/gpu/gpuUtils.js +1 -0
- package/esm/vs/editor/browser/gpu/gpuUtils.js.map +1 -1
- package/esm/vs/editor/browser/gpu/viewGpuContext.js +1 -0
- package/esm/vs/editor/browser/gpu/viewGpuContext.js.map +1 -1
- package/esm/vs/editor/browser/services/abstractCodeEditorService.js.map +1 -1
- package/esm/vs/editor/browser/services/bulkEditService.js.map +1 -1
- package/esm/vs/editor/browser/services/codeEditorService.js.map +1 -1
- package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
- package/esm/vs/editor/browser/services/hoverService/hover.css +2 -0
- package/esm/vs/editor/browser/services/hoverService/hoverService.js.map +1 -1
- package/esm/vs/editor/browser/services/hoverService/hoverWidget.js +1 -1
- package/esm/vs/editor/browser/services/hoverService/hoverWidget.js.map +1 -1
- package/esm/vs/editor/browser/services/inlineCompletionsService.js +8 -8
- package/esm/vs/editor/browser/services/inlineCompletionsService.js.map +1 -1
- package/esm/vs/editor/browser/services/openerService.js.map +1 -1
- package/esm/vs/editor/browser/view/viewLayer.js +1 -1
- package/esm/vs/editor/browser/view/viewLayer.js.map +1 -1
- package/esm/vs/editor/browser/view.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +1 -0
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js +1 -0
- package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js.map +1 -1
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorContributions.js.map +1 -1
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +4 -1
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +1 -0
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/delegatingEditorImpl.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/diffEditorOptions.js +1 -0
- package/esm/vs/editor/browser/widget/diffEditor/diffEditorOptions.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js +1 -0
- package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/utils.js +2 -0
- package/esm/vs/editor/browser/widget/diffEditor/utils.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js +2 -0
- package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js.map +1 -1
- package/esm/vs/editor/common/config/editorOptions.js +122 -68
- package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
- package/esm/vs/editor/common/config/fontInfo.js +32 -16
- package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
- package/esm/vs/editor/common/config/fontInfoFromSettings.js +16 -0
- package/esm/vs/editor/common/config/fontInfoFromSettings.js.map +1 -0
- package/esm/vs/editor/common/core/edits/edit.js +1 -0
- package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
- package/esm/vs/editor/common/core/edits/stringEdit.js +2 -0
- package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
- package/esm/vs/editor/common/core/position.js +1 -1
- package/esm/vs/editor/common/core/position.js.map +1 -1
- package/esm/vs/editor/common/core/range.js +1 -1
- package/esm/vs/editor/common/core/range.js.map +1 -1
- package/esm/vs/editor/common/core/selection.js +1 -1
- package/esm/vs/editor/common/core/selection.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
- package/esm/vs/editor/common/editorCommon.js.map +1 -1
- package/esm/vs/editor/common/languages.js +1 -1
- package/esm/vs/editor/common/languages.js.map +1 -1
- package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.js +14 -0
- package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.js.map +1 -1
- package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js +2 -0
- package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js.map +1 -1
- package/esm/vs/editor/common/model/textModel.js +1 -1
- package/esm/vs/editor/common/model/textModel.js.map +1 -1
- package/esm/vs/editor/common/model.js +1 -1
- package/esm/vs/editor/common/model.js.map +1 -1
- package/esm/vs/editor/common/services/editorBaseApi.js.map +1 -1
- package/esm/vs/editor/common/services/editorWebWorker.js +1 -0
- package/esm/vs/editor/common/services/editorWebWorker.js.map +1 -1
- package/esm/vs/editor/common/services/editorWorkerHost.js.map +1 -1
- package/esm/vs/editor/common/services/modelService.js +14 -21
- package/esm/vs/editor/common/services/modelService.js.map +1 -1
- package/esm/vs/editor/common/textModelEditSource.js +2 -0
- package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +40 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
- package/esm/vs/editor/common/viewModel/viewModelImpl.js +2 -1
- package/esm/vs/editor/common/viewModel/viewModelImpl.js.map +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js.map +1 -1
- package/esm/vs/editor/contrib/codelens/browser/codelensController.js +1 -1
- package/esm/vs/editor/contrib/codelens/browser/codelensController.js.map +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js +1 -0
- package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js.map +1 -1
- package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +1 -0
- package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js.map +1 -1
- package/esm/vs/editor/contrib/find/browser/findModel.js +1 -0
- package/esm/vs/editor/contrib/find/browser/findModel.js.map +1 -1
- package/esm/vs/editor/contrib/find/browser/findWidget.css +5 -5
- package/esm/vs/editor/contrib/folding/browser/folding.css +4 -4
- package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js.map +1 -1
- package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
- package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js.map +1 -1
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +30 -14
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +4 -3
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +56 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/structuredLogger.js +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/structuredLogger.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +2 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js.map +1 -1
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js.map +1 -1
- package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.css +2 -0
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +2 -0
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js.map +1 -1
- package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js.map +1 -1
- package/esm/vs/editor/editor.api.d.ts +8 -8
- package/esm/vs/editor/editor.api.js +4 -0
- package/esm/vs/editor/editor.api.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneEditor.js +37 -0
- package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js +37 -0
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneWebWorker.js.map +1 -1
- package/esm/vs/editor/standalone/common/monarch/monarchCompile.js +3 -0
- package/esm/vs/editor/standalone/common/monarch/monarchCompile.js.map +1 -1
- package/esm/vs/platform/accessibility/browser/accessibilityService.js +2 -2
- package/esm/vs/platform/accessibility/browser/accessibilityService.js.map +1 -1
- package/esm/vs/platform/actions/common/actions.js.map +1 -1
- package/esm/vs/platform/commands/common/commands.js.map +1 -1
- package/esm/vs/platform/contextkey/common/contextkey.js +5 -0
- package/esm/vs/platform/contextkey/common/contextkey.js.map +1 -1
- package/esm/vs/platform/dataChannel/browser/forwardingTelemetryService.js +1 -0
- package/esm/vs/platform/dataChannel/browser/forwardingTelemetryService.js.map +1 -1
- package/esm/vs/platform/dnd/browser/dnd.js +2 -0
- package/esm/vs/platform/dnd/browser/dnd.js.map +1 -1
- package/esm/vs/platform/instantiation/common/descriptors.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js +1 -0
- package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
- package/esm/vs/platform/list/browser/listService.js +5 -0
- package/esm/vs/platform/list/browser/listService.js.map +1 -1
- package/esm/vs/platform/log/common/log.js.map +1 -1
- package/esm/vs/platform/log/common/logService.js.map +1 -1
- package/esm/vs/platform/observable/common/wrapInHotClass.js +2 -0
- package/esm/vs/platform/observable/common/wrapInHotClass.js.map +1 -1
- package/esm/vs/platform/observable/common/wrapInReloadableClass.js +3 -0
- package/esm/vs/platform/observable/common/wrapInReloadableClass.js.map +1 -1
- package/esm/vs/platform/product/common/product.js +69 -0
- package/esm/vs/platform/product/common/product.js.map +1 -0
- package/esm/vs/platform/quickinput/browser/quickInput.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
- package/monaco.d.ts +8 -8
- package/package.json +2 -2
|
@@ -38,7 +38,9 @@ export class TextModelEditSource {
|
|
|
38
38
|
return keys.join('-');
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
42
|
function createEditSource(metadata) {
|
|
43
|
+
// eslint-disable-next-line local/code-no-any-casts, @typescript-eslint/no-explicit-any
|
|
42
44
|
return new TextModelEditSource(metadata, privateSymbol);
|
|
43
45
|
}
|
|
44
46
|
export const EditSources = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/textModelEditSource.ts","vs/editor/common/textModelEditSource.ts"],"names":[],"mappings":"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","file":"textModelEditSource.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["\nimport { prefixedUuid } from '../../base/common/uuid.js';\nimport { TextLength } from './core/text/textLength.js';\nimport { ProviderId, VersionedExtensionId } from './languages.js';\n\nconst privateSymbol = Symbol('TextModelEditSource');\n\nexport class TextModelEditSource {\n\tconstructor(\n\t\tpublic readonly metadata: ITextModelEditSourceMetadata,\n\t\t_privateCtorGuard: typeof privateSymbol,\n\t) { }\n\n\tpublic toString(): string {\n\t\treturn `${this.metadata.source}`;\n\t}\n\n\tpublic getType(): string {\n\t\tconst metadata = this.metadata;\n\t\tswitch (metadata.source) {\n\t\t\tcase 'cursor':\n\t\t\t\treturn metadata.kind;\n\t\t\tcase 'inlineCompletionAccept':\n\t\t\t\treturn metadata.source + (metadata.$nes ? ':nes' : '');\n\t\t\tcase 'unknown':\n\t\t\t\treturn metadata.name || 'unknown';\n\t\t\tdefault:\n\t\t\t\treturn metadata.source;\n\t\t}\n\t}\n\n\t/**\n\t * Converts the metadata to a key string.\n\t * Only includes properties/values that have `level` many `$` prefixes or less.\n\t*/\n\tpublic toKey(level: number, filter: { [TKey in ITextModelEditSourceMetadataKeys]?: boolean } = {}): string {\n\t\tconst metadata = this.metadata;\n\t\tconst keys = Object.entries(metadata).filter(([key, value]) => {\n\t\t\tconst filterVal = (filter as Record<string, boolean>)[key];\n\t\t\tif (filterVal !== undefined) {\n\t\t\t\treturn filterVal;\n\t\t\t}\n\n\t\t\tconst prefixCount = (key.match(/\\$/g) || []).length;\n\t\t\treturn prefixCount <= level && value !== undefined && value !== null && value !== '';\n\t\t}).map(([key, value]) => `${key}:${value}`);\n\t\treturn keys.join('-');\n\t}\n}\n\ntype TextModelEditSourceT<T> = TextModelEditSource & {\n\tmetadataT: T;\n};\n\nfunction createEditSource<T extends Record<string, any>>(metadata: T): TextModelEditSourceT<T> {\n\treturn new TextModelEditSource(metadata as any, privateSymbol) as any;\n}\n\nexport const EditSources = {\n\tunknown(data: { name?: string | null }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'unknown',\n\t\t\tname: data.name,\n\t\t} as const);\n\t},\n\n\trename: () => createEditSource({ source: 'rename' } as const),\n\n\tchatApplyEdits(data: {\n\t\tmodelId: string | undefined;\n\t\tsessionId: string | undefined;\n\t\trequestId: string | undefined;\n\t\tlanguageId: string;\n\t\tmode: string | undefined;\n\t\textensionId: VersionedExtensionId | undefined;\n\t\tcodeBlockSuggestionId: EditSuggestionId | undefined;\n\t}) {\n\t\treturn createEditSource({\n\t\t\tsource: 'Chat.applyEdits',\n\t\t\t$modelId: avoidPathRedaction(data.modelId),\n\t\t\t$extensionId: data.extensionId?.extensionId,\n\t\t\t$extensionVersion: data.extensionId?.version,\n\t\t\t$$languageId: data.languageId,\n\t\t\t$$sessionId: data.sessionId,\n\t\t\t$$requestId: data.requestId,\n\t\t\t$$mode: data.mode,\n\t\t\t$$codeBlockSuggestionId: data.codeBlockSuggestionId,\n\t\t} as const);\n\t},\n\n\tchatUndoEdits: () => createEditSource({ source: 'Chat.undoEdits' } as const),\n\tchatReset: () => createEditSource({ source: 'Chat.reset' } as const),\n\n\tinlineCompletionAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineCompletionAccept',\n\t\t\t$nes: data.nes,\n\t\t\t...toProperties(data.providerId),\n\t\t\t$$requestUuid: data.requestUuid,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\tinlineCompletionPartialAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId; type: 'word' | 'line' }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineCompletionPartialAccept',\n\t\t\ttype: data.type,\n\t\t\t$nes: data.nes,\n\t\t\t...toProperties(data.providerId),\n\t\t\t$$requestUuid: data.requestUuid,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\tinlineChatApplyEdit(data: { modelId: string | undefined; requestId: string | undefined; languageId: string; extensionId: VersionedExtensionId | undefined }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineChat.applyEdits',\n\t\t\t$modelId: avoidPathRedaction(data.modelId),\n\t\t\t$extensionId: data.extensionId?.extensionId,\n\t\t\t$extensionVersion: data.extensionId?.version,\n\t\t\t$$requestId: data.requestId,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\treloadFromDisk: () => createEditSource({ source: 'reloadFromDisk' } as const),\n\n\tcursor(data: { kind: 'compositionType' | 'compositionEnd' | 'type' | 'paste' | 'cut' | 'executeCommands' | 'executeCommand'; detailedSource?: string | null }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'cursor',\n\t\t\tkind: data.kind,\n\t\t\tdetailedSource: data.detailedSource,\n\t\t} as const);\n\t},\n\n\tsetValue: () => createEditSource({ source: 'setValue' } as const),\n\teolChange: () => createEditSource({ source: 'eolChange' } as const),\n\tapplyEdits: () => createEditSource({ source: 'applyEdits' } as const),\n\tsnippet: () => createEditSource({ source: 'snippet' } as const),\n\tsuggest: (data: { providerId: ProviderId | undefined }) => createEditSource({ source: 'suggest', ...toProperties(data.providerId) } as const),\n\n\tcodeAction: (data: { kind: string | undefined; providerId: ProviderId | undefined }) => createEditSource({ source: 'codeAction', $kind: data.kind, ...toProperties(data.providerId) } as const)\n};\n\nfunction toProperties(version: ProviderId | undefined) {\n\tif (!version) {\n\t\treturn {};\n\t}\n\treturn {\n\t\t$extensionId: version.extensionId,\n\t\t$extensionVersion: version.extensionVersion,\n\t\t$providerId: version.providerId,\n\t};\n}\n\ntype Values<T> = T[keyof T];\nexport type ITextModelEditSourceMetadata = Values<{ [TKey in keyof typeof EditSources]: ReturnType<typeof EditSources[TKey]>['metadataT'] }>;\ntype ITextModelEditSourceMetadataKeys = Values<{ [TKey in keyof typeof EditSources]: keyof ReturnType<typeof EditSources[TKey]>['metadataT'] }>;\n\n\nfunction avoidPathRedaction(str: string | undefined): string | undefined {\n\tif (str === undefined) {\n\t\treturn undefined;\n\t}\n\t// To avoid false-positive file path redaction.\n\treturn str.replaceAll('/', '|');\n}\n\n\nexport class EditDeltaInfo {\n\tpublic static fromText(text: string): EditDeltaInfo {\n\t\tconst linesAdded = TextLength.ofText(text).lineCount;\n\t\tconst charsAdded = text.length;\n\t\treturn new EditDeltaInfo(linesAdded, 0, charsAdded, 0);\n\t}\n\n\tpublic static tryCreate(\n\t\tlinesAdded: number | undefined,\n\t\tlinesRemoved: number | undefined,\n\t\tcharsAdded: number | undefined,\n\t\tcharsRemoved: number | undefined\n\t): EditDeltaInfo | undefined {\n\t\tif (linesAdded === undefined || linesRemoved === undefined || charsAdded === undefined || charsRemoved === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new EditDeltaInfo(linesAdded, linesRemoved, charsAdded, charsRemoved);\n\t}\n\n\tconstructor(\n\t\tpublic readonly linesAdded: number,\n\t\tpublic readonly linesRemoved: number,\n\t\tpublic readonly charsAdded: number,\n\t\tpublic readonly charsRemoved: number\n\t) { }\n}\n\n\n/**\n * This is an opaque serializable type that represents a unique identity for an edit.\n */\nexport interface EditSuggestionId {\n}\n\nexport namespace EditSuggestionId {\n\t/**\n\t * Use AiEditTelemetryServiceImpl to create a new id!\n\t*/\n\texport function newId(): EditSuggestionId {\n\t\tconst id = prefixedUuid('sgt');\n\t\treturn toEditIdentity(id);\n\t}\n}\n\nfunction toEditIdentity(id: string): EditSuggestionId {\n\treturn id as unknown as EditSuggestionId;\n}\n","\nimport { prefixedUuid } from '../../base/common/uuid.js';\nimport { TextLength } from './core/text/textLength.js';\nimport { ProviderId, VersionedExtensionId } from './languages.js';\n\nconst privateSymbol = Symbol('TextModelEditSource');\n\nexport class TextModelEditSource {\n\tconstructor(\n\t\tpublic readonly metadata: ITextModelEditSourceMetadata,\n\t\t_privateCtorGuard: typeof privateSymbol,\n\t) { }\n\n\tpublic toString(): string {\n\t\treturn `${this.metadata.source}`;\n\t}\n\n\tpublic getType(): string {\n\t\tconst metadata = this.metadata;\n\t\tswitch (metadata.source) {\n\t\t\tcase 'cursor':\n\t\t\t\treturn metadata.kind;\n\t\t\tcase 'inlineCompletionAccept':\n\t\t\t\treturn metadata.source + (metadata.$nes ? ':nes' : '');\n\t\t\tcase 'unknown':\n\t\t\t\treturn metadata.name || 'unknown';\n\t\t\tdefault:\n\t\t\t\treturn metadata.source;\n\t\t}\n\t}\n\n\t/**\n\t * Converts the metadata to a key string.\n\t * Only includes properties/values that have `level` many `$` prefixes or less.\n\t*/\n\tpublic toKey(level: number, filter: { [TKey in ITextModelEditSourceMetadataKeys]?: boolean } = {}): string {\n\t\tconst metadata = this.metadata;\n\t\tconst keys = Object.entries(metadata).filter(([key, value]) => {\n\t\t\tconst filterVal = (filter as Record<string, boolean>)[key];\n\t\t\tif (filterVal !== undefined) {\n\t\t\t\treturn filterVal;\n\t\t\t}\n\n\t\t\tconst prefixCount = (key.match(/\\$/g) || []).length;\n\t\t\treturn prefixCount <= level && value !== undefined && value !== null && value !== '';\n\t\t}).map(([key, value]) => `${key}:${value}`);\n\t\treturn keys.join('-');\n\t}\n}\n\ntype TextModelEditSourceT<T> = TextModelEditSource & {\n\tmetadataT: T;\n};\n\nfunction createEditSource<T extends Record<string, any>>(metadata: T): TextModelEditSourceT<T> {\n\treturn new TextModelEditSource(metadata as any, privateSymbol) as any;\n}\n\nexport const EditSources = {\n\tunknown(data: { name?: string | null }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'unknown',\n\t\t\tname: data.name,\n\t\t} as const);\n\t},\n\n\trename: () => createEditSource({ source: 'rename' } as const),\n\n\tchatApplyEdits(data: {\n\t\tmodelId: string | undefined;\n\t\tsessionId: string | undefined;\n\t\trequestId: string | undefined;\n\t\tlanguageId: string;\n\t\tmode: string | undefined;\n\t\textensionId: VersionedExtensionId | undefined;\n\t\tcodeBlockSuggestionId: EditSuggestionId | undefined;\n\t}) {\n\t\treturn createEditSource({\n\t\t\tsource: 'Chat.applyEdits',\n\t\t\t$modelId: avoidPathRedaction(data.modelId),\n\t\t\t$extensionId: data.extensionId?.extensionId,\n\t\t\t$extensionVersion: data.extensionId?.version,\n\t\t\t$$languageId: data.languageId,\n\t\t\t$$sessionId: data.sessionId,\n\t\t\t$$requestId: data.requestId,\n\t\t\t$$mode: data.mode,\n\t\t\t$$codeBlockSuggestionId: data.codeBlockSuggestionId,\n\t\t} as const);\n\t},\n\n\tchatUndoEdits: () => createEditSource({ source: 'Chat.undoEdits' } as const),\n\tchatReset: () => createEditSource({ source: 'Chat.reset' } as const),\n\n\tinlineCompletionAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineCompletionAccept',\n\t\t\t$nes: data.nes,\n\t\t\t...toProperties(data.providerId),\n\t\t\t$$requestUuid: data.requestUuid,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\tinlineCompletionPartialAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId; type: 'word' | 'line' }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineCompletionPartialAccept',\n\t\t\ttype: data.type,\n\t\t\t$nes: data.nes,\n\t\t\t...toProperties(data.providerId),\n\t\t\t$$requestUuid: data.requestUuid,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\tinlineChatApplyEdit(data: { modelId: string | undefined; requestId: string | undefined; languageId: string; extensionId: VersionedExtensionId | undefined }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineChat.applyEdits',\n\t\t\t$modelId: avoidPathRedaction(data.modelId),\n\t\t\t$extensionId: data.extensionId?.extensionId,\n\t\t\t$extensionVersion: data.extensionId?.version,\n\t\t\t$$requestId: data.requestId,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\treloadFromDisk: () => createEditSource({ source: 'reloadFromDisk' } as const),\n\n\tcursor(data: { kind: 'compositionType' | 'compositionEnd' | 'type' | 'paste' | 'cut' | 'executeCommands' | 'executeCommand'; detailedSource?: string | null }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'cursor',\n\t\t\tkind: data.kind,\n\t\t\tdetailedSource: data.detailedSource,\n\t\t} as const);\n\t},\n\n\tsetValue: () => createEditSource({ source: 'setValue' } as const),\n\teolChange: () => createEditSource({ source: 'eolChange' } as const),\n\tapplyEdits: () => createEditSource({ source: 'applyEdits' } as const),\n\tsnippet: () => createEditSource({ source: 'snippet' } as const),\n\tsuggest: (data: { providerId: ProviderId | undefined }) => createEditSource({ source: 'suggest', ...toProperties(data.providerId) } as const),\n\n\tcodeAction: (data: { kind: string | undefined; providerId: ProviderId | undefined }) => createEditSource({ source: 'codeAction', $kind: data.kind, ...toProperties(data.providerId) } as const)\n};\n\nfunction toProperties(version: ProviderId | undefined) {\n\tif (!version) {\n\t\treturn {};\n\t}\n\treturn {\n\t\t$extensionId: version.extensionId,\n\t\t$extensionVersion: version.extensionVersion,\n\t\t$providerId: version.providerId,\n\t};\n}\n\ntype Values<T> = T[keyof T];\nexport type ITextModelEditSourceMetadata = Values<{ [TKey in keyof typeof EditSources]: ReturnType<typeof EditSources[TKey]>['metadataT'] }>;\ntype ITextModelEditSourceMetadataKeys = Values<{ [TKey in keyof typeof EditSources]: keyof ReturnType<typeof EditSources[TKey]>['metadataT'] }>;\n\n\nfunction avoidPathRedaction(str: string | undefined): string | undefined {\n\tif (str === undefined) {\n\t\treturn undefined;\n\t}\n\t// To avoid false-positive file path redaction.\n\treturn str.replaceAll('/', '|');\n}\n\n\nexport class EditDeltaInfo {\n\tpublic static fromText(text: string): EditDeltaInfo {\n\t\tconst linesAdded = TextLength.ofText(text).lineCount;\n\t\tconst charsAdded = text.length;\n\t\treturn new EditDeltaInfo(linesAdded, 0, charsAdded, 0);\n\t}\n\n\tpublic static tryCreate(\n\t\tlinesAdded: number | undefined,\n\t\tlinesRemoved: number | undefined,\n\t\tcharsAdded: number | undefined,\n\t\tcharsRemoved: number | undefined\n\t): EditDeltaInfo | undefined {\n\t\tif (linesAdded === undefined || linesRemoved === undefined || charsAdded === undefined || charsRemoved === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new EditDeltaInfo(linesAdded, linesRemoved, charsAdded, charsRemoved);\n\t}\n\n\tconstructor(\n\t\tpublic readonly linesAdded: number,\n\t\tpublic readonly linesRemoved: number,\n\t\tpublic readonly charsAdded: number,\n\t\tpublic readonly charsRemoved: number\n\t) { }\n}\n\n\n/**\n * This is an opaque serializable type that represents a unique identity for an edit.\n */\nexport interface EditSuggestionId {\n}\n\nexport namespace EditSuggestionId {\n\t/**\n\t * Use AiEditTelemetryServiceImpl to create a new id!\n\t*/\n\texport function newId(): EditSuggestionId {\n\t\tconst id = prefixedUuid('sgt');\n\t\treturn toEditIdentity(id);\n\t}\n}\n\nfunction toEditIdentity(id: string): EditSuggestionId {\n\treturn id as unknown as EditSuggestionId;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/textModelEditSource.ts","vs/editor/common/textModelEditSource.ts"],"names":[],"mappings":"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","file":"textModelEditSource.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["\nimport { prefixedUuid } from '../../base/common/uuid.js';\nimport { TextLength } from './core/text/textLength.js';\nimport { ProviderId, VersionedExtensionId } from './languages.js';\n\nconst privateSymbol = Symbol('TextModelEditSource');\n\nexport class TextModelEditSource {\n\tconstructor(\n\t\tpublic readonly metadata: ITextModelEditSourceMetadata,\n\t\t_privateCtorGuard: typeof privateSymbol,\n\t) { }\n\n\tpublic toString(): string {\n\t\treturn `${this.metadata.source}`;\n\t}\n\n\tpublic getType(): string {\n\t\tconst metadata = this.metadata;\n\t\tswitch (metadata.source) {\n\t\t\tcase 'cursor':\n\t\t\t\treturn metadata.kind;\n\t\t\tcase 'inlineCompletionAccept':\n\t\t\t\treturn metadata.source + (metadata.$nes ? ':nes' : '');\n\t\t\tcase 'unknown':\n\t\t\t\treturn metadata.name || 'unknown';\n\t\t\tdefault:\n\t\t\t\treturn metadata.source;\n\t\t}\n\t}\n\n\t/**\n\t * Converts the metadata to a key string.\n\t * Only includes properties/values that have `level` many `$` prefixes or less.\n\t*/\n\tpublic toKey(level: number, filter: { [TKey in ITextModelEditSourceMetadataKeys]?: boolean } = {}): string {\n\t\tconst metadata = this.metadata;\n\t\tconst keys = Object.entries(metadata).filter(([key, value]) => {\n\t\t\tconst filterVal = (filter as Record<string, boolean>)[key];\n\t\t\tif (filterVal !== undefined) {\n\t\t\t\treturn filterVal;\n\t\t\t}\n\n\t\t\tconst prefixCount = (key.match(/\\$/g) || []).length;\n\t\t\treturn prefixCount <= level && value !== undefined && value !== null && value !== '';\n\t\t}).map(([key, value]) => `${key}:${value}`);\n\t\treturn keys.join('-');\n\t}\n}\n\ntype TextModelEditSourceT<T> = TextModelEditSource & {\n\tmetadataT: T;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createEditSource<T extends Record<string, any>>(metadata: T): TextModelEditSourceT<T> {\n\t// eslint-disable-next-line local/code-no-any-casts, @typescript-eslint/no-explicit-any\n\treturn new TextModelEditSource(metadata as any, privateSymbol) as any;\n}\n\nexport const EditSources = {\n\tunknown(data: { name?: string | null }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'unknown',\n\t\t\tname: data.name,\n\t\t} as const);\n\t},\n\n\trename: () => createEditSource({ source: 'rename' } as const),\n\n\tchatApplyEdits(data: {\n\t\tmodelId: string | undefined;\n\t\tsessionId: string | undefined;\n\t\trequestId: string | undefined;\n\t\tlanguageId: string;\n\t\tmode: string | undefined;\n\t\textensionId: VersionedExtensionId | undefined;\n\t\tcodeBlockSuggestionId: EditSuggestionId | undefined;\n\t}) {\n\t\treturn createEditSource({\n\t\t\tsource: 'Chat.applyEdits',\n\t\t\t$modelId: avoidPathRedaction(data.modelId),\n\t\t\t$extensionId: data.extensionId?.extensionId,\n\t\t\t$extensionVersion: data.extensionId?.version,\n\t\t\t$$languageId: data.languageId,\n\t\t\t$$sessionId: data.sessionId,\n\t\t\t$$requestId: data.requestId,\n\t\t\t$$mode: data.mode,\n\t\t\t$$codeBlockSuggestionId: data.codeBlockSuggestionId,\n\t\t} as const);\n\t},\n\n\tchatUndoEdits: () => createEditSource({ source: 'Chat.undoEdits' } as const),\n\tchatReset: () => createEditSource({ source: 'Chat.reset' } as const),\n\n\tinlineCompletionAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineCompletionAccept',\n\t\t\t$nes: data.nes,\n\t\t\t...toProperties(data.providerId),\n\t\t\t$$requestUuid: data.requestUuid,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\tinlineCompletionPartialAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId; type: 'word' | 'line' }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineCompletionPartialAccept',\n\t\t\ttype: data.type,\n\t\t\t$nes: data.nes,\n\t\t\t...toProperties(data.providerId),\n\t\t\t$$requestUuid: data.requestUuid,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\tinlineChatApplyEdit(data: { modelId: string | undefined; requestId: string | undefined; languageId: string; extensionId: VersionedExtensionId | undefined }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineChat.applyEdits',\n\t\t\t$modelId: avoidPathRedaction(data.modelId),\n\t\t\t$extensionId: data.extensionId?.extensionId,\n\t\t\t$extensionVersion: data.extensionId?.version,\n\t\t\t$$requestId: data.requestId,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\treloadFromDisk: () => createEditSource({ source: 'reloadFromDisk' } as const),\n\n\tcursor(data: { kind: 'compositionType' | 'compositionEnd' | 'type' | 'paste' | 'cut' | 'executeCommands' | 'executeCommand'; detailedSource?: string | null }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'cursor',\n\t\t\tkind: data.kind,\n\t\t\tdetailedSource: data.detailedSource,\n\t\t} as const);\n\t},\n\n\tsetValue: () => createEditSource({ source: 'setValue' } as const),\n\teolChange: () => createEditSource({ source: 'eolChange' } as const),\n\tapplyEdits: () => createEditSource({ source: 'applyEdits' } as const),\n\tsnippet: () => createEditSource({ source: 'snippet' } as const),\n\tsuggest: (data: { providerId: ProviderId | undefined }) => createEditSource({ source: 'suggest', ...toProperties(data.providerId) } as const),\n\n\tcodeAction: (data: { kind: string | undefined; providerId: ProviderId | undefined }) => createEditSource({ source: 'codeAction', $kind: data.kind, ...toProperties(data.providerId) } as const)\n};\n\nfunction toProperties(version: ProviderId | undefined) {\n\tif (!version) {\n\t\treturn {};\n\t}\n\treturn {\n\t\t$extensionId: version.extensionId,\n\t\t$extensionVersion: version.extensionVersion,\n\t\t$providerId: version.providerId,\n\t};\n}\n\ntype Values<T> = T[keyof T];\nexport type ITextModelEditSourceMetadata = Values<{ [TKey in keyof typeof EditSources]: ReturnType<typeof EditSources[TKey]>['metadataT'] }>;\ntype ITextModelEditSourceMetadataKeys = Values<{ [TKey in keyof typeof EditSources]: keyof ReturnType<typeof EditSources[TKey]>['metadataT'] }>;\n\n\nfunction avoidPathRedaction(str: string | undefined): string | undefined {\n\tif (str === undefined) {\n\t\treturn undefined;\n\t}\n\t// To avoid false-positive file path redaction.\n\treturn str.replaceAll('/', '|');\n}\n\n\nexport class EditDeltaInfo {\n\tpublic static fromText(text: string): EditDeltaInfo {\n\t\tconst linesAdded = TextLength.ofText(text).lineCount;\n\t\tconst charsAdded = text.length;\n\t\treturn new EditDeltaInfo(linesAdded, 0, charsAdded, 0);\n\t}\n\n\tpublic static tryCreate(\n\t\tlinesAdded: number | undefined,\n\t\tlinesRemoved: number | undefined,\n\t\tcharsAdded: number | undefined,\n\t\tcharsRemoved: number | undefined\n\t): EditDeltaInfo | undefined {\n\t\tif (linesAdded === undefined || linesRemoved === undefined || charsAdded === undefined || charsRemoved === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new EditDeltaInfo(linesAdded, linesRemoved, charsAdded, charsRemoved);\n\t}\n\n\tconstructor(\n\t\tpublic readonly linesAdded: number,\n\t\tpublic readonly linesRemoved: number,\n\t\tpublic readonly charsAdded: number,\n\t\tpublic readonly charsRemoved: number\n\t) { }\n}\n\n\n/**\n * This is an opaque serializable type that represents a unique identity for an edit.\n */\nexport interface EditSuggestionId {\n}\n\nexport namespace EditSuggestionId {\n\t/**\n\t * Use AiEditTelemetryServiceImpl to create a new id!\n\t*/\n\texport function newId(): EditSuggestionId {\n\t\tconst id = prefixedUuid('sgt');\n\t\treturn toEditIdentity(id);\n\t}\n}\n\nfunction toEditIdentity(id: string): EditSuggestionId {\n\treturn id as unknown as EditSuggestionId;\n}\n","\nimport { prefixedUuid } from '../../base/common/uuid.js';\nimport { TextLength } from './core/text/textLength.js';\nimport { ProviderId, VersionedExtensionId } from './languages.js';\n\nconst privateSymbol = Symbol('TextModelEditSource');\n\nexport class TextModelEditSource {\n\tconstructor(\n\t\tpublic readonly metadata: ITextModelEditSourceMetadata,\n\t\t_privateCtorGuard: typeof privateSymbol,\n\t) { }\n\n\tpublic toString(): string {\n\t\treturn `${this.metadata.source}`;\n\t}\n\n\tpublic getType(): string {\n\t\tconst metadata = this.metadata;\n\t\tswitch (metadata.source) {\n\t\t\tcase 'cursor':\n\t\t\t\treturn metadata.kind;\n\t\t\tcase 'inlineCompletionAccept':\n\t\t\t\treturn metadata.source + (metadata.$nes ? ':nes' : '');\n\t\t\tcase 'unknown':\n\t\t\t\treturn metadata.name || 'unknown';\n\t\t\tdefault:\n\t\t\t\treturn metadata.source;\n\t\t}\n\t}\n\n\t/**\n\t * Converts the metadata to a key string.\n\t * Only includes properties/values that have `level` many `$` prefixes or less.\n\t*/\n\tpublic toKey(level: number, filter: { [TKey in ITextModelEditSourceMetadataKeys]?: boolean } = {}): string {\n\t\tconst metadata = this.metadata;\n\t\tconst keys = Object.entries(metadata).filter(([key, value]) => {\n\t\t\tconst filterVal = (filter as Record<string, boolean>)[key];\n\t\t\tif (filterVal !== undefined) {\n\t\t\t\treturn filterVal;\n\t\t\t}\n\n\t\t\tconst prefixCount = (key.match(/\\$/g) || []).length;\n\t\t\treturn prefixCount <= level && value !== undefined && value !== null && value !== '';\n\t\t}).map(([key, value]) => `${key}:${value}`);\n\t\treturn keys.join('-');\n\t}\n}\n\ntype TextModelEditSourceT<T> = TextModelEditSource & {\n\tmetadataT: T;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createEditSource<T extends Record<string, any>>(metadata: T): TextModelEditSourceT<T> {\n\t// eslint-disable-next-line local/code-no-any-casts, @typescript-eslint/no-explicit-any\n\treturn new TextModelEditSource(metadata as any, privateSymbol) as any;\n}\n\nexport const EditSources = {\n\tunknown(data: { name?: string | null }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'unknown',\n\t\t\tname: data.name,\n\t\t} as const);\n\t},\n\n\trename: () => createEditSource({ source: 'rename' } as const),\n\n\tchatApplyEdits(data: {\n\t\tmodelId: string | undefined;\n\t\tsessionId: string | undefined;\n\t\trequestId: string | undefined;\n\t\tlanguageId: string;\n\t\tmode: string | undefined;\n\t\textensionId: VersionedExtensionId | undefined;\n\t\tcodeBlockSuggestionId: EditSuggestionId | undefined;\n\t}) {\n\t\treturn createEditSource({\n\t\t\tsource: 'Chat.applyEdits',\n\t\t\t$modelId: avoidPathRedaction(data.modelId),\n\t\t\t$extensionId: data.extensionId?.extensionId,\n\t\t\t$extensionVersion: data.extensionId?.version,\n\t\t\t$$languageId: data.languageId,\n\t\t\t$$sessionId: data.sessionId,\n\t\t\t$$requestId: data.requestId,\n\t\t\t$$mode: data.mode,\n\t\t\t$$codeBlockSuggestionId: data.codeBlockSuggestionId,\n\t\t} as const);\n\t},\n\n\tchatUndoEdits: () => createEditSource({ source: 'Chat.undoEdits' } as const),\n\tchatReset: () => createEditSource({ source: 'Chat.reset' } as const),\n\n\tinlineCompletionAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineCompletionAccept',\n\t\t\t$nes: data.nes,\n\t\t\t...toProperties(data.providerId),\n\t\t\t$$requestUuid: data.requestUuid,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\tinlineCompletionPartialAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId; type: 'word' | 'line' }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineCompletionPartialAccept',\n\t\t\ttype: data.type,\n\t\t\t$nes: data.nes,\n\t\t\t...toProperties(data.providerId),\n\t\t\t$$requestUuid: data.requestUuid,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\tinlineChatApplyEdit(data: { modelId: string | undefined; requestId: string | undefined; languageId: string; extensionId: VersionedExtensionId | undefined }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'inlineChat.applyEdits',\n\t\t\t$modelId: avoidPathRedaction(data.modelId),\n\t\t\t$extensionId: data.extensionId?.extensionId,\n\t\t\t$extensionVersion: data.extensionId?.version,\n\t\t\t$$requestId: data.requestId,\n\t\t\t$$languageId: data.languageId,\n\t\t} as const);\n\t},\n\n\treloadFromDisk: () => createEditSource({ source: 'reloadFromDisk' } as const),\n\n\tcursor(data: { kind: 'compositionType' | 'compositionEnd' | 'type' | 'paste' | 'cut' | 'executeCommands' | 'executeCommand'; detailedSource?: string | null }) {\n\t\treturn createEditSource({\n\t\t\tsource: 'cursor',\n\t\t\tkind: data.kind,\n\t\t\tdetailedSource: data.detailedSource,\n\t\t} as const);\n\t},\n\n\tsetValue: () => createEditSource({ source: 'setValue' } as const),\n\teolChange: () => createEditSource({ source: 'eolChange' } as const),\n\tapplyEdits: () => createEditSource({ source: 'applyEdits' } as const),\n\tsnippet: () => createEditSource({ source: 'snippet' } as const),\n\tsuggest: (data: { providerId: ProviderId | undefined }) => createEditSource({ source: 'suggest', ...toProperties(data.providerId) } as const),\n\n\tcodeAction: (data: { kind: string | undefined; providerId: ProviderId | undefined }) => createEditSource({ source: 'codeAction', $kind: data.kind, ...toProperties(data.providerId) } as const)\n};\n\nfunction toProperties(version: ProviderId | undefined) {\n\tif (!version) {\n\t\treturn {};\n\t}\n\treturn {\n\t\t$extensionId: version.extensionId,\n\t\t$extensionVersion: version.extensionVersion,\n\t\t$providerId: version.providerId,\n\t};\n}\n\ntype Values<T> = T[keyof T];\nexport type ITextModelEditSourceMetadata = Values<{ [TKey in keyof typeof EditSources]: ReturnType<typeof EditSources[TKey]>['metadataT'] }>;\ntype ITextModelEditSourceMetadataKeys = Values<{ [TKey in keyof typeof EditSources]: keyof ReturnType<typeof EditSources[TKey]>['metadataT'] }>;\n\n\nfunction avoidPathRedaction(str: string | undefined): string | undefined {\n\tif (str === undefined) {\n\t\treturn undefined;\n\t}\n\t// To avoid false-positive file path redaction.\n\treturn str.replaceAll('/', '|');\n}\n\n\nexport class EditDeltaInfo {\n\tpublic static fromText(text: string): EditDeltaInfo {\n\t\tconst linesAdded = TextLength.ofText(text).lineCount;\n\t\tconst charsAdded = text.length;\n\t\treturn new EditDeltaInfo(linesAdded, 0, charsAdded, 0);\n\t}\n\n\tpublic static tryCreate(\n\t\tlinesAdded: number | undefined,\n\t\tlinesRemoved: number | undefined,\n\t\tcharsAdded: number | undefined,\n\t\tcharsRemoved: number | undefined\n\t): EditDeltaInfo | undefined {\n\t\tif (linesAdded === undefined || linesRemoved === undefined || charsAdded === undefined || charsRemoved === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new EditDeltaInfo(linesAdded, linesRemoved, charsAdded, charsRemoved);\n\t}\n\n\tconstructor(\n\t\tpublic readonly linesAdded: number,\n\t\tpublic readonly linesRemoved: number,\n\t\tpublic readonly charsAdded: number,\n\t\tpublic readonly charsRemoved: number\n\t) { }\n}\n\n\n/**\n * This is an opaque serializable type that represents a unique identity for an edit.\n */\nexport interface EditSuggestionId {\n}\n\nexport namespace EditSuggestionId {\n\t/**\n\t * Use AiEditTelemetryServiceImpl to create a new id!\n\t*/\n\texport function newId(): EditSuggestionId {\n\t\tconst id = prefixedUuid('sgt');\n\t\treturn toEditIdentity(id);\n\t}\n}\n\nfunction toEditIdentity(id: string): EditSuggestionId {\n\treturn id as unknown as EditSuggestionId;\n}\n"]}
|
|
@@ -327,6 +327,10 @@ function resolveRenderLineInput(input) {
|
|
|
327
327
|
// We can never split RTL text, as it ruins the rendering
|
|
328
328
|
tokens = splitLargeTokens(lineContent, tokens, !input.isBasicASCII || input.fontLigatures);
|
|
329
329
|
}
|
|
330
|
+
else {
|
|
331
|
+
// Split the first token if it contains both leading whitespace and RTL text
|
|
332
|
+
tokens = splitLeadingWhitespaceFromRTL(lineContent, tokens);
|
|
333
|
+
}
|
|
330
334
|
return new ResolvedRenderLineInput(input.useMonospaceOptimizations, input.canUseHalfwidthRightwardsArrow, lineContent, len, isOverflowing, overflowingCharCount, tokens, containsForeignElements, input.fauxIndentLength, input.tabSize, input.startVisibleColumn, input.spaceWidth, input.renderSpaceCharCode, input.renderWhitespace, input.renderControlCharacters);
|
|
331
335
|
}
|
|
332
336
|
/**
|
|
@@ -425,6 +429,41 @@ function splitLargeTokens(lineContent, tokens, onlyAtSpaces) {
|
|
|
425
429
|
}
|
|
426
430
|
return result;
|
|
427
431
|
}
|
|
432
|
+
/**
|
|
433
|
+
* Splits leading whitespace from the first token if it contains RTL text.
|
|
434
|
+
*/
|
|
435
|
+
function splitLeadingWhitespaceFromRTL(lineContent, tokens) {
|
|
436
|
+
if (tokens.length === 0) {
|
|
437
|
+
return tokens;
|
|
438
|
+
}
|
|
439
|
+
const firstToken = tokens[0];
|
|
440
|
+
if (!firstToken.containsRTL) {
|
|
441
|
+
return tokens;
|
|
442
|
+
}
|
|
443
|
+
// Check if the first token starts with whitespace
|
|
444
|
+
const firstTokenEndIndex = firstToken.endIndex;
|
|
445
|
+
let firstNonWhitespaceIndex = 0;
|
|
446
|
+
for (let i = 0; i < firstTokenEndIndex; i++) {
|
|
447
|
+
const charCode = lineContent.charCodeAt(i);
|
|
448
|
+
if (charCode !== 32 /* CharCode.Space */ && charCode !== 9 /* CharCode.Tab */) {
|
|
449
|
+
firstNonWhitespaceIndex = i;
|
|
450
|
+
break;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
if (firstNonWhitespaceIndex === 0) {
|
|
454
|
+
// No leading whitespace
|
|
455
|
+
return tokens;
|
|
456
|
+
}
|
|
457
|
+
// Split the first token into leading whitespace and the rest
|
|
458
|
+
const result = [];
|
|
459
|
+
result.push(new LinePart(firstNonWhitespaceIndex, firstToken.type, firstToken.metadata, false));
|
|
460
|
+
result.push(new LinePart(firstTokenEndIndex, firstToken.type, firstToken.metadata, firstToken.containsRTL));
|
|
461
|
+
// Add remaining tokens
|
|
462
|
+
for (let i = 1; i < tokens.length; i++) {
|
|
463
|
+
result.push(tokens[i]);
|
|
464
|
+
}
|
|
465
|
+
return result;
|
|
466
|
+
}
|
|
428
467
|
function isControlCharacter(charCode) {
|
|
429
468
|
if (charCode < 32) {
|
|
430
469
|
return (charCode !== 9 /* CharCode.Tab */);
|
|
@@ -737,7 +776,7 @@ function _renderLine(input, sb) {
|
|
|
737
776
|
charOffsetInPart = 0;
|
|
738
777
|
sb.appendString('<span ');
|
|
739
778
|
if (partContainsRTL) {
|
|
740
|
-
sb.appendString('style="unicode-bidi:isolate" ');
|
|
779
|
+
sb.appendString('dir="rtl" style="unicode-bidi:isolate" ');
|
|
741
780
|
}
|
|
742
781
|
sb.appendString('class="');
|
|
743
782
|
sb.appendString(partRendersWhitespaceWithWidth ? 'mtkz' : partType);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["vs/editor/common/viewLayout/viewLineRenderer.ts"],"names":[],"mappings":"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","file":"viewLineRenderer.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as nls from '../../../nls.js';\nimport { CharCode } from '../../../base/common/charCode.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { IViewLineTokens } from '../tokens/lineTokens.js';\nimport { StringBuilder } from '../core/stringBuilder.js';\nimport { LineDecoration, LineDecorationsNormalizer } from './lineDecorations.js';\nimport { LinePart, LinePartMetadata } from './linePart.js';\nimport { OffsetRange } from '../core/ranges/offsetRange.js';\nimport { InlineDecorationType } from '../viewModel/inlineDecorations.js';\nimport { TextDirection } from '../model.js';\n\nexport const enum RenderWhitespace {\n\tNone = 0,\n\tBoundary = 1,\n\tSelection = 2,\n\tTrailing = 3,\n\tAll = 4\n}\n\nexport class RenderLineInput {\n\n\tpublic readonly useMonospaceOptimizations: boolean;\n\tpublic readonly canUseHalfwidthRightwardsArrow: boolean;\n\tpublic readonly lineContent: string;\n\tpublic readonly continuesWithWrappedLine: boolean;\n\tpublic readonly isBasicASCII: boolean;\n\tpublic readonly containsRTL: boolean;\n\tpublic readonly fauxIndentLength: number;\n\tpublic readonly lineTokens: IViewLineTokens;\n\tpublic readonly lineDecorations: LineDecoration[];\n\tpublic readonly tabSize: number;\n\tpublic readonly startVisibleColumn: number;\n\tpublic readonly spaceWidth: number;\n\tpublic readonly renderSpaceWidth: number;\n\tpublic readonly renderSpaceCharCode: number;\n\tpublic readonly stopRenderingLineAfter: number;\n\tpublic readonly renderWhitespace: RenderWhitespace;\n\tpublic readonly renderControlCharacters: boolean;\n\tpublic readonly fontLigatures: boolean;\n\tpublic readonly textDirection: TextDirection | null;\n\tpublic readonly verticalScrollbarSize: number;\n\n\t/**\n\t * Defined only when renderWhitespace is 'selection'. Selections are non-overlapping,\n\t * and ordered by position within the line.\n\t */\n\tpublic readonly selectionsOnLine: OffsetRange[] | null;\n\t/**\n\t * When rendering an empty line, whether to render a new line instead\n\t */\n\tpublic readonly renderNewLineWhenEmpty: boolean;\n\n\tpublic get isLTR(): boolean {\n\t\treturn !this.containsRTL && this.textDirection !== TextDirection.RTL;\n\t}\n\n\tconstructor(\n\t\tuseMonospaceOptimizations: boolean,\n\t\tcanUseHalfwidthRightwardsArrow: boolean,\n\t\tlineContent: string,\n\t\tcontinuesWithWrappedLine: boolean,\n\t\tisBasicASCII: boolean,\n\t\tcontainsRTL: boolean,\n\t\tfauxIndentLength: number,\n\t\tlineTokens: IViewLineTokens,\n\t\tlineDecorations: LineDecoration[],\n\t\ttabSize: number,\n\t\tstartVisibleColumn: number,\n\t\tspaceWidth: number,\n\t\tmiddotWidth: number,\n\t\twsmiddotWidth: number,\n\t\tstopRenderingLineAfter: number,\n\t\trenderWhitespace: 'none' | 'boundary' | 'selection' | 'trailing' | 'all',\n\t\trenderControlCharacters: boolean,\n\t\tfontLigatures: boolean,\n\t\tselectionsOnLine: OffsetRange[] | null,\n\t\ttextDirection: TextDirection | null,\n\t\tverticalScrollbarSize: number,\n\t\trenderNewLineWhenEmpty: boolean = false,\n\t) {\n\t\tthis.useMonospaceOptimizations = useMonospaceOptimizations;\n\t\tthis.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\n\t\tthis.lineContent = lineContent;\n\t\tthis.continuesWithWrappedLine = continuesWithWrappedLine;\n\t\tthis.isBasicASCII = isBasicASCII;\n\t\tthis.containsRTL = containsRTL;\n\t\tthis.fauxIndentLength = fauxIndentLength;\n\t\tthis.lineTokens = lineTokens;\n\t\tthis.lineDecorations = lineDecorations.sort(LineDecoration.compare);\n\t\tthis.tabSize = tabSize;\n\t\tthis.startVisibleColumn = startVisibleColumn;\n\t\tthis.spaceWidth = spaceWidth;\n\t\tthis.stopRenderingLineAfter = stopRenderingLineAfter;\n\t\tthis.renderWhitespace = (\n\t\t\trenderWhitespace === 'all'\n\t\t\t\t? RenderWhitespace.All\n\t\t\t\t: renderWhitespace === 'boundary'\n\t\t\t\t\t? RenderWhitespace.Boundary\n\t\t\t\t\t: renderWhitespace === 'selection'\n\t\t\t\t\t\t? RenderWhitespace.Selection\n\t\t\t\t\t\t: renderWhitespace === 'trailing'\n\t\t\t\t\t\t\t? RenderWhitespace.Trailing\n\t\t\t\t\t\t\t: RenderWhitespace.None\n\t\t);\n\t\tthis.renderControlCharacters = renderControlCharacters;\n\t\tthis.fontLigatures = fontLigatures;\n\t\tthis.selectionsOnLine = selectionsOnLine && selectionsOnLine.sort((a, b) => a.start < b.start ? -1 : 1);\n\t\tthis.renderNewLineWhenEmpty = renderNewLineWhenEmpty;\n\t\tthis.textDirection = textDirection;\n\t\tthis.verticalScrollbarSize = verticalScrollbarSize;\n\n\t\tconst wsmiddotDiff = Math.abs(wsmiddotWidth - spaceWidth);\n\t\tconst middotDiff = Math.abs(middotWidth - spaceWidth);\n\t\tif (wsmiddotDiff < middotDiff) {\n\t\t\tthis.renderSpaceWidth = wsmiddotWidth;\n\t\t\tthis.renderSpaceCharCode = 0x2E31; // U+2E31 - WORD SEPARATOR MIDDLE DOT\n\t\t} else {\n\t\t\tthis.renderSpaceWidth = middotWidth;\n\t\t\tthis.renderSpaceCharCode = 0xB7; // U+00B7 - MIDDLE DOT\n\t\t}\n\t}\n\n\tprivate sameSelection(otherSelections: OffsetRange[] | null): boolean {\n\t\tif (this.selectionsOnLine === null) {\n\t\t\treturn otherSelections === null;\n\t\t}\n\n\t\tif (otherSelections === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (otherSelections.length !== this.selectionsOnLine.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0; i < this.selectionsOnLine.length; i++) {\n\t\t\tif (!this.selectionsOnLine[i].equals(otherSelections[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic equals(other: RenderLineInput): boolean {\n\t\treturn (\n\t\t\tthis.useMonospaceOptimizations === other.useMonospaceOptimizations\n\t\t\t&& this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n\t\t\t&& this.lineContent === other.lineContent\n\t\t\t&& this.continuesWithWrappedLine === other.continuesWithWrappedLine\n\t\t\t&& this.isBasicASCII === other.isBasicASCII\n\t\t\t&& this.containsRTL === other.containsRTL\n\t\t\t&& this.fauxIndentLength === other.fauxIndentLength\n\t\t\t&& this.tabSize === other.tabSize\n\t\t\t&& this.startVisibleColumn === other.startVisibleColumn\n\t\t\t&& this.spaceWidth === other.spaceWidth\n\t\t\t&& this.renderSpaceWidth === other.renderSpaceWidth\n\t\t\t&& this.renderSpaceCharCode === other.renderSpaceCharCode\n\t\t\t&& this.stopRenderingLineAfter === other.stopRenderingLineAfter\n\t\t\t&& this.renderWhitespace === other.renderWhitespace\n\t\t\t&& this.renderControlCharacters === other.renderControlCharacters\n\t\t\t&& this.fontLigatures === other.fontLigatures\n\t\t\t&& LineDecoration.equalsArr(this.lineDecorations, other.lineDecorations)\n\t\t\t&& this.lineTokens.equals(other.lineTokens)\n\t\t\t&& this.sameSelection(other.selectionsOnLine)\n\t\t\t&& this.textDirection === other.textDirection\n\t\t\t&& this.verticalScrollbarSize === other.verticalScrollbarSize\n\t\t\t&& this.renderNewLineWhenEmpty === other.renderNewLineWhenEmpty\n\t\t);\n\t}\n}\n\nconst enum CharacterMappingConstants {\n\tPART_INDEX_MASK = 0b11111111111111110000000000000000,\n\tCHAR_INDEX_MASK = 0b00000000000000001111111111111111,\n\n\tCHAR_INDEX_OFFSET = 0,\n\tPART_INDEX_OFFSET = 16\n}\n\nexport class DomPosition {\n\tconstructor(\n\t\tpublic readonly partIndex: number,\n\t\tpublic readonly charIndex: number\n\t) { }\n}\n\n/**\n * Provides a both direction mapping between a line's character and its rendered position.\n */\nexport class CharacterMapping {\n\n\tprivate static getPartIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.PART_INDEX_MASK) >>> CharacterMappingConstants.PART_INDEX_OFFSET;\n\t}\n\n\tprivate static getCharIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.CHAR_INDEX_MASK) >>> CharacterMappingConstants.CHAR_INDEX_OFFSET;\n\t}\n\n\tpublic readonly length: number;\n\tprivate readonly _data: Uint32Array;\n\tprivate readonly _horizontalOffset: Uint32Array;\n\n\tconstructor(length: number, partCount: number) {\n\t\tthis.length = length;\n\t\tthis._data = new Uint32Array(this.length);\n\t\tthis._horizontalOffset = new Uint32Array(this.length);\n\t}\n\n\tpublic setColumnInfo(column: number, partIndex: number, charIndex: number, horizontalOffset: number): void {\n\t\tconst partData = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\t\tthis._data[column - 1] = partData;\n\t\tthis._horizontalOffset[column - 1] = horizontalOffset;\n\t}\n\n\tpublic getHorizontalOffset(column: number): number {\n\t\tif (this._horizontalOffset.length === 0) {\n\t\t\t// No characters on this line\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._horizontalOffset[column - 1];\n\t}\n\n\tprivate charOffsetToPartData(charOffset: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (charOffset < 0) {\n\t\t\treturn this._data[0];\n\t\t}\n\t\tif (charOffset >= this.length) {\n\t\t\treturn this._data[this.length - 1];\n\t\t}\n\t\treturn this._data[charOffset];\n\t}\n\n\tpublic getDomPosition(column: number): DomPosition {\n\t\tconst partData = this.charOffsetToPartData(column - 1);\n\t\tconst partIndex = CharacterMapping.getPartIndex(partData);\n\t\tconst charIndex = CharacterMapping.getCharIndex(partData);\n\t\treturn new DomPosition(partIndex, charIndex);\n\t}\n\n\tpublic getColumn(domPosition: DomPosition, partLength: number): number {\n\t\tconst charOffset = this.partDataToCharOffset(domPosition.partIndex, partLength, domPosition.charIndex);\n\t\treturn charOffset + 1;\n\t}\n\n\tprivate partDataToCharOffset(partIndex: number, partLength: number, charIndex: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst searchEntry = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\n\t\tlet min = 0;\n\t\tlet max = this.length - 1;\n\t\twhile (min + 1 < max) {\n\t\t\tconst mid = ((min + max) >>> 1);\n\t\t\tconst midEntry = this._data[mid];\n\t\t\tif (midEntry === searchEntry) {\n\t\t\t\treturn mid;\n\t\t\t} else if (midEntry > searchEntry) {\n\t\t\t\tmax = mid;\n\t\t\t} else {\n\t\t\t\tmin = mid;\n\t\t\t}\n\t\t}\n\n\t\tif (min === max) {\n\t\t\treturn min;\n\t\t}\n\n\t\tconst minEntry = this._data[min];\n\t\tconst maxEntry = this._data[max];\n\n\t\tif (minEntry === searchEntry) {\n\t\t\treturn min;\n\t\t}\n\t\tif (maxEntry === searchEntry) {\n\t\t\treturn max;\n\t\t}\n\n\t\tconst minPartIndex = CharacterMapping.getPartIndex(minEntry);\n\t\tconst minCharIndex = CharacterMapping.getCharIndex(minEntry);\n\n\t\tconst maxPartIndex = CharacterMapping.getPartIndex(maxEntry);\n\t\tlet maxCharIndex: number;\n\n\t\tif (minPartIndex !== maxPartIndex) {\n\t\t\t// sitting between parts\n\t\t\tmaxCharIndex = partLength;\n\t\t} else {\n\t\t\tmaxCharIndex = CharacterMapping.getCharIndex(maxEntry);\n\t\t}\n\n\t\tconst minEntryDistance = charIndex - minCharIndex;\n\t\tconst maxEntryDistance = maxCharIndex - charIndex;\n\n\t\tif (minEntryDistance <= maxEntryDistance) {\n\t\t\treturn min;\n\t\t}\n\t\treturn max;\n\t}\n}\n\nexport const enum ForeignElementType {\n\tNone = 0,\n\tBefore = 1,\n\tAfter = 2\n}\n\nexport class RenderLineOutput {\n\t_renderLineOutputBrand: void = undefined;\n\n\treadonly characterMapping: CharacterMapping;\n\treadonly containsForeignElements: ForeignElementType;\n\n\tconstructor(characterMapping: CharacterMapping, containsForeignElements: ForeignElementType) {\n\t\tthis.characterMapping = characterMapping;\n\t\tthis.containsForeignElements = containsForeignElements;\n\t}\n}\n\nexport function renderViewLine(input: RenderLineInput, sb: StringBuilder): RenderLineOutput {\n\tif (input.lineContent.length === 0) {\n\n\t\tif (input.lineDecorations.length > 0) {\n\t\t\t// This line is empty, but it contains inline decorations\n\t\t\tsb.appendString(`<span>`);\n\n\t\t\tlet beforeCount = 0;\n\t\t\tlet afterCount = 0;\n\t\t\tlet containsForeignElements = ForeignElementType.None;\n\t\t\tfor (const lineDecoration of input.lineDecorations) {\n\t\t\t\tif (lineDecoration.type === InlineDecorationType.Before || lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\t\tsb.appendString(`<span class=\"`);\n\t\t\t\t\tsb.appendString(lineDecoration.className);\n\t\t\t\t\tsb.appendString(`\"></span>`);\n\n\t\t\t\t\tif (lineDecoration.type === InlineDecorationType.Before) {\n\t\t\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t\t\t\tbeforeCount++;\n\t\t\t\t\t}\n\t\t\t\t\tif (lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\t\t\tcontainsForeignElements |= ForeignElementType.After;\n\t\t\t\t\t\tafterCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsb.appendString(`</span>`);\n\n\t\t\tconst characterMapping = new CharacterMapping(1, beforeCount + afterCount);\n\t\t\tcharacterMapping.setColumnInfo(1, beforeCount, 0, 0);\n\n\t\t\treturn new RenderLineOutput(\n\t\t\t\tcharacterMapping,\n\t\t\t\tcontainsForeignElements\n\t\t\t);\n\t\t}\n\n\t\t// completely empty line\n\t\tif (input.renderNewLineWhenEmpty) {\n\t\t\tsb.appendString('<span><span>\\n</span></span>');\n\t\t} else {\n\t\t\tsb.appendString('<span><span></span></span>');\n\t\t}\n\t\treturn new RenderLineOutput(\n\t\t\tnew CharacterMapping(0, 0),\n\t\t\tForeignElementType.None\n\t\t);\n\t}\n\n\treturn _renderLine(resolveRenderLineInput(input), sb);\n}\n\nexport class RenderLineOutput2 {\n\tconstructor(\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly html: string,\n\t\tpublic readonly containsForeignElements: ForeignElementType\n\t) {\n\t}\n}\n\nexport function renderViewLine2(input: RenderLineInput): RenderLineOutput2 {\n\tconst sb = new StringBuilder(10000);\n\tconst out = renderViewLine(input, sb);\n\treturn new RenderLineOutput2(out.characterMapping, sb.build(), out.containsForeignElements);\n}\n\nclass ResolvedRenderLineInput {\n\tconstructor(\n\t\tpublic readonly fontIsMonospace: boolean,\n\t\tpublic readonly canUseHalfwidthRightwardsArrow: boolean,\n\t\tpublic readonly lineContent: string,\n\t\tpublic readonly len: number,\n\t\tpublic readonly isOverflowing: boolean,\n\t\tpublic readonly overflowingCharCount: number,\n\t\tpublic readonly parts: LinePart[],\n\t\tpublic readonly containsForeignElements: ForeignElementType,\n\t\tpublic readonly fauxIndentLength: number,\n\t\tpublic readonly tabSize: number,\n\t\tpublic readonly startVisibleColumn: number,\n\t\tpublic readonly spaceWidth: number,\n\t\tpublic readonly renderSpaceCharCode: number,\n\t\tpublic readonly renderWhitespace: RenderWhitespace,\n\t\tpublic readonly renderControlCharacters: boolean,\n\t) {\n\t\t//\n\t}\n}\n\nfunction resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput {\n\tconst lineContent = input.lineContent;\n\n\tlet isOverflowing: boolean;\n\tlet overflowingCharCount: number;\n\tlet len: number;\n\n\tif (input.stopRenderingLineAfter !== -1 && input.stopRenderingLineAfter < lineContent.length) {\n\t\tisOverflowing = true;\n\t\toverflowingCharCount = lineContent.length - input.stopRenderingLineAfter;\n\t\tlen = input.stopRenderingLineAfter;\n\t} else {\n\t\tisOverflowing = false;\n\t\toverflowingCharCount = 0;\n\t\tlen = lineContent.length;\n\t}\n\n\tlet tokens = transformAndRemoveOverflowing(lineContent, input.containsRTL, input.lineTokens, input.fauxIndentLength, len);\n\tif (input.renderControlCharacters && !input.isBasicASCII) {\n\t\t// Calling `extractControlCharacters` before adding (possibly empty) line parts\n\t\t// for inline decorations. `extractControlCharacters` removes empty line parts.\n\t\ttokens = extractControlCharacters(lineContent, tokens);\n\t}\n\tif (input.renderWhitespace === RenderWhitespace.All ||\n\t\tinput.renderWhitespace === RenderWhitespace.Boundary ||\n\t\t(input.renderWhitespace === RenderWhitespace.Selection && !!input.selectionsOnLine) ||\n\t\t(input.renderWhitespace === RenderWhitespace.Trailing && !input.continuesWithWrappedLine)\n\t) {\n\t\ttokens = _applyRenderWhitespace(input, lineContent, len, tokens);\n\t}\n\tlet containsForeignElements = ForeignElementType.None;\n\tif (input.lineDecorations.length > 0) {\n\t\tfor (let i = 0, len = input.lineDecorations.length; i < len; i++) {\n\t\t\tconst lineDecoration = input.lineDecorations[i];\n\t\t\tif (lineDecoration.type === InlineDecorationType.RegularAffectingLetterSpacing) {\n\t\t\t\t// Pretend there are foreign elements... although not 100% accurate.\n\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t} else if (lineDecoration.type === InlineDecorationType.Before) {\n\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t} else if (lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\tcontainsForeignElements |= ForeignElementType.After;\n\t\t\t}\n\t\t}\n\t\ttokens = _applyInlineDecorations(lineContent, len, tokens, input.lineDecorations);\n\t}\n\tif (!input.containsRTL) {\n\t\t// We can never split RTL text, as it ruins the rendering\n\t\ttokens = splitLargeTokens(lineContent, tokens, !input.isBasicASCII || input.fontLigatures);\n\t}\n\n\treturn new ResolvedRenderLineInput(\n\t\tinput.useMonospaceOptimizations,\n\t\tinput.canUseHalfwidthRightwardsArrow,\n\t\tlineContent,\n\t\tlen,\n\t\tisOverflowing,\n\t\toverflowingCharCount,\n\t\ttokens,\n\t\tcontainsForeignElements,\n\t\tinput.fauxIndentLength,\n\t\tinput.tabSize,\n\t\tinput.startVisibleColumn,\n\t\tinput.spaceWidth,\n\t\tinput.renderSpaceCharCode,\n\t\tinput.renderWhitespace,\n\t\tinput.renderControlCharacters\n\t);\n}\n\n/**\n * In the rendering phase, characters are always looped until token.endIndex.\n * Ensure that all tokens end before `len` and the last one ends precisely at `len`.\n */\nfunction transformAndRemoveOverflowing(lineContent: string, lineContainsRTL: boolean, tokens: IViewLineTokens, fauxIndentLength: number, len: number): LinePart[] {\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\n\t// The faux indent part of the line should have no token type\n\tif (fauxIndentLength > 0) {\n\t\tresult[resultLen++] = new LinePart(fauxIndentLength, '', 0, false);\n\t}\n\tlet startOffset = fauxIndentLength;\n\tfor (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\n\t\tconst endIndex = tokens.getEndOffset(tokenIndex);\n\t\tif (endIndex <= fauxIndentLength) {\n\t\t\t// The faux indent part of the line should have no token type\n\t\t\tcontinue;\n\t\t}\n\t\tconst type = tokens.getClassName(tokenIndex);\n\t\tif (endIndex >= len) {\n\t\t\tconst tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, len)) : false);\n\t\t\tresult[resultLen++] = new LinePart(len, type, 0, tokenContainsRTL);\n\t\t\tbreak;\n\t\t}\n\t\tconst tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, endIndex)) : false);\n\t\tresult[resultLen++] = new LinePart(endIndex, type, 0, tokenContainsRTL);\n\t\tstartOffset = endIndex;\n\t}\n\n\treturn result;\n}\n\n/**\n * written as a const enum to get value inlining.\n */\nconst enum Constants {\n\tLongToken = 50\n}\n\n/**\n * See https://github.com/microsoft/vscode/issues/6885.\n * It appears that having very large spans causes very slow reading of character positions.\n * So here we try to avoid that.\n */\nfunction splitLargeTokens(lineContent: string, tokens: LinePart[], onlyAtSpaces: boolean): LinePart[] {\n\tlet lastTokenEndIndex = 0;\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\n\tif (onlyAtSpaces) {\n\t\t// Split only at spaces => we need to walk each character\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tconst tokenEndIndex = token.endIndex;\n\t\t\tif (lastTokenEndIndex + Constants.LongToken < tokenEndIndex) {\n\t\t\t\tconst tokenType = token.type;\n\t\t\t\tconst tokenMetadata = token.metadata;\n\t\t\t\tconst tokenContainsRTL = token.containsRTL;\n\n\t\t\t\tlet lastSpaceOffset = -1;\n\t\t\t\tlet currTokenStart = lastTokenEndIndex;\n\t\t\t\tfor (let j = lastTokenEndIndex; j < tokenEndIndex; j++) {\n\t\t\t\t\tif (lineContent.charCodeAt(j) === CharCode.Space) {\n\t\t\t\t\t\tlastSpaceOffset = j;\n\t\t\t\t\t}\n\t\t\t\t\tif (lastSpaceOffset !== -1 && j - currTokenStart >= Constants.LongToken) {\n\t\t\t\t\t\t// Split at `lastSpaceOffset` + 1\n\t\t\t\t\t\tresult[resultLen++] = new LinePart(lastSpaceOffset + 1, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t\t\tcurrTokenStart = lastSpaceOffset + 1;\n\t\t\t\t\t\tlastSpaceOffset = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (currTokenStart !== tokenEndIndex) {\n\t\t\t\t\tresult[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult[resultLen++] = token;\n\t\t\t}\n\n\t\t\tlastTokenEndIndex = tokenEndIndex;\n\t\t}\n\t} else {\n\t\t// Split anywhere => we don't need to walk each character\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tconst tokenEndIndex = token.endIndex;\n\t\t\tconst diff = (tokenEndIndex - lastTokenEndIndex);\n\t\t\tif (diff > Constants.LongToken) {\n\t\t\t\tconst tokenType = token.type;\n\t\t\t\tconst tokenMetadata = token.metadata;\n\t\t\t\tconst tokenContainsRTL = token.containsRTL;\n\t\t\t\tconst piecesCount = Math.ceil(diff / Constants.LongToken);\n\t\t\t\tfor (let j = 1; j < piecesCount; j++) {\n\t\t\t\t\tconst pieceEndIndex = lastTokenEndIndex + (j * Constants.LongToken);\n\t\t\t\t\tresult[resultLen++] = new LinePart(pieceEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t}\n\t\t\t\tresult[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t} else {\n\t\t\t\tresult[resultLen++] = token;\n\t\t\t}\n\t\t\tlastTokenEndIndex = tokenEndIndex;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction isControlCharacter(charCode: number): boolean {\n\tif (charCode < 32) {\n\t\treturn (charCode !== CharCode.Tab);\n\t}\n\tif (charCode === 127) {\n\t\t// DEL\n\t\treturn true;\n\t}\n\n\tif (\n\t\t(charCode >= 0x202A && charCode <= 0x202E)\n\t\t|| (charCode >= 0x2066 && charCode <= 0x2069)\n\t\t|| (charCode >= 0x200E && charCode <= 0x200F)\n\t\t|| charCode === 0x061C\n\t) {\n\t\t// Unicode Directional Formatting Characters\n\t\t// LRE\tU+202A\tLEFT-TO-RIGHT EMBEDDING\n\t\t// RLE\tU+202B\tRIGHT-TO-LEFT EMBEDDING\n\t\t// PDF\tU+202C\tPOP DIRECTIONAL FORMATTING\n\t\t// LRO\tU+202D\tLEFT-TO-RIGHT OVERRIDE\n\t\t// RLO\tU+202E\tRIGHT-TO-LEFT OVERRIDE\n\t\t// LRI\tU+2066\tLEFT-TO-RIGHT ISOLATE\n\t\t// RLI\tU+2067\tRIGHT-TO-LEFT ISOLATE\n\t\t// FSI\tU+2068\tFIRST STRONG ISOLATE\n\t\t// PDI\tU+2069\tPOP DIRECTIONAL ISOLATE\n\t\t// LRM\tU+200E\tLEFT-TO-RIGHT MARK\n\t\t// RLM\tU+200F\tRIGHT-TO-LEFT MARK\n\t\t// ALM\tU+061C\tARABIC LETTER MARK\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction extractControlCharacters(lineContent: string, tokens: LinePart[]): LinePart[] {\n\tconst result: LinePart[] = [];\n\tlet lastLinePart: LinePart = new LinePart(0, '', 0, false);\n\tlet charOffset = 0;\n\tfor (const token of tokens) {\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tfor (; charOffset < tokenEndIndex; charOffset++) {\n\t\t\tconst charCode = lineContent.charCodeAt(charOffset);\n\t\t\tif (isControlCharacter(charCode)) {\n\t\t\t\tif (charOffset > lastLinePart.endIndex) {\n\t\t\t\t\t// emit previous part if it has text\n\t\t\t\t\tlastLinePart = new LinePart(charOffset, token.type, token.metadata, token.containsRTL);\n\t\t\t\t\tresult.push(lastLinePart);\n\t\t\t\t}\n\t\t\t\tlastLinePart = new LinePart(charOffset + 1, 'mtkcontrol', token.metadata, false);\n\t\t\t\tresult.push(lastLinePart);\n\t\t\t}\n\t\t}\n\t\tif (charOffset > lastLinePart.endIndex) {\n\t\t\t// emit previous part if it has text\n\t\t\tlastLinePart = new LinePart(tokenEndIndex, token.type, token.metadata, token.containsRTL);\n\t\t\tresult.push(lastLinePart);\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * Whitespace is rendered by \"replacing\" tokens with a special-purpose `mtkw` type that is later recognized in the rendering phase.\n * Moreover, a token is created for every visual indent because on some fonts the glyphs used for rendering whitespace (→ or ·) do not have the same width as .\n * The rendering phase will generate `style=\"width:...\"` for these tokens.\n */\nfunction _applyRenderWhitespace(input: RenderLineInput, lineContent: string, len: number, tokens: LinePart[]): LinePart[] {\n\n\tconst continuesWithWrappedLine = input.continuesWithWrappedLine;\n\tconst fauxIndentLength = input.fauxIndentLength;\n\tconst tabSize = input.tabSize;\n\tconst startVisibleColumn = input.startVisibleColumn;\n\tconst useMonospaceOptimizations = input.useMonospaceOptimizations;\n\tconst selections = input.selectionsOnLine;\n\tconst onlyBoundary = (input.renderWhitespace === RenderWhitespace.Boundary);\n\tconst onlyTrailing = (input.renderWhitespace === RenderWhitespace.Trailing);\n\tconst generateLinePartForEachWhitespace = (input.renderSpaceWidth !== input.spaceWidth);\n\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\tlet tokenIndex = 0;\n\tlet tokenType = tokens[tokenIndex].type;\n\tlet tokenContainsRTL = tokens[tokenIndex].containsRTL;\n\tlet tokenEndIndex = tokens[tokenIndex].endIndex;\n\tconst tokensLength = tokens.length;\n\n\tlet lineIsEmptyOrWhitespace = false;\n\tlet firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\tlet lastNonWhitespaceIndex: number;\n\tif (firstNonWhitespaceIndex === -1) {\n\t\tlineIsEmptyOrWhitespace = true;\n\t\tfirstNonWhitespaceIndex = len;\n\t\tlastNonWhitespaceIndex = len;\n\t} else {\n\t\tlastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n\t}\n\n\tlet wasInWhitespace = false;\n\tlet currentSelectionIndex = 0;\n\tlet currentSelection = selections && selections[currentSelectionIndex];\n\tlet tmpIndent = startVisibleColumn % tabSize;\n\tfor (let charIndex = fauxIndentLength; charIndex < len; charIndex++) {\n\t\tconst chCode = lineContent.charCodeAt(charIndex);\n\n\t\tif (currentSelection && currentSelection.endExclusive <= charIndex) {\n\t\t\tcurrentSelectionIndex++;\n\t\t\tcurrentSelection = selections && selections[currentSelectionIndex];\n\t\t}\n\n\t\tlet isInWhitespace: boolean;\n\t\tif (charIndex < firstNonWhitespaceIndex || charIndex > lastNonWhitespaceIndex) {\n\t\t\t// in leading or trailing whitespace\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Tab) {\n\t\t\t// a tab character is rendered both in all and boundary cases\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Space) {\n\t\t\t// hit a space character\n\t\t\tif (onlyBoundary) {\n\t\t\t\t// rendering only boundary whitespace\n\t\t\t\tif (wasInWhitespace) {\n\t\t\t\t\tisInWhitespace = true;\n\t\t\t\t} else {\n\t\t\t\t\tconst nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null);\n\t\t\t\t\tisInWhitespace = (nextChCode === CharCode.Space || nextChCode === CharCode.Tab);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisInWhitespace = true;\n\t\t\t}\n\t\t} else {\n\t\t\tisInWhitespace = false;\n\t\t}\n\n\t\t// If rendering whitespace on selection, check that the charIndex falls within a selection\n\t\tif (isInWhitespace && selections) {\n\t\t\tisInWhitespace = !!currentSelection && currentSelection.start <= charIndex && charIndex < currentSelection.endExclusive;\n\t\t}\n\n\t\t// If rendering only trailing whitespace, check that the charIndex points to trailing whitespace.\n\t\tif (isInWhitespace && onlyTrailing) {\n\t\t\tisInWhitespace = lineIsEmptyOrWhitespace || charIndex > lastNonWhitespaceIndex;\n\t\t}\n\n\t\tif (isInWhitespace && tokenContainsRTL) {\n\t\t\t// If the token contains RTL text, breaking it up into multiple line parts\n\t\t\t// to render whitespace might affect the browser's bidi layout.\n\t\t\t//\n\t\t\t// We render whitespace in such tokens only if the whitespace\n\t\t\t// is the leading or the trailing whitespace of the line,\n\t\t\t// which doesn't affect the browser's bidi layout.\n\t\t\tif (charIndex >= firstNonWhitespaceIndex && charIndex <= lastNonWhitespaceIndex) {\n\t\t\t\tisInWhitespace = false;\n\t\t\t}\n\t\t}\n\n\t\tif (wasInWhitespace) {\n\t\t\t// was in whitespace token\n\t\t\tif (!isInWhitespace || (!useMonospaceOptimizations && tmpIndent >= tabSize)) {\n\t\t\t\t// leaving whitespace token or entering a new indent\n\t\t\t\tif (generateLinePartForEachWhitespace) {\n\t\t\t\t\tconst lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n\t\t\t\t\tfor (let i = lastEndIndex + 1; i <= charIndex; i++) {\n\t\t\t\t\t\tresult[resultLen++] = new LinePart(i, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult[resultLen++] = new LinePart(charIndex, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t\t}\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t} else {\n\t\t\t// was in regular token\n\t\t\tif (charIndex === tokenEndIndex || (isInWhitespace && charIndex > fauxIndentLength)) {\n\t\t\t\tresult[resultLen++] = new LinePart(charIndex, tokenType, 0, tokenContainsRTL);\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t}\n\n\t\tif (chCode === CharCode.Tab) {\n\t\t\ttmpIndent = tabSize;\n\t\t} else if (strings.isFullWidthCharacter(chCode)) {\n\t\t\ttmpIndent += 2;\n\t\t} else {\n\t\t\ttmpIndent++;\n\t\t}\n\n\t\twasInWhitespace = isInWhitespace;\n\n\t\twhile (charIndex === tokenEndIndex) {\n\t\t\ttokenIndex++;\n\t\t\tif (tokenIndex < tokensLength) {\n\t\t\t\ttokenType = tokens[tokenIndex].type;\n\t\t\t\ttokenContainsRTL = tokens[tokenIndex].containsRTL;\n\t\t\t\ttokenEndIndex = tokens[tokenIndex].endIndex;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet generateWhitespace = false;\n\tif (wasInWhitespace) {\n\t\t// was in whitespace token\n\t\tif (continuesWithWrappedLine && onlyBoundary) {\n\t\t\tconst lastCharCode = (len > 0 ? lineContent.charCodeAt(len - 1) : CharCode.Null);\n\t\t\tconst prevCharCode = (len > 1 ? lineContent.charCodeAt(len - 2) : CharCode.Null);\n\t\t\tconst isSingleTrailingSpace = (lastCharCode === CharCode.Space && (prevCharCode !== CharCode.Space && prevCharCode !== CharCode.Tab));\n\t\t\tif (!isSingleTrailingSpace) {\n\t\t\t\tgenerateWhitespace = true;\n\t\t\t}\n\t\t} else {\n\t\t\tgenerateWhitespace = true;\n\t\t}\n\t}\n\n\tif (generateWhitespace) {\n\t\tif (generateLinePartForEachWhitespace) {\n\t\t\tconst lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n\t\t\tfor (let i = lastEndIndex + 1; i <= len; i++) {\n\t\t\t\tresult[resultLen++] = new LinePart(i, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t}\n\t\t} else {\n\t\t\tresult[resultLen++] = new LinePart(len, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t}\n\t} else {\n\t\tresult[resultLen++] = new LinePart(len, tokenType, 0, tokenContainsRTL);\n\t}\n\n\treturn result;\n}\n\n/**\n * Inline decorations are \"merged\" on top of tokens.\n * Special care must be taken when multiple inline decorations are at play and they overlap.\n */\nfunction _applyInlineDecorations(lineContent: string, len: number, tokens: LinePart[], _lineDecorations: LineDecoration[]): LinePart[] {\n\t_lineDecorations.sort(LineDecoration.compare);\n\tconst lineDecorations = LineDecorationsNormalizer.normalize(lineContent, _lineDecorations);\n\tconst lineDecorationsLen = lineDecorations.length;\n\n\tlet lineDecorationIndex = 0;\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\tlet lastResultEndIndex = 0;\n\tfor (let tokenIndex = 0, len = tokens.length; tokenIndex < len; tokenIndex++) {\n\t\tconst token = tokens[tokenIndex];\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tconst tokenType = token.type;\n\t\tconst tokenMetadata = token.metadata;\n\t\tconst tokenContainsRTL = token.containsRTL;\n\n\t\twhile (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset < tokenEndIndex) {\n\t\t\tconst lineDecoration = lineDecorations[lineDecorationIndex];\n\n\t\t\tif (lineDecoration.startOffset > lastResultEndIndex) {\n\t\t\t\tlastResultEndIndex = lineDecoration.startOffset;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t}\n\n\t\t\tif (lineDecoration.endOffset + 1 <= tokenEndIndex) {\n\t\t\t\t// This line decoration ends before this token ends\n\t\t\t\tlastResultEndIndex = lineDecoration.endOffset + 1;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata, tokenContainsRTL);\n\t\t\t\tlineDecorationIndex++;\n\t\t\t} else {\n\t\t\t\t// This line decoration continues on to the next token\n\t\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata, tokenContainsRTL);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (tokenEndIndex > lastResultEndIndex) {\n\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t}\n\t}\n\n\tconst lastTokenEndIndex = tokens[tokens.length - 1].endIndex;\n\tif (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n\t\twhile (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n\t\t\tconst lineDecoration = lineDecorations[lineDecorationIndex];\n\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, lineDecoration.className, lineDecoration.metadata, false);\n\t\t\tlineDecorationIndex++;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * This function is on purpose not split up into multiple functions to allow runtime type inference (i.e. performance reasons).\n * Notice how all the needed data is fully resolved and passed in (i.e. no other calls).\n */\nfunction _renderLine(input: ResolvedRenderLineInput, sb: StringBuilder): RenderLineOutput {\n\tconst fontIsMonospace = input.fontIsMonospace;\n\tconst canUseHalfwidthRightwardsArrow = input.canUseHalfwidthRightwardsArrow;\n\tconst containsForeignElements = input.containsForeignElements;\n\tconst lineContent = input.lineContent;\n\tconst len = input.len;\n\tconst isOverflowing = input.isOverflowing;\n\tconst overflowingCharCount = input.overflowingCharCount;\n\tconst parts = input.parts;\n\tconst fauxIndentLength = input.fauxIndentLength;\n\tconst tabSize = input.tabSize;\n\tconst startVisibleColumn = input.startVisibleColumn;\n\tconst spaceWidth = input.spaceWidth;\n\tconst renderSpaceCharCode = input.renderSpaceCharCode;\n\tconst renderWhitespace = input.renderWhitespace;\n\tconst renderControlCharacters = input.renderControlCharacters;\n\n\tconst characterMapping = new CharacterMapping(len + 1, parts.length);\n\tlet lastCharacterMappingDefined = false;\n\n\tlet charIndex = 0;\n\tlet visibleColumn = startVisibleColumn;\n\tlet charOffsetInPart = 0; // the character offset in the current part\n\tlet charHorizontalOffset = 0; // the character horizontal position in terms of chars relative to line start\n\n\tlet partDisplacement = 0;\n\n\tsb.appendString('<span>');\n\n\tfor (let partIndex = 0, tokensLen = parts.length; partIndex < tokensLen; partIndex++) {\n\n\t\tconst part = parts[partIndex];\n\t\tconst partEndIndex = part.endIndex;\n\t\tconst partType = part.type;\n\t\tconst partContainsRTL = part.containsRTL;\n\t\tconst partRendersWhitespace = (renderWhitespace !== RenderWhitespace.None && part.isWhitespace());\n\t\tconst partRendersWhitespaceWithWidth = partRendersWhitespace && !fontIsMonospace && (partType === 'mtkw'/*only whitespace*/ || !containsForeignElements);\n\t\tconst partIsEmptyAndHasPseudoAfter = (charIndex === partEndIndex && part.isPseudoAfter());\n\t\tcharOffsetInPart = 0;\n\n\t\tsb.appendString('<span ');\n\t\tif (partContainsRTL) {\n\t\t\tsb.appendString('style=\"unicode-bidi:isolate\" ');\n\t\t}\n\t\tsb.appendString('class=\"');\n\t\tsb.appendString(partRendersWhitespaceWithWidth ? 'mtkz' : partType);\n\t\tsb.appendASCIICharCode(CharCode.DoubleQuote);\n\n\t\tif (partRendersWhitespace) {\n\n\t\t\tlet partWidth = 0;\n\t\t\t{\n\t\t\t\tlet _charIndex = charIndex;\n\t\t\t\tlet _visibleColumn = visibleColumn;\n\n\t\t\t\tfor (; _charIndex < partEndIndex; _charIndex++) {\n\t\t\t\t\tconst charCode = lineContent.charCodeAt(_charIndex);\n\t\t\t\t\tconst charWidth = (charCode === CharCode.Tab ? (tabSize - (_visibleColumn % tabSize)) : 1) | 0;\n\t\t\t\t\tpartWidth += charWidth;\n\t\t\t\t\tif (_charIndex >= fauxIndentLength) {\n\t\t\t\t\t\t_visibleColumn += charWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (partRendersWhitespaceWithWidth) {\n\t\t\t\tsb.appendString(' style=\"width:');\n\t\t\t\tsb.appendString(String(spaceWidth * partWidth));\n\t\t\t\tsb.appendString('px\"');\n\t\t\t}\n\t\t\tsb.appendASCIICharCode(CharCode.GreaterThan);\n\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n\t\t\t\tpartDisplacement = 0;\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tlet producedCharacters: number;\n\t\t\t\tlet charWidth: number;\n\n\t\t\t\tif (charCode === CharCode.Tab) {\n\t\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize)) | 0;\n\t\t\t\t\tcharWidth = producedCharacters;\n\n\t\t\t\t\tif (!canUseHalfwidthRightwardsArrow || charWidth > 1) {\n\t\t\t\t\t\tsb.appendCharCode(0x2192); // RIGHTWARDS ARROW\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsb.appendCharCode(0xFFEB); // HALFWIDTH RIGHTWARDS ARROW\n\t\t\t\t\t}\n\t\t\t\t\tfor (let space = 2; space <= charWidth; space++) {\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t}\n\n\t\t\t\t} else { // must be CharCode.Space\n\t\t\t\t\tproducedCharacters = 2;\n\t\t\t\t\tcharWidth = 1;\n\n\t\t\t\t\tsb.appendCharCode(renderSpaceCharCode); // · or word separator middle dot\n\t\t\t\t\tsb.appendCharCode(0x200C); // ZERO WIDTH NON-JOINER\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart += producedCharacters;\n\t\t\t\tcharHorizontalOffset += charWidth;\n\t\t\t\tif (charIndex >= fauxIndentLength) {\n\t\t\t\t\tvisibleColumn += charWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tsb.appendASCIICharCode(CharCode.GreaterThan);\n\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n\t\t\t\tpartDisplacement = 0;\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tlet producedCharacters = 1;\n\t\t\t\tlet charWidth = 1;\n\n\t\t\t\tswitch (charCode) {\n\t\t\t\t\tcase CharCode.Tab:\n\t\t\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize));\n\t\t\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\t\t\tfor (let space = 1; space <= producedCharacters; space++) {\n\t\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Space:\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.LessThan:\n\t\t\t\t\t\tsb.appendString('<');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.GreaterThan:\n\t\t\t\t\t\tsb.appendString('>');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Ampersand:\n\t\t\t\t\t\tsb.appendString('&');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Null:\n\t\t\t\t\t\tif (renderControlCharacters) {\n\t\t\t\t\t\t\t// See https://unicode-table.com/en/blocks/control-pictures/\n\t\t\t\t\t\t\tsb.appendCharCode(9216);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsb.appendString('�');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.UTF8_BOM:\n\t\t\t\t\tcase CharCode.LINE_SEPARATOR:\n\t\t\t\t\tcase CharCode.PARAGRAPH_SEPARATOR:\n\t\t\t\t\tcase CharCode.NEXT_LINE:\n\t\t\t\t\t\tsb.appendCharCode(0xFFFD);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (strings.isFullWidthCharacter(charCode)) {\n\t\t\t\t\t\t\tcharWidth++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// See https://unicode-table.com/en/blocks/control-pictures/\n\t\t\t\t\t\tif (renderControlCharacters && charCode < 32) {\n\t\t\t\t\t\t\tsb.appendCharCode(9216 + charCode);\n\t\t\t\t\t\t} else if (renderControlCharacters && charCode === 127) {\n\t\t\t\t\t\t\t// DEL\n\t\t\t\t\t\t\tsb.appendCharCode(9249);\n\t\t\t\t\t\t} else if (renderControlCharacters && isControlCharacter(charCode)) {\n\t\t\t\t\t\t\tsb.appendString('[U+');\n\t\t\t\t\t\t\tsb.appendString(to4CharHex(charCode));\n\t\t\t\t\t\t\tsb.appendString(']');\n\t\t\t\t\t\t\tproducedCharacters = 8;\n\t\t\t\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsb.appendCharCode(charCode);\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart += producedCharacters;\n\t\t\t\tcharHorizontalOffset += charWidth;\n\t\t\t\tif (charIndex >= fauxIndentLength) {\n\t\t\t\t\tvisibleColumn += charWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (partIsEmptyAndHasPseudoAfter) {\n\t\t\tpartDisplacement++;\n\t\t} else {\n\t\t\tpartDisplacement = 0;\n\t\t}\n\n\t\tif (charIndex >= len && !lastCharacterMappingDefined && part.isPseudoAfter()) {\n\t\t\tlastCharacterMappingDefined = true;\n\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex, charOffsetInPart, charHorizontalOffset);\n\t\t}\n\n\t\tsb.appendString('</span>');\n\n\t}\n\n\tif (!lastCharacterMappingDefined) {\n\t\t// When getting client rects for the last character, we will position the\n\t\t// text range at the end of the span, insteaf of at the beginning of next span\n\t\tcharacterMapping.setColumnInfo(len + 1, parts.length - 1, charOffsetInPart, charHorizontalOffset);\n\t}\n\n\tif (isOverflowing) {\n\t\tsb.appendString('<span class=\"mtkoverflow\">');\n\t\tsb.appendString(nls.localize('showMore', \"Show more ({0})\", renderOverflowingCharCount(overflowingCharCount)));\n\t\tsb.appendString('</span>');\n\t}\n\n\tsb.appendString('</span>');\n\n\treturn new RenderLineOutput(characterMapping, containsForeignElements);\n}\n\nfunction to4CharHex(n: number): string {\n\treturn n.toString(16).toUpperCase().padStart(4, '0');\n}\n\nfunction renderOverflowingCharCount(n: number): string {\n\tif (n < 1024) {\n\t\treturn nls.localize('overflow.chars', \"{0} chars\", n);\n\t}\n\tif (n < 1024 * 1024) {\n\t\treturn `${(n / 1024).toFixed(1)} KB`;\n\t}\n\treturn `${(n / 1024 / 1024).toFixed(1)} MB`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["vs/editor/common/viewLayout/viewLineRenderer.ts"],"names":[],"mappings":"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","file":"viewLineRenderer.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as nls from '../../../nls.js';\nimport { CharCode } from '../../../base/common/charCode.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { IViewLineTokens } from '../tokens/lineTokens.js';\nimport { StringBuilder } from '../core/stringBuilder.js';\nimport { LineDecoration, LineDecorationsNormalizer } from './lineDecorations.js';\nimport { LinePart, LinePartMetadata } from './linePart.js';\nimport { OffsetRange } from '../core/ranges/offsetRange.js';\nimport { InlineDecorationType } from '../viewModel/inlineDecorations.js';\nimport { TextDirection } from '../model.js';\n\nexport const enum RenderWhitespace {\n\tNone = 0,\n\tBoundary = 1,\n\tSelection = 2,\n\tTrailing = 3,\n\tAll = 4\n}\n\nexport class RenderLineInput {\n\n\tpublic readonly useMonospaceOptimizations: boolean;\n\tpublic readonly canUseHalfwidthRightwardsArrow: boolean;\n\tpublic readonly lineContent: string;\n\tpublic readonly continuesWithWrappedLine: boolean;\n\tpublic readonly isBasicASCII: boolean;\n\tpublic readonly containsRTL: boolean;\n\tpublic readonly fauxIndentLength: number;\n\tpublic readonly lineTokens: IViewLineTokens;\n\tpublic readonly lineDecorations: LineDecoration[];\n\tpublic readonly tabSize: number;\n\tpublic readonly startVisibleColumn: number;\n\tpublic readonly spaceWidth: number;\n\tpublic readonly renderSpaceWidth: number;\n\tpublic readonly renderSpaceCharCode: number;\n\tpublic readonly stopRenderingLineAfter: number;\n\tpublic readonly renderWhitespace: RenderWhitespace;\n\tpublic readonly renderControlCharacters: boolean;\n\tpublic readonly fontLigatures: boolean;\n\tpublic readonly textDirection: TextDirection | null;\n\tpublic readonly verticalScrollbarSize: number;\n\n\t/**\n\t * Defined only when renderWhitespace is 'selection'. Selections are non-overlapping,\n\t * and ordered by position within the line.\n\t */\n\tpublic readonly selectionsOnLine: OffsetRange[] | null;\n\t/**\n\t * When rendering an empty line, whether to render a new line instead\n\t */\n\tpublic readonly renderNewLineWhenEmpty: boolean;\n\n\tpublic get isLTR(): boolean {\n\t\treturn !this.containsRTL && this.textDirection !== TextDirection.RTL;\n\t}\n\n\tconstructor(\n\t\tuseMonospaceOptimizations: boolean,\n\t\tcanUseHalfwidthRightwardsArrow: boolean,\n\t\tlineContent: string,\n\t\tcontinuesWithWrappedLine: boolean,\n\t\tisBasicASCII: boolean,\n\t\tcontainsRTL: boolean,\n\t\tfauxIndentLength: number,\n\t\tlineTokens: IViewLineTokens,\n\t\tlineDecorations: LineDecoration[],\n\t\ttabSize: number,\n\t\tstartVisibleColumn: number,\n\t\tspaceWidth: number,\n\t\tmiddotWidth: number,\n\t\twsmiddotWidth: number,\n\t\tstopRenderingLineAfter: number,\n\t\trenderWhitespace: 'none' | 'boundary' | 'selection' | 'trailing' | 'all',\n\t\trenderControlCharacters: boolean,\n\t\tfontLigatures: boolean,\n\t\tselectionsOnLine: OffsetRange[] | null,\n\t\ttextDirection: TextDirection | null,\n\t\tverticalScrollbarSize: number,\n\t\trenderNewLineWhenEmpty: boolean = false,\n\t) {\n\t\tthis.useMonospaceOptimizations = useMonospaceOptimizations;\n\t\tthis.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\n\t\tthis.lineContent = lineContent;\n\t\tthis.continuesWithWrappedLine = continuesWithWrappedLine;\n\t\tthis.isBasicASCII = isBasicASCII;\n\t\tthis.containsRTL = containsRTL;\n\t\tthis.fauxIndentLength = fauxIndentLength;\n\t\tthis.lineTokens = lineTokens;\n\t\tthis.lineDecorations = lineDecorations.sort(LineDecoration.compare);\n\t\tthis.tabSize = tabSize;\n\t\tthis.startVisibleColumn = startVisibleColumn;\n\t\tthis.spaceWidth = spaceWidth;\n\t\tthis.stopRenderingLineAfter = stopRenderingLineAfter;\n\t\tthis.renderWhitespace = (\n\t\t\trenderWhitespace === 'all'\n\t\t\t\t? RenderWhitespace.All\n\t\t\t\t: renderWhitespace === 'boundary'\n\t\t\t\t\t? RenderWhitespace.Boundary\n\t\t\t\t\t: renderWhitespace === 'selection'\n\t\t\t\t\t\t? RenderWhitespace.Selection\n\t\t\t\t\t\t: renderWhitespace === 'trailing'\n\t\t\t\t\t\t\t? RenderWhitespace.Trailing\n\t\t\t\t\t\t\t: RenderWhitespace.None\n\t\t);\n\t\tthis.renderControlCharacters = renderControlCharacters;\n\t\tthis.fontLigatures = fontLigatures;\n\t\tthis.selectionsOnLine = selectionsOnLine && selectionsOnLine.sort((a, b) => a.start < b.start ? -1 : 1);\n\t\tthis.renderNewLineWhenEmpty = renderNewLineWhenEmpty;\n\t\tthis.textDirection = textDirection;\n\t\tthis.verticalScrollbarSize = verticalScrollbarSize;\n\n\t\tconst wsmiddotDiff = Math.abs(wsmiddotWidth - spaceWidth);\n\t\tconst middotDiff = Math.abs(middotWidth - spaceWidth);\n\t\tif (wsmiddotDiff < middotDiff) {\n\t\t\tthis.renderSpaceWidth = wsmiddotWidth;\n\t\t\tthis.renderSpaceCharCode = 0x2E31; // U+2E31 - WORD SEPARATOR MIDDLE DOT\n\t\t} else {\n\t\t\tthis.renderSpaceWidth = middotWidth;\n\t\t\tthis.renderSpaceCharCode = 0xB7; // U+00B7 - MIDDLE DOT\n\t\t}\n\t}\n\n\tprivate sameSelection(otherSelections: OffsetRange[] | null): boolean {\n\t\tif (this.selectionsOnLine === null) {\n\t\t\treturn otherSelections === null;\n\t\t}\n\n\t\tif (otherSelections === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (otherSelections.length !== this.selectionsOnLine.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0; i < this.selectionsOnLine.length; i++) {\n\t\t\tif (!this.selectionsOnLine[i].equals(otherSelections[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic equals(other: RenderLineInput): boolean {\n\t\treturn (\n\t\t\tthis.useMonospaceOptimizations === other.useMonospaceOptimizations\n\t\t\t&& this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n\t\t\t&& this.lineContent === other.lineContent\n\t\t\t&& this.continuesWithWrappedLine === other.continuesWithWrappedLine\n\t\t\t&& this.isBasicASCII === other.isBasicASCII\n\t\t\t&& this.containsRTL === other.containsRTL\n\t\t\t&& this.fauxIndentLength === other.fauxIndentLength\n\t\t\t&& this.tabSize === other.tabSize\n\t\t\t&& this.startVisibleColumn === other.startVisibleColumn\n\t\t\t&& this.spaceWidth === other.spaceWidth\n\t\t\t&& this.renderSpaceWidth === other.renderSpaceWidth\n\t\t\t&& this.renderSpaceCharCode === other.renderSpaceCharCode\n\t\t\t&& this.stopRenderingLineAfter === other.stopRenderingLineAfter\n\t\t\t&& this.renderWhitespace === other.renderWhitespace\n\t\t\t&& this.renderControlCharacters === other.renderControlCharacters\n\t\t\t&& this.fontLigatures === other.fontLigatures\n\t\t\t&& LineDecoration.equalsArr(this.lineDecorations, other.lineDecorations)\n\t\t\t&& this.lineTokens.equals(other.lineTokens)\n\t\t\t&& this.sameSelection(other.selectionsOnLine)\n\t\t\t&& this.textDirection === other.textDirection\n\t\t\t&& this.verticalScrollbarSize === other.verticalScrollbarSize\n\t\t\t&& this.renderNewLineWhenEmpty === other.renderNewLineWhenEmpty\n\t\t);\n\t}\n}\n\nconst enum CharacterMappingConstants {\n\tPART_INDEX_MASK = 0b11111111111111110000000000000000,\n\tCHAR_INDEX_MASK = 0b00000000000000001111111111111111,\n\n\tCHAR_INDEX_OFFSET = 0,\n\tPART_INDEX_OFFSET = 16\n}\n\nexport class DomPosition {\n\tconstructor(\n\t\tpublic readonly partIndex: number,\n\t\tpublic readonly charIndex: number\n\t) { }\n}\n\n/**\n * Provides a both direction mapping between a line's character and its rendered position.\n */\nexport class CharacterMapping {\n\n\tprivate static getPartIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.PART_INDEX_MASK) >>> CharacterMappingConstants.PART_INDEX_OFFSET;\n\t}\n\n\tprivate static getCharIndex(partData: number): number {\n\t\treturn (partData & CharacterMappingConstants.CHAR_INDEX_MASK) >>> CharacterMappingConstants.CHAR_INDEX_OFFSET;\n\t}\n\n\tpublic readonly length: number;\n\tprivate readonly _data: Uint32Array;\n\tprivate readonly _horizontalOffset: Uint32Array;\n\n\tconstructor(length: number, partCount: number) {\n\t\tthis.length = length;\n\t\tthis._data = new Uint32Array(this.length);\n\t\tthis._horizontalOffset = new Uint32Array(this.length);\n\t}\n\n\tpublic setColumnInfo(column: number, partIndex: number, charIndex: number, horizontalOffset: number): void {\n\t\tconst partData = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\t\tthis._data[column - 1] = partData;\n\t\tthis._horizontalOffset[column - 1] = horizontalOffset;\n\t}\n\n\tpublic getHorizontalOffset(column: number): number {\n\t\tif (this._horizontalOffset.length === 0) {\n\t\t\t// No characters on this line\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._horizontalOffset[column - 1];\n\t}\n\n\tprivate charOffsetToPartData(charOffset: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (charOffset < 0) {\n\t\t\treturn this._data[0];\n\t\t}\n\t\tif (charOffset >= this.length) {\n\t\t\treturn this._data[this.length - 1];\n\t\t}\n\t\treturn this._data[charOffset];\n\t}\n\n\tpublic getDomPosition(column: number): DomPosition {\n\t\tconst partData = this.charOffsetToPartData(column - 1);\n\t\tconst partIndex = CharacterMapping.getPartIndex(partData);\n\t\tconst charIndex = CharacterMapping.getCharIndex(partData);\n\t\treturn new DomPosition(partIndex, charIndex);\n\t}\n\n\tpublic getColumn(domPosition: DomPosition, partLength: number): number {\n\t\tconst charOffset = this.partDataToCharOffset(domPosition.partIndex, partLength, domPosition.charIndex);\n\t\treturn charOffset + 1;\n\t}\n\n\tprivate partDataToCharOffset(partIndex: number, partLength: number, charIndex: number): number {\n\t\tif (this.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst searchEntry = (\n\t\t\t(partIndex << CharacterMappingConstants.PART_INDEX_OFFSET)\n\t\t\t| (charIndex << CharacterMappingConstants.CHAR_INDEX_OFFSET)\n\t\t) >>> 0;\n\n\t\tlet min = 0;\n\t\tlet max = this.length - 1;\n\t\twhile (min + 1 < max) {\n\t\t\tconst mid = ((min + max) >>> 1);\n\t\t\tconst midEntry = this._data[mid];\n\t\t\tif (midEntry === searchEntry) {\n\t\t\t\treturn mid;\n\t\t\t} else if (midEntry > searchEntry) {\n\t\t\t\tmax = mid;\n\t\t\t} else {\n\t\t\t\tmin = mid;\n\t\t\t}\n\t\t}\n\n\t\tif (min === max) {\n\t\t\treturn min;\n\t\t}\n\n\t\tconst minEntry = this._data[min];\n\t\tconst maxEntry = this._data[max];\n\n\t\tif (minEntry === searchEntry) {\n\t\t\treturn min;\n\t\t}\n\t\tif (maxEntry === searchEntry) {\n\t\t\treturn max;\n\t\t}\n\n\t\tconst minPartIndex = CharacterMapping.getPartIndex(minEntry);\n\t\tconst minCharIndex = CharacterMapping.getCharIndex(minEntry);\n\n\t\tconst maxPartIndex = CharacterMapping.getPartIndex(maxEntry);\n\t\tlet maxCharIndex: number;\n\n\t\tif (minPartIndex !== maxPartIndex) {\n\t\t\t// sitting between parts\n\t\t\tmaxCharIndex = partLength;\n\t\t} else {\n\t\t\tmaxCharIndex = CharacterMapping.getCharIndex(maxEntry);\n\t\t}\n\n\t\tconst minEntryDistance = charIndex - minCharIndex;\n\t\tconst maxEntryDistance = maxCharIndex - charIndex;\n\n\t\tif (minEntryDistance <= maxEntryDistance) {\n\t\t\treturn min;\n\t\t}\n\t\treturn max;\n\t}\n}\n\nexport const enum ForeignElementType {\n\tNone = 0,\n\tBefore = 1,\n\tAfter = 2\n}\n\nexport class RenderLineOutput {\n\t_renderLineOutputBrand: void = undefined;\n\n\treadonly characterMapping: CharacterMapping;\n\treadonly containsForeignElements: ForeignElementType;\n\n\tconstructor(characterMapping: CharacterMapping, containsForeignElements: ForeignElementType) {\n\t\tthis.characterMapping = characterMapping;\n\t\tthis.containsForeignElements = containsForeignElements;\n\t}\n}\n\nexport function renderViewLine(input: RenderLineInput, sb: StringBuilder): RenderLineOutput {\n\tif (input.lineContent.length === 0) {\n\n\t\tif (input.lineDecorations.length > 0) {\n\t\t\t// This line is empty, but it contains inline decorations\n\t\t\tsb.appendString(`<span>`);\n\n\t\t\tlet beforeCount = 0;\n\t\t\tlet afterCount = 0;\n\t\t\tlet containsForeignElements = ForeignElementType.None;\n\t\t\tfor (const lineDecoration of input.lineDecorations) {\n\t\t\t\tif (lineDecoration.type === InlineDecorationType.Before || lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\t\tsb.appendString(`<span class=\"`);\n\t\t\t\t\tsb.appendString(lineDecoration.className);\n\t\t\t\t\tsb.appendString(`\"></span>`);\n\n\t\t\t\t\tif (lineDecoration.type === InlineDecorationType.Before) {\n\t\t\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t\t\t\tbeforeCount++;\n\t\t\t\t\t}\n\t\t\t\t\tif (lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\t\t\tcontainsForeignElements |= ForeignElementType.After;\n\t\t\t\t\t\tafterCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsb.appendString(`</span>`);\n\n\t\t\tconst characterMapping = new CharacterMapping(1, beforeCount + afterCount);\n\t\t\tcharacterMapping.setColumnInfo(1, beforeCount, 0, 0);\n\n\t\t\treturn new RenderLineOutput(\n\t\t\t\tcharacterMapping,\n\t\t\t\tcontainsForeignElements\n\t\t\t);\n\t\t}\n\n\t\t// completely empty line\n\t\tif (input.renderNewLineWhenEmpty) {\n\t\t\tsb.appendString('<span><span>\\n</span></span>');\n\t\t} else {\n\t\t\tsb.appendString('<span><span></span></span>');\n\t\t}\n\t\treturn new RenderLineOutput(\n\t\t\tnew CharacterMapping(0, 0),\n\t\t\tForeignElementType.None\n\t\t);\n\t}\n\n\treturn _renderLine(resolveRenderLineInput(input), sb);\n}\n\nexport class RenderLineOutput2 {\n\tconstructor(\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly html: string,\n\t\tpublic readonly containsForeignElements: ForeignElementType\n\t) {\n\t}\n}\n\nexport function renderViewLine2(input: RenderLineInput): RenderLineOutput2 {\n\tconst sb = new StringBuilder(10000);\n\tconst out = renderViewLine(input, sb);\n\treturn new RenderLineOutput2(out.characterMapping, sb.build(), out.containsForeignElements);\n}\n\nclass ResolvedRenderLineInput {\n\tconstructor(\n\t\tpublic readonly fontIsMonospace: boolean,\n\t\tpublic readonly canUseHalfwidthRightwardsArrow: boolean,\n\t\tpublic readonly lineContent: string,\n\t\tpublic readonly len: number,\n\t\tpublic readonly isOverflowing: boolean,\n\t\tpublic readonly overflowingCharCount: number,\n\t\tpublic readonly parts: LinePart[],\n\t\tpublic readonly containsForeignElements: ForeignElementType,\n\t\tpublic readonly fauxIndentLength: number,\n\t\tpublic readonly tabSize: number,\n\t\tpublic readonly startVisibleColumn: number,\n\t\tpublic readonly spaceWidth: number,\n\t\tpublic readonly renderSpaceCharCode: number,\n\t\tpublic readonly renderWhitespace: RenderWhitespace,\n\t\tpublic readonly renderControlCharacters: boolean,\n\t) {\n\t\t//\n\t}\n}\n\nfunction resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput {\n\tconst lineContent = input.lineContent;\n\n\tlet isOverflowing: boolean;\n\tlet overflowingCharCount: number;\n\tlet len: number;\n\n\tif (input.stopRenderingLineAfter !== -1 && input.stopRenderingLineAfter < lineContent.length) {\n\t\tisOverflowing = true;\n\t\toverflowingCharCount = lineContent.length - input.stopRenderingLineAfter;\n\t\tlen = input.stopRenderingLineAfter;\n\t} else {\n\t\tisOverflowing = false;\n\t\toverflowingCharCount = 0;\n\t\tlen = lineContent.length;\n\t}\n\n\tlet tokens = transformAndRemoveOverflowing(lineContent, input.containsRTL, input.lineTokens, input.fauxIndentLength, len);\n\tif (input.renderControlCharacters && !input.isBasicASCII) {\n\t\t// Calling `extractControlCharacters` before adding (possibly empty) line parts\n\t\t// for inline decorations. `extractControlCharacters` removes empty line parts.\n\t\ttokens = extractControlCharacters(lineContent, tokens);\n\t}\n\tif (input.renderWhitespace === RenderWhitespace.All ||\n\t\tinput.renderWhitespace === RenderWhitespace.Boundary ||\n\t\t(input.renderWhitespace === RenderWhitespace.Selection && !!input.selectionsOnLine) ||\n\t\t(input.renderWhitespace === RenderWhitespace.Trailing && !input.continuesWithWrappedLine)\n\t) {\n\t\ttokens = _applyRenderWhitespace(input, lineContent, len, tokens);\n\t}\n\tlet containsForeignElements = ForeignElementType.None;\n\tif (input.lineDecorations.length > 0) {\n\t\tfor (let i = 0, len = input.lineDecorations.length; i < len; i++) {\n\t\t\tconst lineDecoration = input.lineDecorations[i];\n\t\t\tif (lineDecoration.type === InlineDecorationType.RegularAffectingLetterSpacing) {\n\t\t\t\t// Pretend there are foreign elements... although not 100% accurate.\n\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t} else if (lineDecoration.type === InlineDecorationType.Before) {\n\t\t\t\tcontainsForeignElements |= ForeignElementType.Before;\n\t\t\t} else if (lineDecoration.type === InlineDecorationType.After) {\n\t\t\t\tcontainsForeignElements |= ForeignElementType.After;\n\t\t\t}\n\t\t}\n\t\ttokens = _applyInlineDecorations(lineContent, len, tokens, input.lineDecorations);\n\t}\n\tif (!input.containsRTL) {\n\t\t// We can never split RTL text, as it ruins the rendering\n\t\ttokens = splitLargeTokens(lineContent, tokens, !input.isBasicASCII || input.fontLigatures);\n\t} else {\n\t\t// Split the first token if it contains both leading whitespace and RTL text\n\t\ttokens = splitLeadingWhitespaceFromRTL(lineContent, tokens);\n\t}\n\n\treturn new ResolvedRenderLineInput(\n\t\tinput.useMonospaceOptimizations,\n\t\tinput.canUseHalfwidthRightwardsArrow,\n\t\tlineContent,\n\t\tlen,\n\t\tisOverflowing,\n\t\toverflowingCharCount,\n\t\ttokens,\n\t\tcontainsForeignElements,\n\t\tinput.fauxIndentLength,\n\t\tinput.tabSize,\n\t\tinput.startVisibleColumn,\n\t\tinput.spaceWidth,\n\t\tinput.renderSpaceCharCode,\n\t\tinput.renderWhitespace,\n\t\tinput.renderControlCharacters\n\t);\n}\n\n/**\n * In the rendering phase, characters are always looped until token.endIndex.\n * Ensure that all tokens end before `len` and the last one ends precisely at `len`.\n */\nfunction transformAndRemoveOverflowing(lineContent: string, lineContainsRTL: boolean, tokens: IViewLineTokens, fauxIndentLength: number, len: number): LinePart[] {\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\n\t// The faux indent part of the line should have no token type\n\tif (fauxIndentLength > 0) {\n\t\tresult[resultLen++] = new LinePart(fauxIndentLength, '', 0, false);\n\t}\n\tlet startOffset = fauxIndentLength;\n\tfor (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\n\t\tconst endIndex = tokens.getEndOffset(tokenIndex);\n\t\tif (endIndex <= fauxIndentLength) {\n\t\t\t// The faux indent part of the line should have no token type\n\t\t\tcontinue;\n\t\t}\n\t\tconst type = tokens.getClassName(tokenIndex);\n\t\tif (endIndex >= len) {\n\t\t\tconst tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, len)) : false);\n\t\t\tresult[resultLen++] = new LinePart(len, type, 0, tokenContainsRTL);\n\t\t\tbreak;\n\t\t}\n\t\tconst tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, endIndex)) : false);\n\t\tresult[resultLen++] = new LinePart(endIndex, type, 0, tokenContainsRTL);\n\t\tstartOffset = endIndex;\n\t}\n\n\treturn result;\n}\n\n/**\n * written as a const enum to get value inlining.\n */\nconst enum Constants {\n\tLongToken = 50\n}\n\n/**\n * See https://github.com/microsoft/vscode/issues/6885.\n * It appears that having very large spans causes very slow reading of character positions.\n * So here we try to avoid that.\n */\nfunction splitLargeTokens(lineContent: string, tokens: LinePart[], onlyAtSpaces: boolean): LinePart[] {\n\tlet lastTokenEndIndex = 0;\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\n\tif (onlyAtSpaces) {\n\t\t// Split only at spaces => we need to walk each character\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tconst tokenEndIndex = token.endIndex;\n\t\t\tif (lastTokenEndIndex + Constants.LongToken < tokenEndIndex) {\n\t\t\t\tconst tokenType = token.type;\n\t\t\t\tconst tokenMetadata = token.metadata;\n\t\t\t\tconst tokenContainsRTL = token.containsRTL;\n\n\t\t\t\tlet lastSpaceOffset = -1;\n\t\t\t\tlet currTokenStart = lastTokenEndIndex;\n\t\t\t\tfor (let j = lastTokenEndIndex; j < tokenEndIndex; j++) {\n\t\t\t\t\tif (lineContent.charCodeAt(j) === CharCode.Space) {\n\t\t\t\t\t\tlastSpaceOffset = j;\n\t\t\t\t\t}\n\t\t\t\t\tif (lastSpaceOffset !== -1 && j - currTokenStart >= Constants.LongToken) {\n\t\t\t\t\t\t// Split at `lastSpaceOffset` + 1\n\t\t\t\t\t\tresult[resultLen++] = new LinePart(lastSpaceOffset + 1, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t\t\tcurrTokenStart = lastSpaceOffset + 1;\n\t\t\t\t\t\tlastSpaceOffset = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (currTokenStart !== tokenEndIndex) {\n\t\t\t\t\tresult[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult[resultLen++] = token;\n\t\t\t}\n\n\t\t\tlastTokenEndIndex = tokenEndIndex;\n\t\t}\n\t} else {\n\t\t// Split anywhere => we don't need to walk each character\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tconst tokenEndIndex = token.endIndex;\n\t\t\tconst diff = (tokenEndIndex - lastTokenEndIndex);\n\t\t\tif (diff > Constants.LongToken) {\n\t\t\t\tconst tokenType = token.type;\n\t\t\t\tconst tokenMetadata = token.metadata;\n\t\t\t\tconst tokenContainsRTL = token.containsRTL;\n\t\t\t\tconst piecesCount = Math.ceil(diff / Constants.LongToken);\n\t\t\t\tfor (let j = 1; j < piecesCount; j++) {\n\t\t\t\t\tconst pieceEndIndex = lastTokenEndIndex + (j * Constants.LongToken);\n\t\t\t\t\tresult[resultLen++] = new LinePart(pieceEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t\t}\n\t\t\t\tresult[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t} else {\n\t\t\t\tresult[resultLen++] = token;\n\t\t\t}\n\t\t\tlastTokenEndIndex = tokenEndIndex;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Splits leading whitespace from the first token if it contains RTL text.\n */\nfunction splitLeadingWhitespaceFromRTL(lineContent: string, tokens: LinePart[]): LinePart[] {\n\tif (tokens.length === 0) {\n\t\treturn tokens;\n\t}\n\n\tconst firstToken = tokens[0];\n\tif (!firstToken.containsRTL) {\n\t\treturn tokens;\n\t}\n\n\t// Check if the first token starts with whitespace\n\tconst firstTokenEndIndex = firstToken.endIndex;\n\tlet firstNonWhitespaceIndex = 0;\n\tfor (let i = 0; i < firstTokenEndIndex; i++) {\n\t\tconst charCode = lineContent.charCodeAt(i);\n\t\tif (charCode !== CharCode.Space && charCode !== CharCode.Tab) {\n\t\t\tfirstNonWhitespaceIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (firstNonWhitespaceIndex === 0) {\n\t\t// No leading whitespace\n\t\treturn tokens;\n\t}\n\n\t// Split the first token into leading whitespace and the rest\n\tconst result: LinePart[] = [];\n\tresult.push(new LinePart(firstNonWhitespaceIndex, firstToken.type, firstToken.metadata, false));\n\tresult.push(new LinePart(firstTokenEndIndex, firstToken.type, firstToken.metadata, firstToken.containsRTL));\n\n\t// Add remaining tokens\n\tfor (let i = 1; i < tokens.length; i++) {\n\t\tresult.push(tokens[i]);\n\t}\n\n\treturn result;\n}\n\nfunction isControlCharacter(charCode: number): boolean {\n\tif (charCode < 32) {\n\t\treturn (charCode !== CharCode.Tab);\n\t}\n\tif (charCode === 127) {\n\t\t// DEL\n\t\treturn true;\n\t}\n\n\tif (\n\t\t(charCode >= 0x202A && charCode <= 0x202E)\n\t\t|| (charCode >= 0x2066 && charCode <= 0x2069)\n\t\t|| (charCode >= 0x200E && charCode <= 0x200F)\n\t\t|| charCode === 0x061C\n\t) {\n\t\t// Unicode Directional Formatting Characters\n\t\t// LRE\tU+202A\tLEFT-TO-RIGHT EMBEDDING\n\t\t// RLE\tU+202B\tRIGHT-TO-LEFT EMBEDDING\n\t\t// PDF\tU+202C\tPOP DIRECTIONAL FORMATTING\n\t\t// LRO\tU+202D\tLEFT-TO-RIGHT OVERRIDE\n\t\t// RLO\tU+202E\tRIGHT-TO-LEFT OVERRIDE\n\t\t// LRI\tU+2066\tLEFT-TO-RIGHT ISOLATE\n\t\t// RLI\tU+2067\tRIGHT-TO-LEFT ISOLATE\n\t\t// FSI\tU+2068\tFIRST STRONG ISOLATE\n\t\t// PDI\tU+2069\tPOP DIRECTIONAL ISOLATE\n\t\t// LRM\tU+200E\tLEFT-TO-RIGHT MARK\n\t\t// RLM\tU+200F\tRIGHT-TO-LEFT MARK\n\t\t// ALM\tU+061C\tARABIC LETTER MARK\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction extractControlCharacters(lineContent: string, tokens: LinePart[]): LinePart[] {\n\tconst result: LinePart[] = [];\n\tlet lastLinePart: LinePart = new LinePart(0, '', 0, false);\n\tlet charOffset = 0;\n\tfor (const token of tokens) {\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tfor (; charOffset < tokenEndIndex; charOffset++) {\n\t\t\tconst charCode = lineContent.charCodeAt(charOffset);\n\t\t\tif (isControlCharacter(charCode)) {\n\t\t\t\tif (charOffset > lastLinePart.endIndex) {\n\t\t\t\t\t// emit previous part if it has text\n\t\t\t\t\tlastLinePart = new LinePart(charOffset, token.type, token.metadata, token.containsRTL);\n\t\t\t\t\tresult.push(lastLinePart);\n\t\t\t\t}\n\t\t\t\tlastLinePart = new LinePart(charOffset + 1, 'mtkcontrol', token.metadata, false);\n\t\t\t\tresult.push(lastLinePart);\n\t\t\t}\n\t\t}\n\t\tif (charOffset > lastLinePart.endIndex) {\n\t\t\t// emit previous part if it has text\n\t\t\tlastLinePart = new LinePart(tokenEndIndex, token.type, token.metadata, token.containsRTL);\n\t\t\tresult.push(lastLinePart);\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * Whitespace is rendered by \"replacing\" tokens with a special-purpose `mtkw` type that is later recognized in the rendering phase.\n * Moreover, a token is created for every visual indent because on some fonts the glyphs used for rendering whitespace (→ or ·) do not have the same width as .\n * The rendering phase will generate `style=\"width:...\"` for these tokens.\n */\nfunction _applyRenderWhitespace(input: RenderLineInput, lineContent: string, len: number, tokens: LinePart[]): LinePart[] {\n\n\tconst continuesWithWrappedLine = input.continuesWithWrappedLine;\n\tconst fauxIndentLength = input.fauxIndentLength;\n\tconst tabSize = input.tabSize;\n\tconst startVisibleColumn = input.startVisibleColumn;\n\tconst useMonospaceOptimizations = input.useMonospaceOptimizations;\n\tconst selections = input.selectionsOnLine;\n\tconst onlyBoundary = (input.renderWhitespace === RenderWhitespace.Boundary);\n\tconst onlyTrailing = (input.renderWhitespace === RenderWhitespace.Trailing);\n\tconst generateLinePartForEachWhitespace = (input.renderSpaceWidth !== input.spaceWidth);\n\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\tlet tokenIndex = 0;\n\tlet tokenType = tokens[tokenIndex].type;\n\tlet tokenContainsRTL = tokens[tokenIndex].containsRTL;\n\tlet tokenEndIndex = tokens[tokenIndex].endIndex;\n\tconst tokensLength = tokens.length;\n\n\tlet lineIsEmptyOrWhitespace = false;\n\tlet firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n\tlet lastNonWhitespaceIndex: number;\n\tif (firstNonWhitespaceIndex === -1) {\n\t\tlineIsEmptyOrWhitespace = true;\n\t\tfirstNonWhitespaceIndex = len;\n\t\tlastNonWhitespaceIndex = len;\n\t} else {\n\t\tlastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n\t}\n\n\tlet wasInWhitespace = false;\n\tlet currentSelectionIndex = 0;\n\tlet currentSelection = selections && selections[currentSelectionIndex];\n\tlet tmpIndent = startVisibleColumn % tabSize;\n\tfor (let charIndex = fauxIndentLength; charIndex < len; charIndex++) {\n\t\tconst chCode = lineContent.charCodeAt(charIndex);\n\n\t\tif (currentSelection && currentSelection.endExclusive <= charIndex) {\n\t\t\tcurrentSelectionIndex++;\n\t\t\tcurrentSelection = selections && selections[currentSelectionIndex];\n\t\t}\n\n\t\tlet isInWhitespace: boolean;\n\t\tif (charIndex < firstNonWhitespaceIndex || charIndex > lastNonWhitespaceIndex) {\n\t\t\t// in leading or trailing whitespace\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Tab) {\n\t\t\t// a tab character is rendered both in all and boundary cases\n\t\t\tisInWhitespace = true;\n\t\t} else if (chCode === CharCode.Space) {\n\t\t\t// hit a space character\n\t\t\tif (onlyBoundary) {\n\t\t\t\t// rendering only boundary whitespace\n\t\t\t\tif (wasInWhitespace) {\n\t\t\t\t\tisInWhitespace = true;\n\t\t\t\t} else {\n\t\t\t\t\tconst nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null);\n\t\t\t\t\tisInWhitespace = (nextChCode === CharCode.Space || nextChCode === CharCode.Tab);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisInWhitespace = true;\n\t\t\t}\n\t\t} else {\n\t\t\tisInWhitespace = false;\n\t\t}\n\n\t\t// If rendering whitespace on selection, check that the charIndex falls within a selection\n\t\tif (isInWhitespace && selections) {\n\t\t\tisInWhitespace = !!currentSelection && currentSelection.start <= charIndex && charIndex < currentSelection.endExclusive;\n\t\t}\n\n\t\t// If rendering only trailing whitespace, check that the charIndex points to trailing whitespace.\n\t\tif (isInWhitespace && onlyTrailing) {\n\t\t\tisInWhitespace = lineIsEmptyOrWhitespace || charIndex > lastNonWhitespaceIndex;\n\t\t}\n\n\t\tif (isInWhitespace && tokenContainsRTL) {\n\t\t\t// If the token contains RTL text, breaking it up into multiple line parts\n\t\t\t// to render whitespace might affect the browser's bidi layout.\n\t\t\t//\n\t\t\t// We render whitespace in such tokens only if the whitespace\n\t\t\t// is the leading or the trailing whitespace of the line,\n\t\t\t// which doesn't affect the browser's bidi layout.\n\t\t\tif (charIndex >= firstNonWhitespaceIndex && charIndex <= lastNonWhitespaceIndex) {\n\t\t\t\tisInWhitespace = false;\n\t\t\t}\n\t\t}\n\n\t\tif (wasInWhitespace) {\n\t\t\t// was in whitespace token\n\t\t\tif (!isInWhitespace || (!useMonospaceOptimizations && tmpIndent >= tabSize)) {\n\t\t\t\t// leaving whitespace token or entering a new indent\n\t\t\t\tif (generateLinePartForEachWhitespace) {\n\t\t\t\t\tconst lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n\t\t\t\t\tfor (let i = lastEndIndex + 1; i <= charIndex; i++) {\n\t\t\t\t\t\tresult[resultLen++] = new LinePart(i, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult[resultLen++] = new LinePart(charIndex, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t\t}\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t} else {\n\t\t\t// was in regular token\n\t\t\tif (charIndex === tokenEndIndex || (isInWhitespace && charIndex > fauxIndentLength)) {\n\t\t\t\tresult[resultLen++] = new LinePart(charIndex, tokenType, 0, tokenContainsRTL);\n\t\t\t\ttmpIndent = tmpIndent % tabSize;\n\t\t\t}\n\t\t}\n\n\t\tif (chCode === CharCode.Tab) {\n\t\t\ttmpIndent = tabSize;\n\t\t} else if (strings.isFullWidthCharacter(chCode)) {\n\t\t\ttmpIndent += 2;\n\t\t} else {\n\t\t\ttmpIndent++;\n\t\t}\n\n\t\twasInWhitespace = isInWhitespace;\n\n\t\twhile (charIndex === tokenEndIndex) {\n\t\t\ttokenIndex++;\n\t\t\tif (tokenIndex < tokensLength) {\n\t\t\t\ttokenType = tokens[tokenIndex].type;\n\t\t\t\ttokenContainsRTL = tokens[tokenIndex].containsRTL;\n\t\t\t\ttokenEndIndex = tokens[tokenIndex].endIndex;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet generateWhitespace = false;\n\tif (wasInWhitespace) {\n\t\t// was in whitespace token\n\t\tif (continuesWithWrappedLine && onlyBoundary) {\n\t\t\tconst lastCharCode = (len > 0 ? lineContent.charCodeAt(len - 1) : CharCode.Null);\n\t\t\tconst prevCharCode = (len > 1 ? lineContent.charCodeAt(len - 2) : CharCode.Null);\n\t\t\tconst isSingleTrailingSpace = (lastCharCode === CharCode.Space && (prevCharCode !== CharCode.Space && prevCharCode !== CharCode.Tab));\n\t\t\tif (!isSingleTrailingSpace) {\n\t\t\t\tgenerateWhitespace = true;\n\t\t\t}\n\t\t} else {\n\t\t\tgenerateWhitespace = true;\n\t\t}\n\t}\n\n\tif (generateWhitespace) {\n\t\tif (generateLinePartForEachWhitespace) {\n\t\t\tconst lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n\t\t\tfor (let i = lastEndIndex + 1; i <= len; i++) {\n\t\t\t\tresult[resultLen++] = new LinePart(i, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t\t}\n\t\t} else {\n\t\t\tresult[resultLen++] = new LinePart(len, 'mtkw', LinePartMetadata.IS_WHITESPACE, false);\n\t\t}\n\t} else {\n\t\tresult[resultLen++] = new LinePart(len, tokenType, 0, tokenContainsRTL);\n\t}\n\n\treturn result;\n}\n\n/**\n * Inline decorations are \"merged\" on top of tokens.\n * Special care must be taken when multiple inline decorations are at play and they overlap.\n */\nfunction _applyInlineDecorations(lineContent: string, len: number, tokens: LinePart[], _lineDecorations: LineDecoration[]): LinePart[] {\n\t_lineDecorations.sort(LineDecoration.compare);\n\tconst lineDecorations = LineDecorationsNormalizer.normalize(lineContent, _lineDecorations);\n\tconst lineDecorationsLen = lineDecorations.length;\n\n\tlet lineDecorationIndex = 0;\n\tconst result: LinePart[] = [];\n\tlet resultLen = 0;\n\tlet lastResultEndIndex = 0;\n\tfor (let tokenIndex = 0, len = tokens.length; tokenIndex < len; tokenIndex++) {\n\t\tconst token = tokens[tokenIndex];\n\t\tconst tokenEndIndex = token.endIndex;\n\t\tconst tokenType = token.type;\n\t\tconst tokenMetadata = token.metadata;\n\t\tconst tokenContainsRTL = token.containsRTL;\n\n\t\twhile (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset < tokenEndIndex) {\n\t\t\tconst lineDecoration = lineDecorations[lineDecorationIndex];\n\n\t\t\tif (lineDecoration.startOffset > lastResultEndIndex) {\n\t\t\t\tlastResultEndIndex = lineDecoration.startOffset;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t\t}\n\n\t\t\tif (lineDecoration.endOffset + 1 <= tokenEndIndex) {\n\t\t\t\t// This line decoration ends before this token ends\n\t\t\t\tlastResultEndIndex = lineDecoration.endOffset + 1;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata, tokenContainsRTL);\n\t\t\t\tlineDecorationIndex++;\n\t\t\t} else {\n\t\t\t\t// This line decoration continues on to the next token\n\t\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata, tokenContainsRTL);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (tokenEndIndex > lastResultEndIndex) {\n\t\t\tlastResultEndIndex = tokenEndIndex;\n\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n\t\t}\n\t}\n\n\tconst lastTokenEndIndex = tokens[tokens.length - 1].endIndex;\n\tif (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n\t\twhile (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n\t\t\tconst lineDecoration = lineDecorations[lineDecorationIndex];\n\t\t\tresult[resultLen++] = new LinePart(lastResultEndIndex, lineDecoration.className, lineDecoration.metadata, false);\n\t\t\tlineDecorationIndex++;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * This function is on purpose not split up into multiple functions to allow runtime type inference (i.e. performance reasons).\n * Notice how all the needed data is fully resolved and passed in (i.e. no other calls).\n */\nfunction _renderLine(input: ResolvedRenderLineInput, sb: StringBuilder): RenderLineOutput {\n\tconst fontIsMonospace = input.fontIsMonospace;\n\tconst canUseHalfwidthRightwardsArrow = input.canUseHalfwidthRightwardsArrow;\n\tconst containsForeignElements = input.containsForeignElements;\n\tconst lineContent = input.lineContent;\n\tconst len = input.len;\n\tconst isOverflowing = input.isOverflowing;\n\tconst overflowingCharCount = input.overflowingCharCount;\n\tconst parts = input.parts;\n\tconst fauxIndentLength = input.fauxIndentLength;\n\tconst tabSize = input.tabSize;\n\tconst startVisibleColumn = input.startVisibleColumn;\n\tconst spaceWidth = input.spaceWidth;\n\tconst renderSpaceCharCode = input.renderSpaceCharCode;\n\tconst renderWhitespace = input.renderWhitespace;\n\tconst renderControlCharacters = input.renderControlCharacters;\n\n\tconst characterMapping = new CharacterMapping(len + 1, parts.length);\n\tlet lastCharacterMappingDefined = false;\n\n\tlet charIndex = 0;\n\tlet visibleColumn = startVisibleColumn;\n\tlet charOffsetInPart = 0; // the character offset in the current part\n\tlet charHorizontalOffset = 0; // the character horizontal position in terms of chars relative to line start\n\n\tlet partDisplacement = 0;\n\n\tsb.appendString('<span>');\n\n\tfor (let partIndex = 0, tokensLen = parts.length; partIndex < tokensLen; partIndex++) {\n\n\t\tconst part = parts[partIndex];\n\t\tconst partEndIndex = part.endIndex;\n\t\tconst partType = part.type;\n\t\tconst partContainsRTL = part.containsRTL;\n\t\tconst partRendersWhitespace = (renderWhitespace !== RenderWhitespace.None && part.isWhitespace());\n\t\tconst partRendersWhitespaceWithWidth = partRendersWhitespace && !fontIsMonospace && (partType === 'mtkw'/*only whitespace*/ || !containsForeignElements);\n\t\tconst partIsEmptyAndHasPseudoAfter = (charIndex === partEndIndex && part.isPseudoAfter());\n\t\tcharOffsetInPart = 0;\n\n\t\tsb.appendString('<span ');\n\t\tif (partContainsRTL) {\n\t\t\tsb.appendString('dir=\"rtl\" style=\"unicode-bidi:isolate\" ');\n\t\t}\n\t\tsb.appendString('class=\"');\n\t\tsb.appendString(partRendersWhitespaceWithWidth ? 'mtkz' : partType);\n\t\tsb.appendASCIICharCode(CharCode.DoubleQuote);\n\n\t\tif (partRendersWhitespace) {\n\n\t\t\tlet partWidth = 0;\n\t\t\t{\n\t\t\t\tlet _charIndex = charIndex;\n\t\t\t\tlet _visibleColumn = visibleColumn;\n\n\t\t\t\tfor (; _charIndex < partEndIndex; _charIndex++) {\n\t\t\t\t\tconst charCode = lineContent.charCodeAt(_charIndex);\n\t\t\t\t\tconst charWidth = (charCode === CharCode.Tab ? (tabSize - (_visibleColumn % tabSize)) : 1) | 0;\n\t\t\t\t\tpartWidth += charWidth;\n\t\t\t\t\tif (_charIndex >= fauxIndentLength) {\n\t\t\t\t\t\t_visibleColumn += charWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (partRendersWhitespaceWithWidth) {\n\t\t\t\tsb.appendString(' style=\"width:');\n\t\t\t\tsb.appendString(String(spaceWidth * partWidth));\n\t\t\t\tsb.appendString('px\"');\n\t\t\t}\n\t\t\tsb.appendASCIICharCode(CharCode.GreaterThan);\n\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n\t\t\t\tpartDisplacement = 0;\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tlet producedCharacters: number;\n\t\t\t\tlet charWidth: number;\n\n\t\t\t\tif (charCode === CharCode.Tab) {\n\t\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize)) | 0;\n\t\t\t\t\tcharWidth = producedCharacters;\n\n\t\t\t\t\tif (!canUseHalfwidthRightwardsArrow || charWidth > 1) {\n\t\t\t\t\t\tsb.appendCharCode(0x2192); // RIGHTWARDS ARROW\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsb.appendCharCode(0xFFEB); // HALFWIDTH RIGHTWARDS ARROW\n\t\t\t\t\t}\n\t\t\t\t\tfor (let space = 2; space <= charWidth; space++) {\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t}\n\n\t\t\t\t} else { // must be CharCode.Space\n\t\t\t\t\tproducedCharacters = 2;\n\t\t\t\t\tcharWidth = 1;\n\n\t\t\t\t\tsb.appendCharCode(renderSpaceCharCode); // · or word separator middle dot\n\t\t\t\t\tsb.appendCharCode(0x200C); // ZERO WIDTH NON-JOINER\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart += producedCharacters;\n\t\t\t\tcharHorizontalOffset += charWidth;\n\t\t\t\tif (charIndex >= fauxIndentLength) {\n\t\t\t\t\tvisibleColumn += charWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tsb.appendASCIICharCode(CharCode.GreaterThan);\n\n\t\t\tfor (; charIndex < partEndIndex; charIndex++) {\n\t\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n\t\t\t\tpartDisplacement = 0;\n\t\t\t\tconst charCode = lineContent.charCodeAt(charIndex);\n\n\t\t\t\tlet producedCharacters = 1;\n\t\t\t\tlet charWidth = 1;\n\n\t\t\t\tswitch (charCode) {\n\t\t\t\t\tcase CharCode.Tab:\n\t\t\t\t\t\tproducedCharacters = (tabSize - (visibleColumn % tabSize));\n\t\t\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\t\t\tfor (let space = 1; space <= producedCharacters; space++) {\n\t\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Space:\n\t\t\t\t\t\tsb.appendCharCode(0xA0); // \n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.LessThan:\n\t\t\t\t\t\tsb.appendString('<');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.GreaterThan:\n\t\t\t\t\t\tsb.appendString('>');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Ampersand:\n\t\t\t\t\t\tsb.appendString('&');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.Null:\n\t\t\t\t\t\tif (renderControlCharacters) {\n\t\t\t\t\t\t\t// See https://unicode-table.com/en/blocks/control-pictures/\n\t\t\t\t\t\t\tsb.appendCharCode(9216);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsb.appendString('�');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase CharCode.UTF8_BOM:\n\t\t\t\t\tcase CharCode.LINE_SEPARATOR:\n\t\t\t\t\tcase CharCode.PARAGRAPH_SEPARATOR:\n\t\t\t\t\tcase CharCode.NEXT_LINE:\n\t\t\t\t\t\tsb.appendCharCode(0xFFFD);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (strings.isFullWidthCharacter(charCode)) {\n\t\t\t\t\t\t\tcharWidth++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// See https://unicode-table.com/en/blocks/control-pictures/\n\t\t\t\t\t\tif (renderControlCharacters && charCode < 32) {\n\t\t\t\t\t\t\tsb.appendCharCode(9216 + charCode);\n\t\t\t\t\t\t} else if (renderControlCharacters && charCode === 127) {\n\t\t\t\t\t\t\t// DEL\n\t\t\t\t\t\t\tsb.appendCharCode(9249);\n\t\t\t\t\t\t} else if (renderControlCharacters && isControlCharacter(charCode)) {\n\t\t\t\t\t\t\tsb.appendString('[U+');\n\t\t\t\t\t\t\tsb.appendString(to4CharHex(charCode));\n\t\t\t\t\t\t\tsb.appendString(']');\n\t\t\t\t\t\t\tproducedCharacters = 8;\n\t\t\t\t\t\t\tcharWidth = producedCharacters;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsb.appendCharCode(charCode);\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcharOffsetInPart += producedCharacters;\n\t\t\t\tcharHorizontalOffset += charWidth;\n\t\t\t\tif (charIndex >= fauxIndentLength) {\n\t\t\t\t\tvisibleColumn += charWidth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (partIsEmptyAndHasPseudoAfter) {\n\t\t\tpartDisplacement++;\n\t\t} else {\n\t\t\tpartDisplacement = 0;\n\t\t}\n\n\t\tif (charIndex >= len && !lastCharacterMappingDefined && part.isPseudoAfter()) {\n\t\t\tlastCharacterMappingDefined = true;\n\t\t\tcharacterMapping.setColumnInfo(charIndex + 1, partIndex, charOffsetInPart, charHorizontalOffset);\n\t\t}\n\n\t\tsb.appendString('</span>');\n\n\t}\n\n\tif (!lastCharacterMappingDefined) {\n\t\t// When getting client rects for the last character, we will position the\n\t\t// text range at the end of the span, insteaf of at the beginning of next span\n\t\tcharacterMapping.setColumnInfo(len + 1, parts.length - 1, charOffsetInPart, charHorizontalOffset);\n\t}\n\n\tif (isOverflowing) {\n\t\tsb.appendString('<span class=\"mtkoverflow\">');\n\t\tsb.appendString(nls.localize('showMore', \"Show more ({0})\", renderOverflowingCharCount(overflowingCharCount)));\n\t\tsb.appendString('</span>');\n\t}\n\n\tsb.appendString('</span>');\n\n\treturn new RenderLineOutput(characterMapping, containsForeignElements);\n}\n\nfunction to4CharHex(n: number): string {\n\treturn n.toString(16).toUpperCase().padStart(4, '0');\n}\n\nfunction renderOverflowingCharCount(n: number): string {\n\tif (n < 1024) {\n\t\treturn nls.localize('overflow.chars', \"{0} chars\", n);\n\t}\n\tif (n < 1024 * 1024) {\n\t\treturn `${(n / 1024).toFixed(1)} KB`;\n\t}\n\treturn `${(n / 1024 / 1024).toFixed(1)} MB`;\n}\n"]}
|
|
@@ -8,7 +8,8 @@ import { Color } from '../../../base/common/color.js';
|
|
|
8
8
|
import { Disposable } from '../../../base/common/lifecycle.js';
|
|
9
9
|
import * as platform from '../../../base/common/platform.js';
|
|
10
10
|
import * as strings from '../../../base/common/strings.js';
|
|
11
|
-
import {
|
|
11
|
+
import { filterValidationDecorations, filterFontDecorations } from '../config/editorOptions.js';
|
|
12
|
+
import { EDITOR_FONT_DEFAULTS } from '../config/fontInfo.js';
|
|
12
13
|
import { CursorsController } from '../cursor/cursor.js';
|
|
13
14
|
import { CursorConfiguration } from '../cursorCommon.js';
|
|
14
15
|
import { Position } from '../core/position.js';
|