muggle-string
Advanced tools
Comparing version 0.3.0 to 0.3.1
@@ -6,2 +6,3 @@ import { Segment } from "./types"; | ||
export declare function toString<T extends Segment<any>>(segments: T[]): string; | ||
export declare function create(source: string): Segment[]; | ||
export declare function replace<T extends Segment<any>>(segments: T[], pattern: string | RegExp, ...replacers: (T | ((match: string) => T))[]): void; | ||
@@ -8,0 +9,0 @@ export declare function replaceAll<T extends Segment<any>>(segments: T[], pattern: RegExp, ...replacers: (T | ((match: string) => T))[]): void; |
@@ -17,3 +17,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.replaceRange = exports.replaceSourceRange = exports.replaceAll = exports.replace = exports.toString = exports.getLength = void 0; | ||
exports.replaceRange = exports.replaceSourceRange = exports.replaceAll = exports.replace = exports.create = exports.toString = exports.getLength = void 0; | ||
const binarySearch_1 = require("./binarySearch"); | ||
@@ -35,2 +35,6 @@ const track_1 = require("./track"); | ||
exports.toString = toString; | ||
function create(source) { | ||
return [[source, undefined, 0]]; | ||
} | ||
exports.create = create; | ||
function replace(segments, pattern, ...replacers) { | ||
@@ -37,0 +41,0 @@ const str = toString(segments); |
@@ -5,2 +5,2 @@ import { Segment, StackNode } from "./types"; | ||
export declare function resetOffsetStack(): void; | ||
export declare function track<T extends Segment<any>[]>(segments: T): [T, StackNode[]]; | ||
export declare function track<T extends Segment<any>[]>(segments: T, stacks?: StackNode[]): [T, StackNode[]]; |
@@ -18,4 +18,3 @@ "use strict"; | ||
exports.resetOffsetStack = resetOffsetStack; | ||
function track(segments) { | ||
const stacks = []; | ||
function track(segments, stacks = []) { | ||
return [ | ||
@@ -81,25 +80,32 @@ new Proxy(segments, { | ||
} | ||
let remainDeleteCount = deleteCount; | ||
let stacksDeleteStart; | ||
let stacksDeleteLength = 0; | ||
let stackEnd = 0; | ||
let _stackStart = 0; | ||
let operateIndex; | ||
for (let i = 0; i < stacks.length; i++) { | ||
const stack = stacks[i]; | ||
const stackStart = stackEnd; | ||
stackEnd = stackStart + stack.length; | ||
while (start >= stackStart && start < stackEnd && remainDeleteCount && stack.length) { | ||
const stackStart = _stackStart; | ||
const stackEnd = stackStart + stack.length; | ||
_stackStart = stackEnd; | ||
if (start >= stackStart) { | ||
operateIndex = i + 1; | ||
const originalLength = stack.length; | ||
stack.length = start - stackStart; | ||
stacks.splice(operateIndex, 0, { stack: stack.stack, length: originalLength - stack.length }); | ||
break; | ||
} | ||
} | ||
if (operateIndex === undefined) { | ||
throw new Error('Invalid splice operation'); | ||
} | ||
let _deleteCount = deleteCount; | ||
for (let i = operateIndex; i < stacks.length; i++) { | ||
const stack = stacks[i]; | ||
while (_deleteCount > 0 && stack.length > 0) { | ||
stack.length--; | ||
remainDeleteCount--; | ||
stackEnd--; | ||
_deleteCount--; | ||
} | ||
if (!stack.length) { | ||
stacksDeleteStart !== null && stacksDeleteStart !== void 0 ? stacksDeleteStart : (stacksDeleteStart = i); | ||
stacksDeleteLength++; | ||
if (_deleteCount === 0) { | ||
break; | ||
} | ||
if (remainDeleteCount <= 0) | ||
break; | ||
} | ||
if (stacksDeleteStart !== undefined) { | ||
stacks.splice(stacksDeleteStart, stacksDeleteLength); | ||
} | ||
stacks.splice(operateIndex, 0, { stack: getStack(), length: items.length }); | ||
return segments.splice(start, deleteCount, ...items); | ||
@@ -106,0 +112,0 @@ } |
{ | ||
"name": "muggle-string", | ||
"version": "0.3.0", | ||
"version": "0.3.1", | ||
"main": "out/index.js", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
17226
364