punctilio 4.1.5 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/prose-view.d.ts +27 -0
- package/dist/prose-view.d.ts.map +1 -0
- package/dist/prose-view.js +228 -0
- package/dist/prose-view.js.map +1 -0
- package/dist/quote-classifier.d.ts +19 -0
- package/dist/quote-classifier.d.ts.map +1 -0
- package/dist/quote-classifier.js +896 -0
- package/dist/quote-classifier.js.map +1 -0
- package/dist/quotes.d.ts +2 -2
- package/dist/quotes.d.ts.map +1 -1
- package/dist/quotes.js +13 -303
- package/dist/quotes.js.map +1 -1
- package/dist/rehype.d.ts.map +1 -1
- package/dist/rehype.js +4 -2
- package/dist/rehype.js.map +1 -1
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +3 -78
- package/dist/symbols.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +8 -0
- package/src/prose-view.ts +295 -0
- package/src/quote-classifier.ts +957 -0
- package/src/quotes.ts +13 -369
- package/src/rehype.ts +4 -2
- package/src/symbols.ts +3 -99
package/dist/symbols.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { cachedRegExp, DEFAULT_SEPARATOR, getEscapedSeparator, LATIN_LETTERS, SPACE_CHARS, UNICODE_SYMBOLS, wordBoundaryEnd } from "./constants.js";
|
|
2
|
-
import {
|
|
2
|
+
import { convertPrimeMarks } from "./quote-classifier.js";
|
|
3
|
+
import { namedGroups } from "./utils.js";
|
|
3
4
|
const { ELLIPSIS, MULTIPLICATION, NOT_EQUAL, PLUS_MINUS, COPYRIGHT, REGISTERED, TRADEMARK, DEGREE, ARROW_RIGHT, ARROW_LEFT, ARROW_LEFT_RIGHT, APPROXIMATE, LESS_EQUAL, GREATER_EQUAL, NBSP, PRIME, DOUBLE_PRIME, SUPERSCRIPT_ST, SUPERSCRIPT_ND, SUPERSCRIPT_RD, SUPERSCRIPT_TH, DOUBLE_QUESTION, QUESTION_EXCLAMATION, EXCLAMATION_QUESTION, } = UNICODE_SYMBOLS;
|
|
4
5
|
/** Convert "..." or ". . ." to "…". */
|
|
5
6
|
export function ellipsis(text, options = {}) {
|
|
@@ -171,85 +172,9 @@ export function degrees(text, options = {}) {
|
|
|
171
172
|
const notCompound = `(?!-[${LATIN_LETTERS}]|[+#])`;
|
|
172
173
|
return text.replace(cachedRegExp(`(?<num>\\d${chr}?) ?(?<unit>[CF])${notCompound}${wbe}`, "g"), (_, num, unit) => `${num} ${DEGREE}${unit}`);
|
|
173
174
|
}
|
|
174
|
-
/**
|
|
175
|
-
* Matches quote characters in priority order:
|
|
176
|
-
* 1. Prime candidate: digit + quote + non-letter (e.g., 5', 12")
|
|
177
|
-
* 2. Contraction: letter + quote + letter (e.g., it's, don't, O'Brien)
|
|
178
|
-
* 3. Trailing apostrophe: letter + quote + non-letter (e.g., dogs')
|
|
179
|
-
* 4. Bare quote: anything else (typically preceded by space/start)
|
|
180
|
-
*/
|
|
181
|
-
function buildQuoteClassificationPattern(escapedQuote, escapedSeparator) {
|
|
182
|
-
const primeCandidate = `(?<digit>\\d)(?<sep>${escapedSeparator}?)${escapedQuote}(?<afterSep>${escapedSeparator}?)(?![${LATIN_LETTERS}])`;
|
|
183
|
-
const contraction = `(?<=[${LATIN_LETTERS}]${escapedSeparator}?)(?<contraction>${escapedQuote})(?=${escapedSeparator}?[${LATIN_LETTERS}])`;
|
|
184
|
-
const trailingApostrophe = `(?<=[${LATIN_LETTERS}]${escapedSeparator}?)(?<trailing>${escapedQuote})`;
|
|
185
|
-
const bareQuote = escapedQuote;
|
|
186
|
-
return cachedRegExp(`${primeCandidate}|${contraction}|${trailingApostrophe}|${bareQuote}`, "g");
|
|
187
|
-
}
|
|
188
|
-
// Converts prime candidates while tracking quote balance. A prime after a
|
|
189
|
-
// digit converts only when no unmatched opener precedes it. Inside balanced
|
|
190
|
-
// quotes, a ′+digits context (feet-inches like 5′10") still converts.
|
|
191
|
-
function balancedPrimeReplacer(primeChar, escapedSeparator) {
|
|
192
|
-
// Pre-compile the feet-inches context pattern for the double-prime pass.
|
|
193
|
-
// Matches when the text before a prime candidate ends with ′ followed by
|
|
194
|
-
// any mix of digits and separators (e.g., "5′1" before the "0" in 5′10").
|
|
195
|
-
const feetInchesContext = primeChar === DOUBLE_PRIME
|
|
196
|
-
? cachedRegExp(`${PRIME}(?:${escapedSeparator}|\\d)*$`, "")
|
|
197
|
-
: null;
|
|
198
|
-
let balance = 0;
|
|
199
|
-
// Replace callback: (match, ...captures, offset, fullString, namedGroups)
|
|
200
|
-
return (...args) => {
|
|
201
|
-
const fullMatch = args[0];
|
|
202
|
-
const groups = namedGroups(args);
|
|
203
|
-
// Contraction (letter + quote + letter): skip entirely
|
|
204
|
-
if (groups.contraction !== undefined) {
|
|
205
|
-
return fullMatch;
|
|
206
|
-
}
|
|
207
|
-
// Trailing apostrophe (letter + quote + non-letter): close if opener exists, else skip
|
|
208
|
-
if (groups.trailing !== undefined) {
|
|
209
|
-
if (balance > 0)
|
|
210
|
-
balance--;
|
|
211
|
-
return fullMatch;
|
|
212
|
-
}
|
|
213
|
-
const { digit, sep, afterSep } = groups;
|
|
214
|
-
if (digit !== undefined) {
|
|
215
|
-
// Prime candidate: convert only if no unmatched opening quote
|
|
216
|
-
if (balance <= 0) {
|
|
217
|
-
return `${digit}${sep}${primeChar}${afterSep}`;
|
|
218
|
-
}
|
|
219
|
-
// Inside balanced quotes: check if this is feet-inches notation
|
|
220
|
-
// (e.g., 5′10" where ″ is inches, not a closing quote)
|
|
221
|
-
if (feetInchesContext) {
|
|
222
|
-
const { offset: matchOffset, input: fullString } = replaceCallbackContext(args);
|
|
223
|
-
if (feetInchesContext.test(fullString.substring(0, matchOffset))) {
|
|
224
|
-
return `${digit}${sep}${primeChar}${afterSep}`;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
balance--;
|
|
228
|
-
return fullMatch;
|
|
229
|
-
}
|
|
230
|
-
// Bare quote (preceded by space/start): opener or closer
|
|
231
|
-
if (balance <= 0) {
|
|
232
|
-
balance = 1;
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
balance--;
|
|
236
|
-
}
|
|
237
|
-
return fullMatch;
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
175
|
/** Convert 5'10" to 5′10″ (prime marks). Call before smart quotes. */
|
|
241
176
|
export function primeMarks(text, options = {}) {
|
|
242
|
-
|
|
243
|
-
const quotePrimePairs = [
|
|
244
|
-
["'", PRIME],
|
|
245
|
-
['"', DOUBLE_PRIME],
|
|
246
|
-
];
|
|
247
|
-
for (const [quote, primeChar] of quotePrimePairs) {
|
|
248
|
-
// ' and " are not regex-special, so they can be used directly as patterns
|
|
249
|
-
const pattern = buildQuoteClassificationPattern(quote, escapedSeparator);
|
|
250
|
-
text = text.replace(pattern, balancedPrimeReplacer(primeChar, escapedSeparator));
|
|
251
|
-
}
|
|
252
|
-
return text;
|
|
177
|
+
return convertPrimeMarks(text, options.separator ?? DEFAULT_SEPARATOR);
|
|
253
178
|
}
|
|
254
179
|
const FRACTION_TUPLES = [
|
|
255
180
|
["1", "4", UNICODE_SYMBOLS.FRACTION_1_4],
|
package/dist/symbols.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -27,6 +27,14 @@ export {
|
|
|
27
27
|
REFERENCE_ABBREVIATIONS,
|
|
28
28
|
UNITS,
|
|
29
29
|
} from "./nbsp.js"
|
|
30
|
+
export {
|
|
31
|
+
buildProseView,
|
|
32
|
+
type ProseNode,
|
|
33
|
+
type ProseView,
|
|
34
|
+
replaceAllInView,
|
|
35
|
+
type ReplaceAllOptions,
|
|
36
|
+
runLegacyPass,
|
|
37
|
+
} from "./prose-view.js"
|
|
30
38
|
export { classifyApostrophes, niceQuotes, PUNCTUATION_STYLES, type PunctuationStyle, type QuoteOptions } from "./quotes.js"
|
|
31
39
|
|
|
32
40
|
export interface TransformOptions {
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { DEFAULT_SEPARATOR } from "./constants.js"
|
|
2
|
+
import { transformTextNodes } from "./utils.js"
|
|
3
|
+
|
|
4
|
+
export interface ProseNode {
|
|
5
|
+
value: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface ProseView {
|
|
9
|
+
/** Concatenation of the nodes' values. No markers, ever. */
|
|
10
|
+
readonly text: string
|
|
11
|
+
/** Offsets in `text` where one source node ends and the next begins (interior boundaries only; length = nodes.length - 1; may contain duplicates when nodes are empty). */
|
|
12
|
+
readonly boundaries: readonly number[]
|
|
13
|
+
/** True iff a node edge falls at exactly this offset. O(log n) binary search. */
|
|
14
|
+
hasBoundary(offset: number): boolean
|
|
15
|
+
/** Queue an edit replacing [start, end) with `text`. Edits must not overlap; enforced at commit. */
|
|
16
|
+
replace(start: number, end: number, text: string, opts?: { bind?: "left" | "right" }): void
|
|
17
|
+
/** Apply queued edits back onto the source nodes (mutating their `value`s), then recompute `text`/`boundaries`. The view supports arbitrarily many queue/commit cycles. */
|
|
18
|
+
commit(): void
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface QueuedEdit {
|
|
22
|
+
start: number
|
|
23
|
+
end: number
|
|
24
|
+
text: string
|
|
25
|
+
bind: "left" | "right"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** True iff the offset falls between a high surrogate and its low surrogate. */
|
|
29
|
+
function splitsSurrogatePair(text: string, offset: number): boolean {
|
|
30
|
+
if (offset <= 0 || offset >= text.length) return false
|
|
31
|
+
const high = text.charCodeAt(offset - 1)
|
|
32
|
+
const low = text.charCodeAt(offset)
|
|
33
|
+
return high >= 0xd800 && high <= 0xdbff && low >= 0xdc00 && low <= 0xdfff
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
class ProseViewImpl implements ProseView {
|
|
37
|
+
private readonly nodes: ProseNode[]
|
|
38
|
+
private cachedText: string
|
|
39
|
+
private cachedBoundaries: number[]
|
|
40
|
+
private edits: QueuedEdit[] = []
|
|
41
|
+
|
|
42
|
+
constructor(nodes: ProseNode[]) {
|
|
43
|
+
this.nodes = nodes
|
|
44
|
+
this.cachedText = ""
|
|
45
|
+
this.cachedBoundaries = []
|
|
46
|
+
this.refresh()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get text(): string {
|
|
50
|
+
return this.cachedText
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get boundaries(): readonly number[] {
|
|
54
|
+
return this.cachedBoundaries
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Recompute `text` and `boundaries` from the current node values. @internal */
|
|
58
|
+
refresh(): void {
|
|
59
|
+
let text = ""
|
|
60
|
+
const boundaries: number[] = []
|
|
61
|
+
this.nodes.forEach((node, index) => {
|
|
62
|
+
text += node.value
|
|
63
|
+
if (index < this.nodes.length - 1) {
|
|
64
|
+
boundaries.push(text.length)
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
this.cachedText = text
|
|
68
|
+
this.cachedBoundaries = boundaries
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** @internal */
|
|
72
|
+
hasQueuedEdits(): boolean {
|
|
73
|
+
return this.edits.length > 0
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** @internal */
|
|
77
|
+
getNodes(): ProseNode[] {
|
|
78
|
+
return this.nodes
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
hasBoundary(offset: number): boolean {
|
|
82
|
+
const boundaries = this.cachedBoundaries
|
|
83
|
+
let low = 0
|
|
84
|
+
let high = boundaries.length - 1
|
|
85
|
+
while (low <= high) {
|
|
86
|
+
const mid = (low + high) >>> 1
|
|
87
|
+
const value = boundaries[mid]
|
|
88
|
+
if (value === offset) return true
|
|
89
|
+
if (value < offset) {
|
|
90
|
+
low = mid + 1
|
|
91
|
+
} else {
|
|
92
|
+
high = mid - 1
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return false
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
replace(start: number, end: number, text: string, opts?: { bind?: "left" | "right" }): void {
|
|
99
|
+
if (!Number.isInteger(start) || !Number.isInteger(end)) {
|
|
100
|
+
throw new Error(`replace() offsets must be integers, got start=${start}, end=${end}.`)
|
|
101
|
+
}
|
|
102
|
+
if (start < 0 || start > end || end > this.cachedText.length) {
|
|
103
|
+
throw new Error(
|
|
104
|
+
`replace() requires 0 <= start <= end <= text.length (${this.cachedText.length}), ` +
|
|
105
|
+
`got start=${start}, end=${end}.`
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
if (splitsSurrogatePair(this.cachedText, start)) {
|
|
109
|
+
throw new Error(`replace() start=${start} splits a UTF-16 surrogate pair.`)
|
|
110
|
+
}
|
|
111
|
+
if (splitsSurrogatePair(this.cachedText, end)) {
|
|
112
|
+
throw new Error(`replace() end=${end} splits a UTF-16 surrogate pair.`)
|
|
113
|
+
}
|
|
114
|
+
this.edits.push({ start, end, text, bind: opts?.bind ?? "left" })
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Apply queued edits to the source nodes. Edits are ordered by start offset,
|
|
119
|
+
* tie-breaking shorter spans first so a zero-length edit sorts before a
|
|
120
|
+
* spanning edit at the same start. A pure insertion may therefore coexist
|
|
121
|
+
* with a replacement starting at the same offset: the insertion's text lands
|
|
122
|
+
* before the replaced span's text. Overlapping spans (and two pure
|
|
123
|
+
* insertions at the same offset) are rejected.
|
|
124
|
+
*
|
|
125
|
+
* All edits are distributed in a single left-to-right pass that rebuilds
|
|
126
|
+
* each node's value once — per-edit string surgery would be quadratic on
|
|
127
|
+
* edit-dense input.
|
|
128
|
+
*/
|
|
129
|
+
commit(): void {
|
|
130
|
+
if (this.edits.length === 0) {
|
|
131
|
+
return
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const sorted = [...this.edits].sort(
|
|
135
|
+
(a, b) => a.start - b.start || (a.end - a.start) - (b.end - b.start)
|
|
136
|
+
)
|
|
137
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
138
|
+
const prev = sorted[i - 1]
|
|
139
|
+
const curr = sorted[i]
|
|
140
|
+
if (prev.end > curr.start) {
|
|
141
|
+
throw new Error(
|
|
142
|
+
`Overlapping edits: [${prev.start}, ${prev.end}) and [${curr.start}, ${curr.end}).`
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
if (prev.end === curr.start && prev.start === prev.end && curr.start === curr.end) {
|
|
146
|
+
throw new Error(
|
|
147
|
+
`Two pure insertions at the same offset ${curr.start} are ambiguous; combine them.`
|
|
148
|
+
)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Node spans in `text` via cumulative lengths.
|
|
153
|
+
const starts: number[] = []
|
|
154
|
+
const ends: number[] = []
|
|
155
|
+
let cursor = 0
|
|
156
|
+
for (const node of this.nodes) {
|
|
157
|
+
starts.push(cursor)
|
|
158
|
+
cursor += node.value.length
|
|
159
|
+
ends.push(cursor)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const text = this.cachedText
|
|
163
|
+
const parts: string[][] = this.nodes.map(() => [])
|
|
164
|
+
|
|
165
|
+
// Rolling copy state: kept text in [0, copiedUpTo) has been distributed.
|
|
166
|
+
let copiedUpTo = 0
|
|
167
|
+
let copyNode = 0
|
|
168
|
+
const copyUpTo = (target: number): void => {
|
|
169
|
+
while (copiedUpTo < target) {
|
|
170
|
+
while (copyNode < this.nodes.length - 1 && ends[copyNode] <= copiedUpTo) copyNode++
|
|
171
|
+
const sliceEnd = Math.min(target, ends[copyNode])
|
|
172
|
+
parts[copyNode].push(text.slice(copiedUpTo, sliceEnd))
|
|
173
|
+
copiedUpTo = sliceEnd
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
for (const edit of sorted) {
|
|
178
|
+
copyUpTo(edit.start)
|
|
179
|
+
// Deleted spans are simply never copied; replacement/insertion text
|
|
180
|
+
// lands in the target node, whose parts are filled exactly up to
|
|
181
|
+
// `edit.start` at this point.
|
|
182
|
+
if (edit.text.length > 0) {
|
|
183
|
+
const targetIndex = edit.end > edit.start
|
|
184
|
+
? this.nodeContainingChar(edit.start, ends)
|
|
185
|
+
: this.targetNodeForInsertion(edit, ends)
|
|
186
|
+
parts[targetIndex].push(edit.text)
|
|
187
|
+
}
|
|
188
|
+
if (edit.end > copiedUpTo) copiedUpTo = edit.end
|
|
189
|
+
}
|
|
190
|
+
copyUpTo(text.length)
|
|
191
|
+
|
|
192
|
+
this.nodes.forEach((node, index) => {
|
|
193
|
+
node.value = parts[index].join("")
|
|
194
|
+
})
|
|
195
|
+
|
|
196
|
+
this.edits = []
|
|
197
|
+
this.refresh()
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Index of the node whose span contains the character at `offset`: the
|
|
202
|
+
* first node whose end lies past the offset (binary search; empty nodes at
|
|
203
|
+
* the offset are skipped, matching a first-containing-span linear scan).
|
|
204
|
+
*/
|
|
205
|
+
private nodeContainingChar(offset: number, ends: number[]): number {
|
|
206
|
+
let low = 0
|
|
207
|
+
let high = ends.length - 1
|
|
208
|
+
while (low < high) {
|
|
209
|
+
const mid = (low + high) >>> 1
|
|
210
|
+
if (ends[mid] <= offset) {
|
|
211
|
+
low = mid + 1
|
|
212
|
+
} else {
|
|
213
|
+
high = mid
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return low
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
private targetNodeForInsertion(edit: QueuedEdit, ends: number[]): number {
|
|
220
|
+
if (edit.bind === "left") {
|
|
221
|
+
if (edit.start === 0) return 0
|
|
222
|
+
return this.nodeContainingChar(edit.start - 1, ends)
|
|
223
|
+
}
|
|
224
|
+
if (edit.start === this.cachedText.length) return this.nodes.length - 1
|
|
225
|
+
return this.nodeContainingChar(edit.start, ends)
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export function buildProseView(nodes: ProseNode[]): ProseView {
|
|
230
|
+
return new ProseViewImpl(nodes)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export interface ReplaceAllOptions {
|
|
234
|
+
/** Opt-in: allow a match that contains an interior node boundary. Default: such matches are skipped. */
|
|
235
|
+
allowBoundaries?: (match: RegExpExecArray, view: ProseView) => boolean
|
|
236
|
+
/** For pure-insertion edits produced by the replacer (rare), bind side. */
|
|
237
|
+
bind?: "left" | "right"
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/** True iff some interior boundary falls strictly inside the match span. */
|
|
241
|
+
function matchContainsBoundary(match: RegExpExecArray, view: ProseView): boolean {
|
|
242
|
+
const matchStart = match.index
|
|
243
|
+
const matchEnd = match.index + match[0].length
|
|
244
|
+
for (const boundary of view.boundaries) {
|
|
245
|
+
if (boundary > matchStart && boundary < matchEnd) return true
|
|
246
|
+
}
|
|
247
|
+
return false
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export function replaceAllInView(
|
|
251
|
+
view: ProseView,
|
|
252
|
+
regex: RegExp,
|
|
253
|
+
replacer: (match: RegExpExecArray, view: ProseView) => string | null,
|
|
254
|
+
options?: ReplaceAllOptions,
|
|
255
|
+
): void {
|
|
256
|
+
if (!regex.global) {
|
|
257
|
+
throw new Error("replaceAllInView() requires a regex with the global (g) flag.")
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const allowBoundaries = options?.allowBoundaries
|
|
261
|
+
const bind = options?.bind
|
|
262
|
+
const text = view.text
|
|
263
|
+
regex.lastIndex = 0
|
|
264
|
+
|
|
265
|
+
let match: RegExpExecArray | null
|
|
266
|
+
while ((match = regex.exec(text)) !== null) {
|
|
267
|
+
if (match[0].length === 0) {
|
|
268
|
+
regex.lastIndex += 1
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (matchContainsBoundary(match, view) && !allowBoundaries?.(match, view)) {
|
|
272
|
+
continue
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const replacement = replacer(match, view)
|
|
276
|
+
if (replacement === null) {
|
|
277
|
+
continue
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
view.replace(match.index, match.index + match[0].length, replacement, bind ? { bind } : undefined)
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export function runLegacyPass(
|
|
285
|
+
view: ProseView,
|
|
286
|
+
passFn: (markedText: string) => string,
|
|
287
|
+
separator: string = DEFAULT_SEPARATOR,
|
|
288
|
+
): void {
|
|
289
|
+
const impl = view as ProseViewImpl
|
|
290
|
+
if (impl.hasQueuedEdits()) {
|
|
291
|
+
throw new Error("runLegacyPass() cannot run while the view has uncommitted queued edits.")
|
|
292
|
+
}
|
|
293
|
+
transformTextNodes(impl.getNodes(), passFn, separator)
|
|
294
|
+
impl.refresh()
|
|
295
|
+
}
|